申请了微信公众号,本来想自己开发玩玩,没想到在第一步配置token就遇到麻烦,总是验证token失败。经过无数的尝试和网上查找资料,终于验证成功了。
1.首先是检查代码是否正确啦
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = 'token';
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
public function valid()
{
$echoStr = $_GET["echostr"];
if($this->checkSignature()){
ob_clean();
echo $echoStr;
exit;
}
}
在微信入口脚本调用valid即可;
我的代码就是这样,还是验证失败,这时候检查token值是否相同,排除空格,大小写;
2.检查php文件的编码是不是无bom头,这个很坑的,经常写接口的文件,有时候创建文件会自动带上bom,这时候如果用json接受数据的话,json_decode($json,true),把json字符串转为数组的时候会返回null,具体原理可以百度之。总之我们的代码文件尽量不要bom头。
3.在echo $echoStr前面加上 ob_clean(), 我的问题就是出现在这里啦。ob_clean就是清空缓存区的内容,发生这种清空一般是我们前面的代码有输出的内容。