該公眾號暫時無法提供服務請稍后再試


關鍵字:該公眾號暫時無法提供服務,請稍后再試 微信公眾平台 

原文:http://www.cnblogs.com/txw1958/p/weixin-suspend-service-solution.html 

 

在用戶向公眾號發消息,或點擊自定義菜單時,開發者一般會根據業務需要,利用被動響應消息接口,向用戶回復響應消息。

如果開發者認為用戶消息無須回復,或開發者准備隨后再通過客服消息接口來對用戶進行回復,請按照開發者文檔的要求,直接回復空串,微信服務器收到空串則不會進行處理。

一旦遇到以下情況,微信都會在公眾號會話中,向用戶下發系統提示“該公眾號暫時無法提供服務,請稍后再試”:

1. 開發者在5秒內未回復任何內容

2. 開發者回復了異常數據

詳細流程請見開發者文檔:發送被動響應消息接口。以上改動將於兩周后(2014年10月30日)生效,請開發者注意。

具體提示如下圖所示:

 

原因分析:

最主要的還是開發人員寫代碼不夠嚴謹,沒有嚴格遵守開發文檔的標准XML格式回復。

 

解決方案:

1. 使用高性能的服務器及空間,海外普通虛擬空間延遲大,建議使用雲主機或國內知名服務商的空間

2. 開發模式下保證所有內容都有回復,不能匹配到的回復直接回復空字符串,而不是參數Content為空的xml消息,以便讓微信服務器知道程序有響應

例如下面的這個回復就是導致上述錯誤的原因之一 

<xml>
    <ToUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></ToUserName>
    <FromUserName><![CDATA[gh_680bdefc8c5d]]></FromUserName>
    <CreateTime>1359036631</CreateTime>
    <MsgType><![CDATA[text]]></MsgType>
    <Content><![CDATA[]]></Content>
</xml>

 如果使用的是方倍工作室的微信開發接口DEMO,那么需要在回復文本消息時都不回復空內容,或者加入空值判斷以進行二次保護,如下面代碼中第4~6行所示 

 1     //回復文本消息
 2     private function transmitText($object, $content)
 3     {
 4         if (!isset($content) || empty($content)){
 5             return "";
 6         }
 7 
 8         $xmlTpl = "<xml>
 9     <ToUserName><![CDATA[%s]]></ToUserName>
10     <FromUserName><![CDATA[%s]]></FromUserName>
11     <CreateTime>%s</CreateTime>
12     <MsgType><![CDATA[text]]></MsgType>
13     <Content><![CDATA[%s]]></Content>
14 </xml>";
15         $result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time(), $content);
16 
17         return $result;
18     }

3. 檢查xml格式,不要擅自加其他內容,網上一些代碼喜歡自行添加其他內容,比如xml version等,最好去掉這些不符合微信消息格式的內容。

4. 檢查代碼中是否有echo、var_dump、以及一些告警信息打印,這些信息也會被返回給微信服務器而擾亂XML,從而導致上述問題。

5. 使用方倍工作室的微信調試器,做同樣的關鍵字發送,查看返回的數據是否有異常或超時。微信調試器地址 http://debug.fangbei.org/

6. 參考《微信公眾平台開發最佳實踐》一書消息構造格式,或使用該書提供的SDK點此購買

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM