详解使用php调用微信接口上传永久素材
功能需求公司新开的公众号需要将公司平台现在的所有精品文章都导入,手动导入会有很多的工作量,所以采用自动化同步文章的方式来达到效果 开发说明微信open api提供了新增永久素材的接口,本次功能是基于这个接口进行数据同步的 使用到的接口
环境要求php版本:5.5以下(因为下面代码中的上传媒体文件必须要求在此环境,否则会调用微信接口失败) 开发流程 1、从公司平台获取所有的文章列表 2、遍历文章列表,查看文章是否有图片附件,若有进行第三步,否则进行第四步 3、检测所有的附件,取出第一个图片附件,并调用新增媒体文件接口上传图片获得返回后的media_id 4、调用素材列表接口获取默认的封面图片,并从中得到的数据中获取media_id 5、根据返回获取到的media_id开始调用上传图文接口上传素材 6、记录返回信息 接口设计获取微信素材列表接口 此接口是用于获取默认的图片media_id同步平台数据接口 此接口是用户同步我们自己的文章数据到微信功能实现 接口常量 获取微信素材列表接口action接口方法 说明:该方法为此接口的入口方法 调用方式:http://${domain}/weixin/get_articles/ get_access_token();
$list = $this->getForeverList($token,'image',20);
echo json_encode($list);
}
get_access_token方法
private function get_access_token() { 调用微信素材接口方法说明:该方法为调用微信获取永久素材列表接口方法 $type,'offset' => $offset,'count' => $count,);
$result = $this->http_post(
self::API_URL_PREFIX.self::MEDIA_FOREVER_BATCHGET_URL.'access_token='.$token,self::json_encode($data)
);
error_log('forever list is :'.$result);
if ($result)
{
$json = json_decode($result,true);
if (isset($json['errcode'])) {
$this->errCode = $json['errcode'];
$this->errMsg = $json['errmsg'];
return false;
}
return $json;
}
return false;
}
同步文章到微信接口action方法 说明:该方法为此接口的入口方法 调用方式:http://${domain}/weixin/upload_article/ model('article')->get_articles_list(null,1,18,'add_time DESC');
$access_token = $this->get_access_token();
$base_url = 'http://wenda.qiezilife.com/article/';
foreach ($article_list as $key => $article){
if($article['has_attach']){ $img = $attache['path']; $articles =array(); $articles[] = $upload_article_data; $data = array( } uploadForeverArticles方法说明:该方法为调用微信上传永久素材接口方法 '.self::json_encode($data));
$url = self::API_URL_PREFIX.self::MEDIA_FOREVER_NEWS_UPLOAD_URL.'access_token='.$access_token;
$result = HTTP::request($url,'POST',self::json_encode($data));
error_log('weixin return result is =====>'.$result);
if ($result)
{
$json = json_decode($result,true);
if (!$json || !empty($json['errcode'])) {
$this->errCode = $json['errcode'];
$this->errMsg = $json['errmsg'];
return false;
}
return $json;
}
return false;
}
upload_meterial方法说明:该方法为调用微信上传永久素材接口方法 "@{$real_path}",'form-data'=>$file_info);
curl_setopt ( $ch1,CURLOPT_URL,$url );
curl_setopt ( $ch1,CURLOPT_POST,1 );
curl_setopt ( $ch1,CURLOPT_RETURNTRANSFER,CURLOPT_CONNECTTIMEOUT,$timeout );
curl_setopt ( $ch1,CURLOPT_SSL_VERIFYPEER,FALSE );
curl_setopt ( $ch1,CURLOPT_SSL_VERIFYHOST,false );
curl_setopt ( $ch1,CURLOPT_POSTFIELDS,$data );
$result = curl_exec ( $ch1 );
echo '
'; echo 'reulst is ==========>'.$result; curl_close ( $ch1 ); if(curl_errno()==0){ $result=json_decode($result,true); //var_dump($result); return $result['media_id']; }else { return false; } } http_post方法说明:该方法为调http post请求方法 $val){
$aPOST[] = $key."=".urlencode($val);
}
$strPOST = join("&",$aPOST);
}
curl_setopt($oCurl,$url);
curl_setopt($oCurl,1 );
curl_setopt($oCurl,true);
curl_setopt($oCurl,$strPOST);
$sContent = curl_exec($oCurl);
$aStatus = curl_getinfo($oCurl);
curl_close($oCurl);
if(intval($aStatus["http_code"])==200){
return $sContent;
}else{
return false;
}
}
遇到的问题在开发的过程中,在调用微信上传媒体文件时候始终得到的返回数据为 原因:php版本的问题,我本机的版本5.6,而带有@识别的php方法必须是5.5以下才能识别,5.5以上的版本将这个特性去除了。 解决方法:更换php的版本到5.5或者5.5以下,不更换php的版本的方法暂时没有找到 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |