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: 谢谢,已解决,是我的错!
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
微信开发token验证失败的解决
之前在服务器上成功部署并验证已通过,后开换了一个服务器地址就始终不能通过token验证,尝试了网上的很多办法,包括在 echo $echoStr;前面加上ob_clean();清空缓存等等。现在终于定位到原因,原来是在类class wechatCallbackapiTest中我写了构造函数,并将一些数据库初始化的代码放在了里面,注释掉这些代码就能获得验证通过。具体原因可能是在数据库初始化的过程中
微信Token验证失败原因及解决方案
微信Token验证失败原因及解决方案
微信开发token验证失败怎么办的解决办法
贴一个微信公众平台的入门指南的php的token示例: 2017年的官方包,demo变了,验证起来比较麻烦了,跟网上的验证视频都不一样,对于新手来说,比较难验证。会出现验证失败。贴出一个老的。保准一次成功! <?php /** * wechat php test * update time: 20141008 */ //define your token define("TOKEN",
微信开发 新浪SAE开发平台 验证Token 一直失败
微信开发遇到问题总结
微信开发 修改url配置后token验证失败
解决方法: 在返回echostr之前加上response.reset()
微信公众平台开发Token验证失败(有时URL超时)--解决方案
最近在做微信公众平台的服务器端,测试什么的都比较顺利,申请一个沙盒测试号就能满足一切正式环境的需求。 然而昨天在配置到正式环境中的时候出了问题了,一直都是验证token失败,第一次偶尔会出现URL超时,查了一整晚,一开始以为是权限的问题无法修改配置(我是运营者),但后来看了下安全中心,我们未开启配置权限限制。后来又列了很多原因,最后想起我们的正式环境曾经配置过一个微信管家jeewx(一个java
微信公众号:搭建新浪SAE服务器,遇到token验证失败的问题
最近在玩微信公众号,参照【玩转微信公众平台之六】 搭建新浪SAE服务器,老是遇到token验证失败的问题。 度娘了下,找到以下方法,亲测可用。把从微信公众平台下载的wx_sample.php,里面代码改为如下,再重新上传到新浪,token就验证通过了,有其他问题欢迎在评论区留下问题:
微信公众平台 开发者基本配置 token验证一直失败的时候
在echo $echoStr;前面添加  header('content-type:text');
微信对接token验证失败的问题
有时候我们发现所有的配置都设置好了,网上也查了不少的资料,还是不行 请您检查这几项: 1. 在您的URL(服务器地址)页面里,直接Get获取echostr参数打印到页面上。 在火狐浏览器里Firebug里面看到echostr前面多了几个乱码。 把您开发者设置的URL页面,用NotPad++打开,转为UTF-8无BOM编码格式。 前面的乱码应该是在文件有BO
关于微信服务器ngrok 配置失败解决方案
在本地用ngrok 内网穿透代理本地端口后,因为代理地址的ip 在国外的原因导致配置失败。 解决方案: 用nginx 代理一次,再用ngrok 代理nginx 成功解决