接入服务器的时候需要做token验证;验证这确实是你的服务器;
官方文档说的是,微信会发送一条请求到你的服务器,然后需要你去处理,原样返回指定字符串;参数如下
signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp 时间戳
nonce 随机数
echostr 随机字符串
三个字符串加密后与signature对比是否一样,如果一样,返回echostr !!!
然后微信这边还给了个示例,然后我想都没想,直接c+v =_=!
;“为什么会验证失败”。。。。。。
回头看,才发现一行小字,要原样返回echostr
下面直接上代码
define(TOKEN,'token');
function checksignature(){
//获取微信加密签名
$signature=$_GET['signature'];
//时间戳
$timestamp=$_GET['timestamp'];
//随机数
$nonce=$_GET['nonce'];
//将token timestamp nonce 存储在数组里
$dataArray=array($nonce,$timestamp,TOKEN);
//排序 SORT_STRING(加快元素排序)
sort($dataArray,SORT_STRING);
//拼接字符串
$str=implode($dataArray);
//加密字符串
$str=sha1($str);
//对比加密的字符串和$signature
if($str==$signature){
return true;//请求的确来自于微信服务器
}else{
return false;//请求不是来自于微信服务器
}
}
if(checksignature()){
//获取随机字符串
$echostr=$_GET['echostr'];
if($echostr){
//原样返回 $echostr 网址接入生效 成为开发者
echo $echostr;
exit;
}
}