爲了讓這張圖片上顯示的所有成功,花了我不少時間呢,其中主要花在了 "返回Api文本消息“那一段及”返回普通 文本消息“,那兩部分
之所以會有這兩部分的驗證,主要是因爲勾選了 如果勾選了公衆號的消息管理權限集,無論是否勾選了小程序的客服消息管理權限集都會做以下檢測。
接下來就是折騰的時間了,說真的文檔寫的真是不清不楚的,網上找的一些也是講得不全面,我這邊盡我所能的寫一回出來,儘可能的仔細,我用的是php 我把這部分的代碼也貼出來。
首先在寫吧,代碼不在我這邊,要儘可能寫得細,讓其他人少走些彎路。
具體審覈通過是這三條,截取文檔上的說詞如下
1、模擬粉絲髮送文本消息給專用測試公衆號,第三方平臺方需根據文本消息的內容進行相應的響應:
1)微信模推送給第三方平臺方:文本消息,其中Content字段的內容固定爲:TESTCOMPONENT_MSG_TYPE_TEXT
2)第三方平臺方立馬迴應文本消息並最終觸達粉絲:Content必須固定爲:TESTCOMPONENT_MSG_TYPE_TEXT_callback
2、模擬粉絲髮送文本消息給專用測試公衆號,第三方平臺方需在5秒內返回空串表明暫時不回覆,然後再立即使用客服消息接口發送消息回覆粉絲
1)微信模推送給第三方平臺方:文本消息,其中Content字段的內容固定爲: QUERY_AUTH_CODE:$query_auth_code$(query_auth_code會在專用測試公衆號自動授權給第三方平臺方時,由微信後臺推送給開發者)
2)第三方平臺方拿到$query_auth_code$的值後,通過接口文檔頁中的“使用授權碼換取公衆號的授權信息”API,將$query_auth_code$的值賦值給API所需的參數authorization_code。然後,調用發送客服消息api回覆文本消息給粉絲,其中文本消息的content字段設爲:$query_auth_code$_from_api(其中$query_auth_code$需要替換成推送過來的query_auth_code)
3、
開發者需按要求回覆(接收到後必須直接返回字符串success)。
第一條的實現過程:
因爲正常的授權碼,在完整的對接過程中是有通過預授權碼生成
文檔上是這樣表述的
步驟4:授權後回調URI,得到授權碼(authorization_code)和過期時間
授權流程完成後,授權頁會自動跳轉進入回調URI,並在URL參數中返回授權碼和過期時間(redirect_url?auth_code=xxx&expires_in=600)
所以根據第一步的操作,要回復消息,就要調用發送“客戶消息 的接口,
如果要回的話要獲取授權碼,但是授權碼,如何獲取,這又是一個問題,這裏需要用到 這個url地址在微信開放平臺進行設置,
也就是微信推送 component_verify_ticket 的地址,假設這個地址爲 abc.com;
就是在測試過程中,微信會往那個地址 abc.com上進行推送 一個 消息,具體內容解碼過程就不多寫了,解碼後的內容有
幾類,當推送 ComponentVerifyTicket 解碼後的內容爲這個
<xml>
<AppId> </AppId>
<CreateTime>1413192605 </CreateTime>
<InfoType> </InfoType>
<ComponentVerifyTicket> </ComponentVerifyTicket>
</xml>
當爲授權時的事件爲這個內容
<xml>
<AppId>第三方平臺appid</AppId>
<CreateTime>1413192760</CreateTime>
<InfoType>authorized</InfoType>
<AuthorizerAppid>公衆號appid</AuthorizerAppid>
<AuthorizationCode>授權碼(code)</AuthorizationCode>
<AuthorizationCodeExpiredTime>過期時間</AuthorizationCodeExpiredTime>
<PreAuthCode>預授權碼</PreAuthCode>
<xml>
具體判斷 時 ,以php爲例
$xml_tree = new \DOMDocument();
$xml_tree->loadXML($encryptMsg);
$infoType = $xml_tree->getElementsByTagName('InfoType')->item(0)->nodeValue;
$AuthorizerAppid = $xml_tree->getElementsByTagName('AuthorizerAppid')->item(0)->nodeValue;
從而獲取 InfoType即可,當爲 $InfoType= authorized 並且爲 授權的公衆號appid爲微信的測試公衆號時,比如在
寫的 wx570bc396a51b8ff8 時,要把 AuthorizationCode 存下來
$AuthorizationCode = $xml_tree->getElementsByTagName('InfoType')->item(0)->nodeValue; 並且要存緩存,因爲這各授權碼在下一步操作中很重要,它並不是與 消息與事件接收URL,比如 ”cba.com“ 處在一個http請求當中,所以沒辦法直接在程序中使用,必須要存下來,在等待微信推送事件往cba.com上用到
好了到這一步我們終於把 授 權碼獲取到了
接着就在驗證全網接入時,微信會
此時獲取接口調用憑證:
獲取圖片中的畫紅線的值,即是調用任證了,此時cba.com 這個消息事件地址推送消息回覆事件,具體格式在解碼後爲如下 的xml格式
判斷出msytype=text 並且 content='TESTCOMPONENT_MSG_TYPE_TEXT'時,如文檔說的回覆消息“TESTCOMPONENT_MSG_TYPE_TEXT_callback”
具體實現爲
此處的touser就是事件接收到時的fromuser.content的值 爲 TESTCOMPONENT_MSG_TYPE_TEXT_callback。
這樣回覆即可,、
第二條
2、模擬粉絲髮送文本消息給專用測試公衆號,
方法與之前的類似,不同的是獲取授權碼的方式,此處的授權碼是通過消息內容直接推送過來的
所以獲取授 權碼以php爲例
list(, $QUERY_AUTH_CODE) = explode(':', $content); 如此即可
接着調用上面的方式如法炮製獲取調用憑證,在調用
客服接口-發消息接口
用上面的方法
只是此處的content就改爲“授權碼_from_api” 如此即可。這時,驗證時即可以全部能過了。
模擬推送component_verify_ticket給開發者, 這條沒什麼可說的,直接在授權事件的地址那邊輸出success即可了