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