在使用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;
- }