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

【微信开发】为什么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 2016-03-23 08:14
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)