黑线哥哥 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 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 Arcgis相交分析无法绘制一个或多个图形