其他分享
首页 > 其他分享> > 微信公众号交互代码的一个问题

微信公众号交互代码的一个问题

作者:互联网

微信公众号交互代码的一个问题

往微信公众号发送关键词后可以调用自定义的接口进行处理,

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 ] )

参数说明:


sort() 函数调用结束后, arr 数组元素会按照从低到高的顺序重新排列。

返回值:排序成功返回 TRUE,失败返回 FALSE。

可能和sort的对象的数据类型或者编码格式有关,最终通过指定排序的模式为Sort_STRING解决了问题。建议官方代码里也指明排序类型。

	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;
		}
	}

标签:sort,SORT,nonce,微信,代码,signature,tmpStr,排序,交互
来源: https://blog.csdn.net/3m2u/article/details/121952264