摘要:功能需求公司新開的公眾號需要將公司平臺現(xiàn)在的所有精品文章都導(dǎo)入,手動導(dǎo)入會有很多的工作量,所以采用自動化同步文章的方式來達(dá)到效果開發(fā)說明微信提供了新增永久素材的接口,本次功能是基于這個接口進(jìn)行數(shù)據(jù)同步的使用到的接口獲取永久素材列表接口新增永
功能需求
公司新開的公眾號需要將公司平臺現(xiàn)在的所有精品文章都導(dǎo)入,手動導(dǎo)入會有很多的工作量,所以采用自動化同步文章的方式來達(dá)到效果
開發(fā)說明微信open api提供了新增永久素材的接口,本次功能是基于這個接口進(jìn)行數(shù)據(jù)同步的
使用到的接口獲取永久素材列表接口:material/batchget_material
新增永久素材接口:material/add_news
新增媒體文件接口:material/add_material
圖文類型
單圖文(要求有默認(rèn)的封面,需要提前上傳到微信公眾號后臺)
環(huán)境要求php版本:5.5以下(因為下面代碼中的上傳媒體文件必須要求在此環(huán)境,否則會調(diào)用微信接口失敗)
開發(fā)流程1、從公司平臺獲取所有的文章列表
2、遍歷文章列表,查看文章是否有圖片附件,若有進(jìn)行第三步,否則進(jìn)行第四步
3、檢測所有的附件,取出第一個圖片附件,并調(diào)用新增媒體文件接口上傳圖片獲得返回后的media_id
4、調(diào)用素材列表接口獲取默認(rèn)的封面圖片,并從中得到的數(shù)據(jù)中獲取media_id
5、根據(jù)返回獲取到的media_id開始調(diào)用上傳圖文接口上傳素材
6、記錄返回信息
獲取微信素材列表接口
此接口是用于獲取默認(rèn)的圖片media_id
同步平臺數(shù)據(jù)接口
此接口是用戶同步我們自己的文章數(shù)據(jù)到微信
功能實現(xiàn)
接口常量
private $app_id = "wx189ae9fa8816b131"; private $app_secret = "36f5f430c591acbae3505fe877733283"; const API_URL_PREFIX = "https://api.weixin.qq.com/cgi-bin"; const MEDIA_FOREVER_UPLOAD_URL = "/material/add_material?"; const MEDIA_FOREVER_NEWS_UPLOAD_URL = "/material/add_news?"; const MEDIA_FOREVER_NEWS_UPDATE_URL = "/material/update_news?"; const MEDIA_FOREVER_GET_URL = "/material/get_material?"; const MEDIA_FOREVER_DEL_URL = "/material/del_material?"; const MEDIA_FOREVER_COUNT_URL = "/material/get_materialcount?"; const MEDIA_FOREVER_BATCHGET_URL = "/material/batchget_material?";
獲取微信素材列表接口
action接口方法
說明:該方法為此接口的入口方法
調(diào)用方式:http://${domain}/weixin/get_articles/
/** * 獲取圖片素材接口 */ public function get_articles_action(){ $token = $this->get_access_token(); $list = $this->getForeverList($token,"image",0,20); echo json_encode($list); } get_access_token方法 private function get_access_token() { $access_token = AWS_APP::cache()->get("access_token"); if(!$access_token){ error_log("get access_token from weixin "); $appId = $this->app_id; $appSecret = $this->app_secret; $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appId&secret=$appSecret"; $res = json_decode($this -> httpGet($url)); $access_token = $res -> access_token; AWS_APP::cache()->set("access_token",$access_token,time()+3600); }else{ error_log("get access_token from cache "); } error_log("access_token is :".$access_token); return $access_token; }
調(diào)用微信素材接口方法
說明:該方法為調(diào)用微信獲取永久素材列表接口方法
/** * 獲取永久素材列表 * @param $token * @param $type 類型有image,vedio和audio * @param $offset 起始位置,0表示從第一個 * @param $count 個數(shù),區(qū)間為0~20 */ public function getForeverList($token,$type,$offset,$count){ $data = array( "type" => $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方法
說明:該方法為此接口的入口方法
調(diào)用方式:http://${domain}/weixin/upload_article/
/** * 同步問答的文章到訂閱號上接口 */ public function index_action(){ $article_list = $this->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"]){ $attaches = $this->model("publish")->get_attach("article", $article["id"], "max"); foreach ($attaches as $i => $a){ //過濾獲取第一張圖片 if($a["is_image"]){ $attache = $a; break; } } $img = $attache["path"]; $size = filesize($img); echo $img.",size is :".$size; echo "
"; $file_info = array( "filename" => $img, "content-type" => "image/jpg", //文件類型 "filelength" => $size ); $upload_img_result = $this->upload_meterial($file_info,$access_token); $media_id = $upload_img_result; error_log("media_id is ===============>".$media_id); }else{ $media_id = "1PoTp0SqruwWu_HX0HR_jUp4STX5HSpYkibb1Ca8ZQA"; } $articles =array(); //上傳圖片成功了就開始上傳圖文 $upload_article_data = array( "title" => $article["title"], "thumb_media_id" => $media_id, "author" => "茄子營養(yǎng)師", "digest" => "茄子生活,你的品質(zhì)生活指南", "show_cover_pic" => 1, "content" => $article["message"], "content_source_url" => $base_url.$article["id"] ); $articles[] = $upload_article_data; $data = array( "articles" => $articles ); $result= $this->uploadForeverArticles($access_token,$data); echo self::json_encode($result); error_log("upload_article result is : ".json_encode($result)); error_log("============================upload end============================"); } }
uploadForeverArticles方法
說明:該方法為調(diào)用微信上傳永久素材接口方法
/** * 上傳永久圖文素材(認(rèn)證后的訂閱號可用) * 新增的永久素材也可以在公眾平臺官網(wǎng)素材管理模塊中看到 * @param array $data 消息結(jié)構(gòu){"articles":[{...}]} * @return boolean|array */ public function uploadForeverArticles($access_token,$data){ error_log("post data is=======> ".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方法
說明:該方法為調(diào)用微信上傳永久素材接口方法
/** * 請注意該方法必須保證php的版本在5.6以下,否則會爆40015錯誤 */ function upload_meterial($file_info,$access_token){ $url="https://api.weixin.qq.com/cgi-bin/material/add_material?access_token={$access_token}&type=image"; $ch1 = curl_init (); $timeout = 5; $real_path="{$file_info["filename"]}"; //$real_path=str_replace("/", "", $real_path); $data= array("media"=>"@{$real_path}","form-data"=>$file_info); curl_setopt ( $ch1, CURLOPT_URL, $url ); curl_setopt ( $ch1, CURLOPT_POST, 1 ); curl_setopt ( $ch1, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt ( $ch1, 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方法
說明:該方法為調(diào)http post請求方法
/** * POST 請求 * @param string $url * @param array $param * @param boolean $post_file 是否文件上傳 * @return string content */ private function http_post($url,$param,$post_file=false){ $oCurl = curl_init(); if(stripos($url,"https://")!==FALSE){ curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1 } if (is_string($param) || $post_file) { $strPOST = $param; } else { $aPOST = array(); foreach($param as $key=>$val){ $aPOST[] = $key."=".urlencode($val); } $strPOST = join("&", $aPOST); } curl_setopt($oCurl, CURLOPT_URL, $url); curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt($oCurl, CURLOPT_POST,true); curl_setopt($oCurl, CURLOPT_POSTFIELDS,$strPOST); $sContent = curl_exec($oCurl); $aStatus = curl_getinfo($oCurl); curl_close($oCurl); if(intval($aStatus["http_code"])==200){ return $sContent; }else{ return false; } }遇到的問題
在開發(fā)的過程中,在調(diào)用微信上傳媒體文件時候始終得到的返回數(shù)據(jù)為
{"errcode":41005,"errmsg":"media data missing hint: [3fSt_0048e297]"}
原因:php版本的問題,我本機(jī)的版本5.6,而帶有@識別的php方法必須是5.5以下才能識別,5.5以上的版本將這個特性去除了,上傳方法如下圖
解決方法:更換php的版本到5.5或者5.5以下,不更換php的版本的方法暫時沒有找到
blob.png
?
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/21626.html
摘要:關(guān)于上傳圖文消息素材和新增永久圖文素材的區(qū)別上傳圖文消息素材等于是直接把圖文素材傳到微信的服務(wù)器,每次憑借獲取素材,并且不占用素材庫新增永久圖文素材在開發(fā)者和微信服務(wù)器之間,多了一個素材庫。 **說明1.文章和有道筆記幾乎內(nèi)容相同,所以如果有人在有道上有幸看到一樣的文章,應(yīng)該也是我寫的,除非是全部復(fù)制2.內(nèi)容會較長,故會拆分多篇文章講解3.目前基本的群發(fā)已記錄完結(jié),如果后續(xù)有補(bǔ)充,會作...
摘要:方案二通過微信公眾號平臺提供的接口定時獲取數(shù)據(jù),然后插入到小程序數(shù)據(jù)庫中。和可在微信公眾平臺開發(fā)基本配置頁中獲得需要已經(jīng)成為開發(fā)者,且?guī)ぬ枦]有異常狀態(tài)。 0、介紹 本文源碼:https://github.com/Jameswain/... ? showImg(https://segmentfault.com/img/remote/1460000015441409?w=660&h...
摘要:在微信端打開手機(jī)攝像頭拍照,將拍照圖片保存到服務(wù)器上需要使用到微信的接口,主要使用到了拍照或從手機(jī)相冊中選圖接口上傳圖片接口參考資料一引入微信二通過接口注入權(quán)限驗證配置三微信端拍照接口默認(rèn)可以指定是原圖還是壓縮圖,默認(rèn)二者都有可以指 在微信端打開手機(jī)攝像頭拍照,將拍照圖片保存到服務(wù)器上需要使用到微信的JSSDK接口,主要使用到了拍照或從手機(jī)相冊中選圖接口(chooseImage),上傳...
wordpress主題 modown 6.2+Erphpdown 11.7虛擬素材資源付費下載源碼名稱:WordPress主題 modown 6.2+Erphpdown 11.7虛擬素材資源付費下載兼容版本:全部版本適配編碼:GBK BIG5 UTF8SC UTF8TC演示地址:http://demo.mobantu.com/modown/(官方演示站,以截圖為準(zhǔn))安裝環(huán)境:安裝要求:PHP 5....
閱讀 2181·2021-11-19 09:55
閱讀 2637·2021-11-11 16:55
閱讀 3175·2021-09-28 09:36
閱讀 1945·2021-09-22 16:05
閱讀 3271·2019-08-30 15:53
閱讀 1806·2019-08-30 15:44
閱讀 2899·2019-08-29 13:10
閱讀 1339·2019-08-29 12:30