功能
超簡單,就是公眾號啟動“伺服器配置“,就要把訊息轉到自己的伺服器來處理。
症狀
- 配置 url 和 token,提交配置,配置正確。
- 因為能配置正確,所以每次提交配置的時候,都能看到 nginx 的 access_log
- 但是發訊息就會出現"Official account services unavalible, Try again later",說明訊息沒有正常返回 200
- 傳送訊息的時候,nginx 沒有 access_log,什麼鬼??
- 我以為是伺服器配置開啟的有問題,不斷在開啟和停用“伺服器配置”之間切換,結果,微信被我玩壞了,症狀就是即使已經停用了“伺服器配置”,仍然沒有切回去,不能實時切換,而且一直報錯:
到後來,根本就是無法開啟或停用了,那一刻,我好想死一死。
糾結點
- 為什麼配置可以正確提交,而且 access_log 有日誌,但是正常發訊息就有問題,而且沒有 access_log,為什麼?為什麼?為什麼?
原因
我給你看 nginx 配置你就知道了
server {
listen 80;
server_name host.com;
return 301 https://$host$request_uri;
}
你肯定已經猜到了,我把配置填錯了,本來應該是 https://host.com/wechat ,我填寫成了 http://host.com/wechat
因為做了 301 的 redirect,所以提交配置這個 GET 請求自然就可以成功,而且有 access_log,但是微信訊息是 POST 請求,自然就出錯了。
學到的功課
- 不要鑽牛角尖,遇到一個問題,嘗試把所有可能性理一理,休息一會,上個廁所。
- 如果微信公眾號出現了"Official account services unavalible, Try again later"的問題,正確的 debug 流程是:
先看 nginx 日誌是否請求過來,然後再看後端 cgi 這邊的報錯,不要武斷。
- 如果沒有日誌,就要檢查配置的問題,比如,是不是 https 寫成了 http 之類的傻問題。
- 如果有日誌,那就好好檢查,如果 cgi 這邊沒有報錯,比如 Laravel 的 csrf 的問題,最好自己模擬微信 POST 一個請求過去,一目瞭然。
- 微信真的可能被你玩壞,所以出問題了的時候,不要頻繁開啟或停用伺服器配置。
沒有傷痛,就沒有成長,我立志要成為微信開公眾號開發專家。含著淚也要把這些問題做好記錄,爭取給別人一點啟發。
本作品採用《CC 協議》,轉載必須註明作者和本文連結