2 aind 0 Aind_0 于 2016.03.21 20:25 提问

【微信开发】为什么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 16:14
已采纳

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

Aind_0
Aind_0 回复yi_an: 谢谢,已解决,是我的错!
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!