微信公众号交互代码的一个问题
往微信公众号发送关键词后可以调用自定义的接口进行处理,
wx微信设计了一套交互的协议,其中有一部分是传递的参数需要signature校验。wx微信本身提供了checkSignature函数。以前用过正常,但不知从什么时候起这部分代码总是返回false。
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce =$_GET["nonce"];
$token =TOKEN;
$tmpArr = array($token, $timestamp,$nonce);
sort($tmpArr);
$tmpStr = implode( $tmpArr);
$tmpStr = sha1( $tmpStr);
if($tmpStr == $signature){
return true;
}else{
return false;
}
}
解决的方法有2个
1.简单粗暴,直接返回true,不进行校验,快速解决问题
2.找出原因解决它。
试了一下发现居然是sort这个函数,执行sort的结果和要求的不一致。
PHP sort() 函数用来对数组元素进行升序排序,也就是从低到高排序,语法如下:
bool sort ( array &$arr [, int $sort_mode = SORT_REGULAR ] )
参数说明:
- arr 是要排序的数组。
- sort_mode 表示排序模式,是一个可选参数。sort_mode 可以使用如下的值: <