微信公衆號三方平臺開發【全網發佈及全網發佈接入檢測】

經過之前系列內容過後,接下來的代微信公衆號實現業務部分跟微信公衆號開發業務邏輯一樣,所以公衆號其他業務功能部分後面我會單獨整理一套相關內容,今天,咱們就來說說微信第三方平臺開發的最後一步—— 全網發佈,因爲只有進行全網發佈後,我們的第三方平臺纔可以接收所有的微信公衆號的授權,否則就只能接收測試公衆號的授權。

在正式進行全網發佈之前,必須先通過全網發佈接入檢測,意思就是此時微信服務器會通過自動化測試的方式,來檢測我們開發的第三方平臺的基礎邏輯是否正常可用,只有在確定基礎可用的情況下,纔會允許第三方平臺提交全網發佈。

當然,在前往開放平臺進行全網發佈之前,我們首先要根據測試步驟,用代碼實現相關邏輯,才能順利通過全網發佈,在這一步一般會出現以下三個問題:返回Api文本信息返回普通文本信息發送事件信息

首先,在開發文檔裏,我們可以看到,官方提供了專用測試公衆號信息,其中appid爲 wx570bc396a51b8ff8,Username爲gh_3c884a361561。

1) 發送事件信息

模擬粉絲觸發專用測試公衆號的事件,並推送事件消息到專用測試公衆號,第三方平臺需要提取推送過來的XML信息中event的值,並且第三方平臺需要在5秒內立即返回按照官方要求組裝成文本消息回覆給粉絲,格式爲:event + “from_callback”(假定event爲LOCATION,則文本消息內容爲: LOCATIONfrom_callback)。
這裏,我們需要先判斷事件信息是否屬於專用測試公衆號,然後組裝進行回覆:

if($toUsername== 'gh_3c884a361561'){
$event = $postObj-> Event;
$content =$event.'from_callback';
responseText($postObj,$content);
}

2)返回普通文本信息

模擬粉絲髮送文本消息給專用測試公衆號,第三方平臺需要根據文本消息的內容進行相應的響應,這裏推過來的會是一個固定內容,爲TESTCOMPONENT_MSG_TYPE_TEXT,而我們也是返回一個固定文本內容即可,爲TESTCOMPONENT_MSG_TYPE_TEXT_callback

if(strtolower($postObj -> MsgType) == 'text' &&trim($postObj->Content)=='TESTCOMPONENT_MSG_TYPE_TEXT'){
$toUsername = $postObj-> ToUserName;
if($toUsername =='gh_3c884a361561'){
$content ='TESTCOMPONENT_MSG_TYPE_TEXT_callback';
responseText($postObj,$content);
}
}

3)返回Api文本信息

模擬粉絲髮送文本消息給專用測試公衆號,第三方平臺需要在5秒內返回空串表明暫時不回覆,然後再立即使用客服消息接口發送消息回覆粉絲。
 
第三方平臺接收到的文本信息爲QUERY_AUTH_CODE:queryauthcode,這裏我們只要進行“QUERY_AUTH_CODE”字段判定就可以了,在拿到queryauthcode的值後,需要利用queryauthcode的值來換取公衆號的授權信息(換取授權信息實現方法見微信公衆號三方平臺開發【獲取授權方的授權信息以及基本信息】),然後再調用發送客服消息api來給粉進行文本消息回覆,其中文本消息內容爲:queryauthcode _from_api

if(strpos ( $postObj->Content, 'QUERY_AUTH_CODE' ) !== false){
$query_auth_code =str_replace ( 'QUERY_AUTH_CODE:', '', $postObj->Content);
$wechat =A('Wechat/Wechat');
$info = $wechat->getAuthInfo($query_auth_code);
$access_info=$info['authorization_info'] ['authorizer_access_token'];
$param ['touser'] =$postObj ->FromUserName;
$param ['msgtype'] ='text';
$param ['text']['content'] = $query_auth_code . '_from_api';
$url ='https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token='.$access_info;
$res = post_data ($url, $param );
}

完整消息事件完整代碼:

public function reponseMsg(){
require_once(dirname(FILE).'/wxBizMsgCrypt.php');
//encodingAesKey和token均爲申請三方平臺是所填寫的內容
$encodingAesKey = '公衆號消息加解密Key';
$token = '公衆號消息校驗Token';
$appId = '三方平臺appid';
$timeStamp = empty($_GET ['timestamp'] ) ? "" : trim ( $_GET ['timestamp'] );
$nonce = empty ($_GET['nonce'] ) ? "" : trim ( $_GET ['nonce'] );
$msg_sign = empty($_GET ['msg_signature'] ) ? "" : trim ( $_GET ['msg_signature'] );
$pc = new\WXBizMsgCrypt( $token, $encodingAesKey, $appId );
//獲取到微信推送過來post數據(xml格式)
$postArr=$GLOBALS['HTTP_RAW_POST_DATA'];
$msg = '';
$errCode=$pc->decryptMsg($msg_sign, $timeStamp, $nonce, $postArr,$msg);
if($errCode == 0){
//處理消息類型,並設置回覆類型和內容
$postObj=simplexml_load_string($msg,'SimpleXMLElement',LIBXML_NOCDATA);
//判斷該數據包是否是訂閱(用戶關注)的事件推送
if(strtolower($postObj-> MsgType) == 'event'){
//第三方平臺全網發佈檢測發送事件消息測試
$toUsername= $postObj -> ToUserName;
if($toUsername== 'gh_3c884a361561'){
$event= $postObj -> Event;
$content= $event.'from_callback';
responseText($postObj,$content);
}
//如果是關注subscribe事件
if(strtolower($postObj->Event== 'subscribe')){
$public_name=strval($postObj->ToUserName);
$map['public_name']=$public_name;
$cont=M('Subscribe')->where($map)->find();
//回覆用戶消息
$content=$cont['content'];
responseText($postObj,$content);
}
}
//第三方平臺全網發佈檢測普通文本消息測試
if(strtolower($postObj-> MsgType) == 'text' &&trim($postObj->Content)=='TESTCOMPONENT_MSG_TYPE_TEXT'){
$toUsername= $postObj -> ToUserName;
if($toUsername== 'gh_3c884a361561'){
$content= 'TESTCOMPONENT_MSG_TYPE_TEXT_callback';
responseText($postObj,$content);
}
}
//第三方平臺全網發佈檢測返回api文本消息測試
if(strpos ($postObj->Content, 'QUERY_AUTH_CODE' ) !== false){
$query_auth_code= str_replace ( 'QUERY_AUTH_CODE:', '', $postObj->Content);
$wechat= A('Wechat/Wechat');
$info= $wechat ->getAuthInfo($query_auth_code);
$access_info=$info['authorization_info'] ['authorizer_access_token'];
$param['touser'] = $postObj ->FromUserName;
$param['msgtype'] = 'text';
$param['text'] ['content'] = $query_auth_code . '_from_api';
$url='https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token='.$access_info;
$res = post_data ( $url,$param );
}
//用戶發送某一圖文關鍵字的時候,回覆圖文消息
if(strtolower($postObj->MsgType) == 'text' && trim($postObj->Content)=='圖文'){
//這一步可從數據庫中查詢得到
$arr=array(
array(
'title'=>'test1',
'description'=>'test1',
'picUrl'=>'http://mmbiz.qpic.cn/mmbiz/mLiaE7fSUysSbbqzicX2LVsLL1HsXMRV0m6uicfiaSX9Aic43BA5vnpFOBMWAoEuaVDicoOX4HzGT8OT5QK6DRs14VkQ/0',
'url'=>'https://mp.weixin.qq.com/s?__biz=MjM5NzY4MDc0MA==&tempkey=mKI6U0rlJZofvceyQdxTPAYtneMxKyhWy52ytbUZfOJzFEHMDqmYTQLQWrkrSRky&appmsgid=10000002&itemidx=1&sign=99baf31f45e2357af575c63b5b303b6a#wechat_redirect',
),
array(
'title'=>'test2',
'description'=>'test2',
'picUrl'=>'http://mmbiz.qpic.cn/mmbiz_jpg/mLiaE7fSUysTFDEZQTOvXleYwYqFN1JeLwM66Zg7dHjK3aHQxdVtwGTJgzuKJRuZCBHljIvVLkvZ2CADJ6paJYQ/0?wx_fmt=jpeg',
'url'=>'https://mp.weixin.qq.com/s?__biz=MjM5NzY4MDc0MA==&tempkey=mKI6U0rlJZofvceyQdxTPDXw5wcPw4rpHzkwOv4U7kDY1V%2BUUirAB0C9oEEsX5HQB8Uv1Ut2zj3buNkRPh6KNYWVyTaxebMkb8IcD9FjNbpcqY0mdRbCxRnbIjtmNBd37cKXm3Egbo1KWdkSEy5NZg%3D%3D&chksm=315123030626aa15c3e454afbd931ec3458149b13370999b16bc72b876326977e7d68b406a8c#rd',
)
);
responseNews($postObj,$arr);
}else{
//當微信用戶發送關鍵字,公衆號回覆對應內容
$public_name=strval($postObj->ToUserName);
$keyword=strval(trim($postObj -> Content));
$log['public_name']=$public_name;
$log['keyword']=array('like','%'.$keyword.'%');
$con=M('Keyword')->where($log)->select();
foreach($conas $vo => $k){
$conn=$con[$vo]['content'];
}
if($conn){
$content=$conn;
}else{
$lg['public_name']=$public_name;
$lg['keyword']='';
$con=M('Keyword')->where($lg)->select();
foreach($conas $vo => $k){
$conn=$con[$vo]['content'];
}
$content=$conn;
}
responseText($postObj,$content);
}
}
}

完成後,再前往開放平臺,點擊全網發佈,等待一分鐘左右,看到所有狀態都爲成功,則代表全網發佈接入檢測通過了,點擊【確定】,就愉快的發佈咯。

全網發佈接入檢測成功

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章