關鍵字:該公眾號暫時無法提供服務,請稍后再試 微信公眾平台
原文: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。點此購買