最近小編在開發一個PC端站點以和公司公眾號做對接,網站中有一個功能就是用戶掃描站點上的二維碼會在公眾號上收到一條推送消息。具體實現流程如下:
微信會以事件的形式將用戶操作相關數據以xml格式推送到站點,站點經過處理之后的數據也以xml的格式返回到微信服務器,微信服務器將解析后的數據推送到公眾號上。
在開發過程中,小編遇到一個問題就是用戶掃描二維碼后收到一條錯誤信息:“該公眾號暫時無法提供服務,請稍后再試”。微信官方文檔上解釋如下:
小編在測試時一掃描二維碼立即會收到微信推送的錯誤消息,所以第一條可以排除。接下來小編很認真的檢查了自己返回給微信服務器的數據格式,是xml無疑,那么問題出在哪里呢?
且看微信官方文檔,微信推送事件文檔:
開發者被動回復消息文檔:
注意,這里小編將開發者微信號幾個字圈紅,因為問題就出在這里。
我們將經過處理后的數據返回到微信服務器時必須保證ToUserName及FromUserName和微信推送過來的FromUserName及ToUserName具有相同的值(注意順序)。
在開發者被動回復消息的文檔中說FromUserName是開發者微信號,所以小編就把自己的開發者微信號寫入。但微信服務器發送過來的數據中ToUserName的值卻是經過加密處理的。這就導致微信發送過來的ToUserName和小編返回給微信的FromUserName二者的值不同,所以微信服務器就返回給用戶一條錯誤消息:“該公眾號暫時無法提供服務,請稍后再試”。
小編將返回數據中的FromUserName的值改為微信發送過來的ToUserName的值之后,問題得到解決。