在使用TP5做微信開發時大家一定遇到過配置失敗或者token驗證失敗的情況,而且使用日志打印參數進行簽名算法驗證都是真確的。
這個問題讓我苦惱了好久。最終發現,在我們驗證簽名是輸出了隨機字符串 echo $echoStr;時如果沒有關閉trace就會出現如下的輸出

這個就是罪魁禍首,萬一你不小心沒有改配置那就會輸出trace分析頁面的html,而不僅僅是echoStr,所以微信服務器接收到消息后會報錯,而且是抓狂的一直報錯。
解決辦法:
關閉 trace

另外附上tp5驗證url有效性的代碼。
- $data = Request::instance()->get();
- $signature = $data['signature'];
- $timestamp = $data['timestamp'];
- $nonce = $data['nonce'];
- $echostr = $data['echostr'];
- /**
- * 計算微信簽名
- */
- $token = Config::get('wechat_config.token');
- //將參數組成一維數組
- $signeSeed = [$token, $timestamp, $nonce];
- //對參數字典序排序
- sort($signeSeed, SORT_STRING);
- //拼接成字符串
- $signeStr = implode($signeSeed);
- //加密字符串成簽名
- $signeHash = sha1($signeStr);
- if ($signeHash == $signature) {
- echo $echostr;
- }else{
- return false;
- }
