閱讀390 返回首頁    go 群英


微信公眾號三方平台開發全網發布及全網發布接入檢測

於千萬人之中遇見了你

願與你留下恒久的記憶

關注袁威,見證奇跡

今天開始之前,糾正下上期粗心犯的一個錯,在完整代碼部分把if(strtolower($postObj -> MsgType) == event )寫了兩次,由於推送的內容修改無法生效, 大夥自行刪除多餘的判斷句即可,也可以看今天最後麵的完整代碼。

好了,進入今天的內容,經過之前係列內容過後,接下來的代微信公眾號實現業務部分跟微信公眾號開發業務邏輯一樣,所以公眾號其他業務功能部分後麵我會單獨整理一套相關內容,今天,咱們就來說說微信第三方平台開發的最後一步——全網發布,因為隻有進行全網發布後,我們的第三方平台才可以接收所有的微信公眾號的授權,否則就隻能接收測試公眾號的授權。

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

當然,在前往開放平台進行全網發布之前,我們首先要根據測試步驟,用代碼實現相關邏輯,才能順利通過全網發布,在這一步一般會出現以下三個問題:返回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:$query_auth_code$,這裏我們隻要進行“QUERY_AUTH_CODE”字段判定就可以了,在拿到$query_auth_code$的值後,需要利用$query_auth_code$的值來換取公眾號的授權信息(換取授權信息實現方法見微信公眾號三方平台開發【獲取授權方的授權信息以及基本信息】),然後再調用發送客服消息api來給粉進行文本消息回複,其中文本消息內容為:$query_auth_code$_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 ;

$res = post_data ($url, $param );

}

完整消息事件完整代碼:

public function reponseMsg(){

require_once(dirname(__FILE__). /wxBizMsgCrypt.php );

//encodingAesKey和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 );

$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 ;

$res = post_data ( $url,$param );

}

if(strtolower($postObj->MsgType) == text && trim($postObj->Content)== 圖文 ){

//這一步可從數據庫中查詢得到

$arr=array(

array(

title => test1 ,

description => test1 ,

picUrl => https://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 => https://mmbiz.qpic.cn/mmbiz_jpg/mLiaE7fSUysTFDEZQTOvXleYwYqFN1JeLwM66Zg7dHjK3aHQxdVtwGTJgzuKJRuZCBHljIvVLkvZ2CADJ6paJYQ/0?wx_fmt=jpeg ,

)

);

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);

}

}

}

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

點擊播放 GIF/150K

如果正合你意,如果你也喜歡,點讚or分享隻在一瞬間~

最後更新:2017-10-08 01:52:15

  上一篇:go 微信公眾號三方平台開發代微信公眾號接收消息事件並響應
  下一篇:go 微信小程序之HTML富文本解析