验证原理:
1.将token、timestamp、nonce三个参数进行字典序排序。
signature:微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
其中:
timestamp:时间戳
nonce:随机数
echostr:随机字符串1.将token、timestamp、nonce三个参数进行字典序排序。
2.将三个参数拼接成一个字符串,并使用sha1加密。
3.开发者将加密后的字符串与signature对比;若相同,则这次请求来源于微信,是可信的。
<span style="font-family:KaiTi_GB2312;font-size:14px;"><?php
define("TOKEN","weixin");
$weixinObj = new Wechat();
$weixinObj->valid();
class Wechat{
public function valid(){
$echoStr = $_GET['echostr'];
if($this->checkSignature()){
echo $echoStr;
exit;
}
}
//校验方法
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;
}
}
}</span>