微信的新增永久素材,最重要的是图文素材,基本流程是如下:
- 获取access_token;
- 上传封面素材,获取永久素材的media_id,可以是images或者thumb类型都可以
- 上传图文中的图片,获取图片的腾讯域名的url
- 上传永久图文素材
第一步就不说了,curl的就可以解决。
第二步获取永久素材跟上篇获取临时id大同小异,等下会吧代码贴出来
第三步获取图文中的图片url,主要也只是curl,和获取素材的流程差不多
第四步就是最重要,不过有了神器就简单了
代码基本就是如下几个封装好的方法,图片地址可以参考上篇的地址,其他都是很简单的
/*
* 新增永久图文
*/
public function addEver_media($json){
$url = "https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=".$this->get_access_token();
$res = $this->post($url, $json, 'json');
// 异常处理: 获取时网络错误
// 判断是否调用成功
return $res;
}
/*
* 新增永久素材
*/
public function addSucai($path,$type,$title="",$dis=""){
$url = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=".$this->get_access_token()."&type=".$type;
if($type=="video"){
$b = json_encode(array(
'title'=>$title,
'introduction'=>$dis
));
$res = array(
'media' => '@'.$path,
'description'=>$b
);
$res = $this->upload($url, $res);
}else{
$res = $this->upload($url, array('media' => '@'.$path));
}
// 判断是否调用成功
return $res;
}
/*
* 获取永久素材url
*/
public function getSucaiURL($media){
$url = "https://api.weixin.qq.com/cgi-bin/material/get_material?access_token=" .$this->get_access_token();
$arr = json_encode(array('media_id' => $media));
$res = $this->post($url, $arr, 'json');
// 判断是否调用成功
return $res;
}
/*
* 上传图片获取url
*/
public function getPicURL($path){
$url = "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=" .$this->get_access_token() ;
$res = $this->upload($url, array('media' => '@'.$path));
// 判断是否调用成功
return $res;
}
/*
* 上传图片。图文专用
*/
public static function upload($url, $filedata) {
$curl = curl_init ();
if (class_exists ( '/CURLFile' )) {//php5.5跟php5.6中的CURLOPT_SAFE_UPLOAD的默认值不同
curl_setopt ( $curl, CURLOPT_SAFE_UPLOAD, true );
} else {
if (defined ( 'CURLOPT_SAFE_UPLOAD' )) {
curl_setopt ( $curl, CURLOPT_SAFE_UPLOAD, false );
}
}
curl_setopt ( $curl, CURLOPT_URL, $url );
curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, FALSE );
if (! empty ( $filedata )) {
curl_setopt ( $curl, CURLOPT_POST, 1 );
curl_setopt ( $curl, CURLOPT_POSTFIELDS, $filedata );
}
curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 );
$output = curl_exec ( $curl );
curl_close ( $curl );
return $output;
}
public function post($url, $fields, $data_type='text')
{
$cl = curl_init();
if(stripos($url, 'https://') !== FALSE) {
curl_setopt($cl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($cl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($cl, CURLOPT_SSLVERSION, 1);
}
curl_setopt($cl, CURLOPT_URL, $url);
curl_setopt($cl, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($cl, CURLOPT_POST, true);
curl_setopt($cl, CURLOPT_POSTFIELDS, $fields);
$content = curl_exec($cl);
$status = curl_getinfo($cl);
curl_close($cl);
if (isset($status['http_code']) && $status['http_code'] == 200) {
if ($data_type == 'json') {
$content = json_decode($content);
}
return $content;
} else {
return FALSE;
}
}