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