我正在尝试为微信实现php身份验证算法,代码是从他们的文档复制而来的:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319&token=&lang=zh_CN
基本上,一个服务发送少量参数和散列密码,并将生成的结果与服务器上的令牌进行比较。
我试图进行身份验证,但每次都失败。我查找了请求,提取了参数并尝试回溯跟踪代码。
$signature = '000a2ad000ce0000a8325206deba18d04b602085';
$timestamp = '1477497908';
$nonce = '876122376';
$token = 'spotops';
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
echo '1: '.$tmpStr . "\r\n";
echo '2: ' . $signature ;
令人惊讶 - 我得到了这个结果:
1:503a2ad085ce4386 a8325206deba18d04b602085
2:000a2ad000ce0000 a8325206deba18d04b602085
正如您所看到的,只有字符串的后半部分是相同的,而前16个字符是不同的。
正如您可能猜到的那样,这非常令人沮丧,因为身份验证功能始终会失败。
我确实在不同的服务器上测试了相同的代码(PHP 5.6.24,第一个运行5.6.13,据我记得)并且我在那里得到了正确的响应。
所以看起来我错过了一些东西,因为字符串的另一部分是相同的,我只能假设这是Sha1函数的东西 - 但我不确定是什么。
任何帮助或想法,最好不要求在服务器上升级PHP版本,我们将不胜感激。