微信公众平台修改服务器配置时token验证失败

时间:2022-04-02 04:49:15
公司去年申请的公众号,刚开始配置成功了
后来要给客户部署,对方提供了开发者的参数,可进行配置的时候提示token验证失败。
回来用我们自己的账号登陆,修改服务器配置,直接点确定也提示token验证失败……
于是我觉得问题还是出在我们代码这边
但调试的时候发现代码已经可以原样返回echoStr参数的值(Response.Write),消息加解密使用明文模式,但就是提示token验证失败,有遇到过类似问题的朋友么

43 个解决方案

#1


微信公众平台修改服务器配置时token验证失败
没个人指点一下么

#2


服务端返回验证失败
要么是服务端挂了,这个不太可能
所以还是你们清掉调用的参数有问题

#3


引用 2 楼 FoxDave 的回复:
服务端返回验证失败
要么是服务端挂了,这个不太可能
所以还是你们清掉调用的参数有问题

验证使用的参数是微信那边自动补全的,按照开发文档的说明,只要最后通过验证参数判断为true,并且将echoStr这个参数原样返回给微信就可以通过,现在不管是调试还是写log都能看到原样返回的echoStr,但依然提示token验证失败

#4


引用 3 楼 yqyqyqyq0215 的回复:
Quote: 引用 2 楼 FoxDave 的回复:

服务端返回验证失败
要么是服务端挂了,这个不太可能
所以还是你们清掉调用的参数有问题

验证使用的参数是微信那边自动补全的,按照开发文档的说明,只要最后通过验证参数判断为true,并且将echoStr这个参数原样返回给微信就可以通过,现在不管是调试还是写log都能看到原样返回的echoStr,但依然提示token验证失败

联系微信开发平台客服看看

#5


如果参数都正确的话,一般是超时了,可能你代码执行比较久,或者你网络有问题

#6


引用 5 楼 myhope88 的回复:
如果参数都正确的话,一般是超时了,可能你代码执行比较久,或者你网络有问题

并不是超时,已经解决了,谢谢

#7


引用 4 楼 FoxDave 的回复:
Quote: 引用 3 楼 yqyqyqyq0215 的回复:

Quote: 引用 2 楼 FoxDave 的回复:

服务端返回验证失败
要么是服务端挂了,这个不太可能
所以还是你们清掉调用的参数有问题

验证使用的参数是微信那边自动补全的,按照开发文档的说明,只要最后通过验证参数判断为true,并且将echoStr这个参数原样返回给微信就可以通过,现在不管是调试还是写log都能看到原样返回的echoStr,但依然提示token验证失败

联系微信开发平台客服看看

谢谢,已经解决了

#8


我也遇到了,以前用的新浪云,现在改了别的云服务,所以URL和token值都换了,但是在公众平台点击提交时总是报错验证失败。楼主怎么解决的?

#9


请问您的这个问题是怎么解决的呢?求指教

#10


最后终于找到解决方法了,楼主结贴了但是没有留下解决方法,我现在给出我的问题和解决方法,希望对大家有用:
我也遇到这个问题,我的情况是这样的,用的框架,echo $echoStr也是对的,但是就是提升token验证失败,没有bom头,编码也是正确的,响应时间也是对的,最后在echo $echoStr前面加一句ob_clean();就好了,回答出来希望对大家有用。 

#11


我也遇到了这个问题,刚开始测试成功了,换了一个服务器,token验证失败 
楼主把解决方案贴出来看看,万分感谢

#12


新浪云服务器要求要实名认证才能正常使用微信开发的,我也是查了好久才知道的,希望能帮到大家!!!!

#13


我也遇到上述问题,如果是修改了服务器配置,在验证那段代码里面把 Response Clear() 下就可以了

#14


上面说的对,清除掉输出缓存区就OK了【保证代码以及配置没有错误的情况下】,使用ob_clean();

#15


请问楼主是如何解决问题的

#16


我也遇到这个问题了,求大神指教一下,该怎么弄,

#17


10楼是正解,在echo之前加上ob_clean()就可以了

#18


引用 10 楼 leos_393068657 的回复:
最后终于找到解决方法了,楼主结贴了但是没有留下解决方法,我现在给出我的问题和解决方法,希望对大家有用:
我也遇到这个问题,我的情况是这样的,用的框架,echo $echoStr也是对的,但是就是提升token验证失败,没有bom头,编码也是正确的,响应时间也是对的,最后在echo $echoStr前面加一句ob_clean();就好了,回答出来希望对大家有用。 

就是说你返回的数据多了一些多除的信息了,用ob_clean()把多除信息清掉了,学习了

#19


楼主不懂得分享,只会索取!鉴定完毕!

#20


引用 10 楼 leos_393068657 的回复:
最后终于找到解决方法了,楼主结贴了但是没有留下解决方法,我现在给出我的问题和解决方法,希望对大家有用:
我也遇到这个问题,我的情况是这样的,用的框架,echo $echoStr也是对的,但是就是提升token验证失败,没有bom头,编码也是正确的,响应时间也是对的,最后在echo $echoStr前面加一句ob_clean();就好了,回答出来希望对大家有用。 


感谢已解决;并关注。

#21


引用 10 楼 leos_393068657 的回复:
最后终于找到解决方法了,楼主结贴了但是没有留下解决方法,我现在给出我的问题和解决方法,希望对大家有用:
我也遇到这个问题,我的情况是这样的,用的框架,echo $echoStr也是对的,但是就是提升token验证失败,没有bom头,编码也是正确的,响应时间也是对的,最后在echo $echoStr前面加一句ob_clean();就好了,回答出来希望对大家有用。 


谢谢,正解!!

#22


谢谢,同样的问题,正解

#23


还是csdn牛逼,找了好久终于找到方法了

#24


强烈BS楼主

#25


遇到了同样的问题,找了半天也没有找到解决办法,好不容易找到了这篇博客,以为看到了希望,可是按照此方法尝试后,为啥还是不行呢,还是提示token配置失败,可是新浪SAE上日志已经显示成功输出了echostr,快疯了@哪位大神能帮忙解决一下呢???求助。。。

#26


引用 10 楼 leos_393068657 的回复:
最后终于找到解决方法了,楼主结贴了但是没有留下解决方法,我现在给出我的问题和解决方法,希望对大家有用:
我也遇到这个问题,我的情况是这样的,用的框架,echo $echoStr也是对的,但是就是提升token验证失败,没有bom头,编码也是正确的,响应时间也是对的,最后在echo $echoStr前面加一句ob_clean();就好了,回答出来希望对大家有用。 

感谢10楼,我的也是这种情况,在echo前加了ob_clean();就好了

#27


我的加了 ob_clean();  为什么还在不行呢?? 微信公众平台修改服务器配置时token验证失败

#28


引用 26 楼 smkka123 的回复:
Quote: 引用 10 楼 leos_393068657 的回复:

最后终于找到解决方法了,楼主结贴了但是没有留下解决方法,我现在给出我的问题和解决方法,希望对大家有用:
我也遇到这个问题,我的情况是这样的,用的框架,echo $echoStr也是对的,但是就是提升token验证失败,没有bom头,编码也是正确的,响应时间也是对的,最后在echo $echoStr前面加一句ob_clean();就好了,回答出来希望对大家有用。 

感谢10楼,我的也是这种情况,在echo前加了ob_clean();就好了



为什么我加了没作用,求大神指教

#29


引用 12 楼 hvweihong 的回复:
新浪云服务器要求要实名认证才能正常使用微信开发的,我也是查了好久才知道的,希望能帮到大家!!!!



弄的我默默的去实名了一下!

#30


CSDN果然NB 十楼正解~~

#31


java怎么加那个ob_clean()函数啊?求具体这句代码!!!

#32


java应该有个response.clear()的方法,c#里面有,java差不多也是这个

#33


引用 27 楼 baidu_35917727 的回复:
我的加了 ob_clean();  为什么还在不行呢?? 微信公众平台修改服务器配置时token验证失败


$wechatObj = new wechatCallbackapiTest();
//当接入成功后,请注销这句话,否则,会反复验证。
//$wechatObj->valid();

这个需要打开.......

#34


10楼的方法,在我这边额可以、

#35


引用 33 楼 wy444 的回复:
Quote: 引用 27 楼 baidu_35917727 的回复:

我的加了 ob_clean();  为什么还在不行呢?? 微信公众平台修改服务器配置时token验证失败


$wechatObj = new wechatCallbackapiTest();
//当接入成功后,请注销这句话,否则,会反复验证。
//$wechatObj->valid();

这个需要打开.......
我说我老是验证失败,这个忘开了,谢谢提醒

#36


引用 32 楼 hzw360121 的回复:
java应该有个response.clear()的方法,c#里面有,java差不多也是这个


//        response.setContentType("text/html;charset=utf-8");
我代码是多了这段,之前是没问题的,现在去掉就可以了

#37


引用
36

找了半天全是PHP的解释,就没有java的解决方法(java难道没人用了?),非常感谢36楼

#38


首先说明,我也遇到这个问题了,但是已经解决了,现在我将我的问题及解决办法说下。
问题说明:
我使用的是测试号,刚开始第一版代码是好用的,但是我换个了域名之后结果接口配置信息修改时总是提示我失败。按照惯例,查文档、重新测试程序、百度、google,都没解决。
最后看到这个帖子,也试了清理缓存什么的,还是不好用,只好使用postman,慢慢尝试。后来发现,echostr返回的内容外面被双引号包围着,如“123123123”。由于我使用的spring,默认情况下contentType是application/json,想到是否可能是contenttype引起的,就把contenttype改成了text/plain,再使用postman测试,返回的echostr内容中无双引号了,部署上去一测是就通过。
解决办法:
说了那么多废话,解决办法最核心的就是严格关注返回的内容,多余的东西都去掉。我给出spring中的代码,供参考
@RequestMapping(value = "/{account}/message",  method = RequestMethod.GET,produces = {"text/plain;charset=UTF-8"})
public @ResponseBody String doGet(HttpServletRequest request,@PathVariable String account,HttpServletResponse response) {
最主要的是produces = {"text/plain;charset=UTF-8"}
吐槽:
为什么tmd第一次配置是好用的,改了域名就不好用了,走了好多弯路

#39


前面的解决方案还是没成功如果是PHP看看头部信息
加上:header("Content-Type:text/plain;charset=utf-8");就可以了

#40


ob_clean() 正解!!!!
另外贴上我写的一个微信对接接口,如果使用ob_clean()还是没用的同学可以尝试用下我写的,万一你哪里写错了呢。
public  function wx_api(){
        //1.将 timestamp,nonce,token 按字典序排序
        $timestamp = $_GET['timestamp'];
        $nonce = $_GET['nonce'];
        $token = 'weixin';
        $signature = $_GET['signature'];
        $echostr = $_GET['echostr'];
        $array = array($timestamp,$nonce,$token);
        sort($array);

        //2.将排序好的三个参数拼接之后按sha1加密
        $tmpstr = implode('',$array);
        $tmpstr = sha1($tmpstr);

        //3.将加密后的字符串与signature进行对比,判断请求是否来自于微信
        if($tmpstr == $signature && $echostr){
            //1.第一次接入微信api接口,
            ob_clean();
            echo $echostr;
            exit;
        }else{
            $this->reponseMsg();//这是没用的,我写的自动回复啊那些事件不需要看
        }
    }

#41


我也来贡献一下把。 微信公众平台修改服务器配置时token验证失败

java
1.用get方式访问自己的接口,比如浏览器访问   http://****.com/****/****.**?echostr =1    
如果浏览器能返回 1 ,则接口没问题了,    
2. 测试的时候可以不验签

#42


感谢39楼谢谢

#43


我的还是不行吖,,试过了所有的方法,后台回调那个地方到底要怎么写

#1


微信公众平台修改服务器配置时token验证失败
没个人指点一下么

#2


服务端返回验证失败
要么是服务端挂了,这个不太可能
所以还是你们清掉调用的参数有问题

#3


引用 2 楼 FoxDave 的回复:
服务端返回验证失败
要么是服务端挂了,这个不太可能
所以还是你们清掉调用的参数有问题

验证使用的参数是微信那边自动补全的,按照开发文档的说明,只要最后通过验证参数判断为true,并且将echoStr这个参数原样返回给微信就可以通过,现在不管是调试还是写log都能看到原样返回的echoStr,但依然提示token验证失败

#4


引用 3 楼 yqyqyqyq0215 的回复:
Quote: 引用 2 楼 FoxDave 的回复:

服务端返回验证失败
要么是服务端挂了,这个不太可能
所以还是你们清掉调用的参数有问题

验证使用的参数是微信那边自动补全的,按照开发文档的说明,只要最后通过验证参数判断为true,并且将echoStr这个参数原样返回给微信就可以通过,现在不管是调试还是写log都能看到原样返回的echoStr,但依然提示token验证失败

联系微信开发平台客服看看

#5


如果参数都正确的话,一般是超时了,可能你代码执行比较久,或者你网络有问题

#6


引用 5 楼 myhope88 的回复:
如果参数都正确的话,一般是超时了,可能你代码执行比较久,或者你网络有问题

并不是超时,已经解决了,谢谢

#7


引用 4 楼 FoxDave 的回复:
Quote: 引用 3 楼 yqyqyqyq0215 的回复:

Quote: 引用 2 楼 FoxDave 的回复:

服务端返回验证失败
要么是服务端挂了,这个不太可能
所以还是你们清掉调用的参数有问题

验证使用的参数是微信那边自动补全的,按照开发文档的说明,只要最后通过验证参数判断为true,并且将echoStr这个参数原样返回给微信就可以通过,现在不管是调试还是写log都能看到原样返回的echoStr,但依然提示token验证失败

联系微信开发平台客服看看

谢谢,已经解决了

#8


我也遇到了,以前用的新浪云,现在改了别的云服务,所以URL和token值都换了,但是在公众平台点击提交时总是报错验证失败。楼主怎么解决的?

#9


请问您的这个问题是怎么解决的呢?求指教

#10


最后终于找到解决方法了,楼主结贴了但是没有留下解决方法,我现在给出我的问题和解决方法,希望对大家有用:
我也遇到这个问题,我的情况是这样的,用的框架,echo $echoStr也是对的,但是就是提升token验证失败,没有bom头,编码也是正确的,响应时间也是对的,最后在echo $echoStr前面加一句ob_clean();就好了,回答出来希望对大家有用。 

#11


我也遇到了这个问题,刚开始测试成功了,换了一个服务器,token验证失败 
楼主把解决方案贴出来看看,万分感谢

#12


新浪云服务器要求要实名认证才能正常使用微信开发的,我也是查了好久才知道的,希望能帮到大家!!!!

#13


我也遇到上述问题,如果是修改了服务器配置,在验证那段代码里面把 Response Clear() 下就可以了

#14


上面说的对,清除掉输出缓存区就OK了【保证代码以及配置没有错误的情况下】,使用ob_clean();

#15


请问楼主是如何解决问题的

#16


我也遇到这个问题了,求大神指教一下,该怎么弄,

#17


10楼是正解,在echo之前加上ob_clean()就可以了

#18


引用 10 楼 leos_393068657 的回复:
最后终于找到解决方法了,楼主结贴了但是没有留下解决方法,我现在给出我的问题和解决方法,希望对大家有用:
我也遇到这个问题,我的情况是这样的,用的框架,echo $echoStr也是对的,但是就是提升token验证失败,没有bom头,编码也是正确的,响应时间也是对的,最后在echo $echoStr前面加一句ob_clean();就好了,回答出来希望对大家有用。 

就是说你返回的数据多了一些多除的信息了,用ob_clean()把多除信息清掉了,学习了

#19


楼主不懂得分享,只会索取!鉴定完毕!

#20


引用 10 楼 leos_393068657 的回复:
最后终于找到解决方法了,楼主结贴了但是没有留下解决方法,我现在给出我的问题和解决方法,希望对大家有用:
我也遇到这个问题,我的情况是这样的,用的框架,echo $echoStr也是对的,但是就是提升token验证失败,没有bom头,编码也是正确的,响应时间也是对的,最后在echo $echoStr前面加一句ob_clean();就好了,回答出来希望对大家有用。 


感谢已解决;并关注。

#21


引用 10 楼 leos_393068657 的回复:
最后终于找到解决方法了,楼主结贴了但是没有留下解决方法,我现在给出我的问题和解决方法,希望对大家有用:
我也遇到这个问题,我的情况是这样的,用的框架,echo $echoStr也是对的,但是就是提升token验证失败,没有bom头,编码也是正确的,响应时间也是对的,最后在echo $echoStr前面加一句ob_clean();就好了,回答出来希望对大家有用。 


谢谢,正解!!

#22


谢谢,同样的问题,正解

#23


还是csdn牛逼,找了好久终于找到方法了

#24


强烈BS楼主

#25


遇到了同样的问题,找了半天也没有找到解决办法,好不容易找到了这篇博客,以为看到了希望,可是按照此方法尝试后,为啥还是不行呢,还是提示token配置失败,可是新浪SAE上日志已经显示成功输出了echostr,快疯了@哪位大神能帮忙解决一下呢???求助。。。

#26


引用 10 楼 leos_393068657 的回复:
最后终于找到解决方法了,楼主结贴了但是没有留下解决方法,我现在给出我的问题和解决方法,希望对大家有用:
我也遇到这个问题,我的情况是这样的,用的框架,echo $echoStr也是对的,但是就是提升token验证失败,没有bom头,编码也是正确的,响应时间也是对的,最后在echo $echoStr前面加一句ob_clean();就好了,回答出来希望对大家有用。 

感谢10楼,我的也是这种情况,在echo前加了ob_clean();就好了

#27


我的加了 ob_clean();  为什么还在不行呢?? 微信公众平台修改服务器配置时token验证失败

#28


引用 26 楼 smkka123 的回复:
Quote: 引用 10 楼 leos_393068657 的回复:

最后终于找到解决方法了,楼主结贴了但是没有留下解决方法,我现在给出我的问题和解决方法,希望对大家有用:
我也遇到这个问题,我的情况是这样的,用的框架,echo $echoStr也是对的,但是就是提升token验证失败,没有bom头,编码也是正确的,响应时间也是对的,最后在echo $echoStr前面加一句ob_clean();就好了,回答出来希望对大家有用。 

感谢10楼,我的也是这种情况,在echo前加了ob_clean();就好了



为什么我加了没作用,求大神指教

#29


引用 12 楼 hvweihong 的回复:
新浪云服务器要求要实名认证才能正常使用微信开发的,我也是查了好久才知道的,希望能帮到大家!!!!



弄的我默默的去实名了一下!

#30


CSDN果然NB 十楼正解~~

#31


java怎么加那个ob_clean()函数啊?求具体这句代码!!!

#32


java应该有个response.clear()的方法,c#里面有,java差不多也是这个

#33


引用 27 楼 baidu_35917727 的回复:
我的加了 ob_clean();  为什么还在不行呢?? 微信公众平台修改服务器配置时token验证失败


$wechatObj = new wechatCallbackapiTest();
//当接入成功后,请注销这句话,否则,会反复验证。
//$wechatObj->valid();

这个需要打开.......

#34


10楼的方法,在我这边额可以、

#35


引用 33 楼 wy444 的回复:
Quote: 引用 27 楼 baidu_35917727 的回复:

我的加了 ob_clean();  为什么还在不行呢?? 微信公众平台修改服务器配置时token验证失败


$wechatObj = new wechatCallbackapiTest();
//当接入成功后,请注销这句话,否则,会反复验证。
//$wechatObj->valid();

这个需要打开.......
我说我老是验证失败,这个忘开了,谢谢提醒

#36


引用 32 楼 hzw360121 的回复:
java应该有个response.clear()的方法,c#里面有,java差不多也是这个


//        response.setContentType("text/html;charset=utf-8");
我代码是多了这段,之前是没问题的,现在去掉就可以了

#37


引用
36

找了半天全是PHP的解释,就没有java的解决方法(java难道没人用了?),非常感谢36楼

#38


首先说明,我也遇到这个问题了,但是已经解决了,现在我将我的问题及解决办法说下。
问题说明:
我使用的是测试号,刚开始第一版代码是好用的,但是我换个了域名之后结果接口配置信息修改时总是提示我失败。按照惯例,查文档、重新测试程序、百度、google,都没解决。
最后看到这个帖子,也试了清理缓存什么的,还是不好用,只好使用postman,慢慢尝试。后来发现,echostr返回的内容外面被双引号包围着,如“123123123”。由于我使用的spring,默认情况下contentType是application/json,想到是否可能是contenttype引起的,就把contenttype改成了text/plain,再使用postman测试,返回的echostr内容中无双引号了,部署上去一测是就通过。
解决办法:
说了那么多废话,解决办法最核心的就是严格关注返回的内容,多余的东西都去掉。我给出spring中的代码,供参考
@RequestMapping(value = "/{account}/message",  method = RequestMethod.GET,produces = {"text/plain;charset=UTF-8"})
public @ResponseBody String doGet(HttpServletRequest request,@PathVariable String account,HttpServletResponse response) {
最主要的是produces = {"text/plain;charset=UTF-8"}
吐槽:
为什么tmd第一次配置是好用的,改了域名就不好用了,走了好多弯路

#39


前面的解决方案还是没成功如果是PHP看看头部信息
加上:header("Content-Type:text/plain;charset=utf-8");就可以了

#40


ob_clean() 正解!!!!
另外贴上我写的一个微信对接接口,如果使用ob_clean()还是没用的同学可以尝试用下我写的,万一你哪里写错了呢。
public  function wx_api(){
        //1.将 timestamp,nonce,token 按字典序排序
        $timestamp = $_GET['timestamp'];
        $nonce = $_GET['nonce'];
        $token = 'weixin';
        $signature = $_GET['signature'];
        $echostr = $_GET['echostr'];
        $array = array($timestamp,$nonce,$token);
        sort($array);

        //2.将排序好的三个参数拼接之后按sha1加密
        $tmpstr = implode('',$array);
        $tmpstr = sha1($tmpstr);

        //3.将加密后的字符串与signature进行对比,判断请求是否来自于微信
        if($tmpstr == $signature && $echostr){
            //1.第一次接入微信api接口,
            ob_clean();
            echo $echostr;
            exit;
        }else{
            $this->reponseMsg();//这是没用的,我写的自动回复啊那些事件不需要看
        }
    }

#41


我也来贡献一下把。 微信公众平台修改服务器配置时token验证失败

java
1.用get方式访问自己的接口,比如浏览器访问   http://****.com/****/****.**?echostr =1    
如果浏览器能返回 1 ,则接口没问题了,    
2. 测试的时候可以不验签

#42


感谢39楼谢谢

#43


我的还是不行吖,,试过了所有的方法,后台回调那个地方到底要怎么写