Aind_0
黑线哥哥
2016-03-21 12:25
采纳率: 83.3%
浏览 3.1k
已采纳

【微信开发】为什么TOKEN一直验证失败呢?

我是用的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;
    }

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • yi_an
    yi_an 2016-03-23 08:14
    已采纳

    可能是微信的服务器没有能够及时响应,你可以在浏览器的开发者模式中查看,网络的数据传输时间,可以找出原因。换台机器,或者过段时间再重新验证。(在你什么都没错的前提下)

    点赞 评论

相关推荐