我是用的SAE新浪云来搞的,也进行了实名认证,接受数据的URL也没输错,但是就是token验证不通过,眼睛都看花了,麻烦能人帮忙找找错~谢谢!
<?php
header('content-type:text/html;charset=utf-8');
//定义常量TOKEN,用来存储token
define("TOKEN","weixin");
//封装验证逻辑
function checkSignature(){
//获取微信服务器发送的GET请求,得到四个参数
$signature = $_GET['signature'];
$timestamp = $_GET['timestamp'];
$nonce = $_GET['nonce'];
//定义数组,存储三个参数
$tmpArr = array(TOKEN,$nonce,$timestamp);
//对数组进行排序
sort($tmpArr,SORT_STRING);
//转换为字符串
$tempStr = implode($tmpArr);
//进行sha1加密
$tempStr = sha1($tempStr);
if($tempStr == $signature){
return true;
}else{
return false;
}
}
//判断是否验证成功
if(checkSignature()){
if($echostr){
$echostr = $_GET['echostr'];
echo $echostr;
exit();
}
}
//获取微信服务器发送的POST数据
$postData = $HTTP_RAW_POST_DATA;
if(!$postData){
echo "error";
exit();
}
//解析获得的数据
$object = simplexml_load_string($postData,"SimpleXMLElement",LIBXML_NOCDATA);
$ToUserName = $object -> ToUserName;
$FromUserName = $object -> FromUserName;
$MsgType = $object -> MsgType;
//根据不同类型的消息做出不同的回复
switch($MsgType){
case "text":
$Content = $object -> Content;
$respXml = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[$s]]></FromUserName>
<CreateTime>&s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$result = sprintf($respXml,$FromUserName,$ToUserName,time(),$Content);
echo $result;
break;
case "image":
$MediaId = $object -> MediaId;
$respXml = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<Image>
<MediaId><![CDATA[%s]]></MediaId>
</Image>
</xml>";
$result = sprintf($respXml,$FromUserName,$ToUserName,time(),$MediaId);
echo $result;
break;
}
可能是微信的服务器没有能够及时响应,你可以在浏览器的开发者模式中查看,网络的数据传输时间,可以找出原因。换台机器,或者过段时间再重新验证。(在你什么都没错的前提下)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。