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

Chyan 2015-03-02 02:49:46
公司去年申请的公众号,刚开始配置成功了
后来要给客户部署,对方提供了开发者的参数,可进行配置的时候提示token验证失败。
回来用我们自己的账号登陆,修改服务器配置,直接点确定也提示token验证失败……
于是我觉得问题还是出在我们代码这边
但调试的时候发现代码已经可以原样返回echoStr参数的值(Response.Write),消息加解密使用明文模式,但就是提示token验证失败,有遇到过类似问题的朋友么
...全文
86912 52 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
52 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiayuquan0226 2019-03-29
  • 打赏
  • 举报
回复
引用 10 楼 雷欧斯 的回复:
最后终于找到解决方法了,楼主结贴了但是没有留下解决方法,我现在给出我的问题和解决方法,希望对大家有用: 我也遇到这个问题,我的情况是这样的,用的框架,echo $echoStr也是对的,但是就是提升token验证失败,没有bom头,编码也是正确的,响应时间也是对的,最后在echo $echoStr前面加一句ob_clean();就好了,回答出来希望对大家有用。
跪谢啊
jeiryc 2019-03-05
  • 打赏
  • 举报
回复
我的更神奇,看nginx 的log 更本没有请求记录,一点提交直接返回失败。nginx的log 失败 和 成功 都没有任何访问记录。
handsome小赞 2019-02-03
  • 打赏
  • 举报
回复
楼主,你好,我现在也遇到这个问题了,我是没有验证,直接取出了echostr后面的那串数字(就是echostr的参数),然后返回,但是怎么样都是提示token验证失败。
请教下前辈😭
悲伤周 2018-12-13
  • 打赏
  • 举报
回复
引用 38 楼 kwm0707 的回复:
首先说明,我也遇到这个问题了,但是已经解决了,现在我将我的问题及解决办法说下。 问题说明: 我使用的是测试号,刚开始第一版代码是好用的,但是我换个了域名之后结果接口配置信息修改时总是提示我失败。按照惯例,查文档、重新测试程序、百度、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第一次配置是好用的,改了域名就不好用了,走了好多弯路
牛逼,解决了
liuhongfeifa 2018-11-08
  • 打赏
  • 举报
回复
引用 38 楼 kwm0707 的回复:
首先说明,我也遇到这个问题了,但是已经解决了,现在我将我的问题及解决办法说下。
问题说明:
我使用的是测试号,刚开始第一版代码是好用的,但是我换个了域名之后结果接口配置信息修改时总是提示我失败。按照惯例,查文档、重新测试程序、百度、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第一次配置是好用的,改了域名就不好用了,走了好多弯路
请问这一段代码放在哪里,可以放出完整代码看一下嘛
liuhongfeifa 2018-11-08
  • 打赏
  • 举报
回复
有没有大神贴出完整源码看一下,我也遇到了这样的问题,万分感谢
Citron__ 2018-09-20
  • 打赏
  • 举报
回复
引用 38 楼 kwm0707 的回复:
首先说明,我也遇到这个问题了,但是已经解决了,现在我将我的问题及解决办法说下。
问题说明:
我使用的是测试号,刚开始第一版代码是好用的,但是我换个了域名之后结果接口配置信息修改时总是提示我失败。按照惯例,查文档、重新测试程序、百度、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第一次配置是好用的,改了域名就不好用了,走了好多弯路



特意登录答谢楼主,感谢感谢
yilia_jia 2018-08-13
  • 打赏
  • 举报
回复
引用 38 楼 kwm0707 的回复:
首先说明,我也遇到这个问题了,但是已经解决了,现在我将我的问题及解决办法说下。
问题说明:
我使用的是测试号,刚开始第一版代码是好用的,但是我换个了域名之后结果接口配置信息修改时总是提示我失败。按照惯例,查文档、重新测试程序、百度、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第一次配置是好用的,改了域名就不好用了,走了好多弯路


终于找到一个有用的了 返回的数据都是对的 就是验证失败
在@RequestMapping(value = "verify_wx_token",produces = {"text/plain;charset=UTF-8"})加了produces = {"text/plain;charset=UTF-8"} 果然成功 感谢!!!
weixin_42683795 2018-07-13
  • 打赏
  • 举报
回复
引用 43 楼 qq1632015096 的回复:
我的还是不行吖,,试过了所有的方法,后台回调那个地方到底要怎么写


注意doGet()方法千万不能调用父类的doGet()方法,否则就会配置失败。把这句话删掉,应该能解决问题。
qq1632015096 2017-11-16
  • 打赏
  • 举报
回复 1
我的还是不行吖,,试过了所有的方法,后台回调那个地方到底要怎么写
w2653452079 2017-11-15
  • 打赏
  • 举报
回复
感谢39楼谢谢
喝水塞牙 2017-08-10
  • 打赏
  • 举报
回复
我也来贡献一下把。 java 1.用get方式访问自己的接口,比如浏览器访问 http://****.com/****/****.**?echostr =1 如果浏览器能返回 1 ,则接口没问题了, 2. 测试的时候可以不验签
kangqinsheng 2017-08-02
  • 打赏
  • 举报
回复
前面的解决方案还是没成功如果是PHP看看头部信息 加上:header("Content-Type:text/plain;charset=utf-8");就可以了
qq_31556561 2017-08-02
  • 打赏
  • 举报
回复
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();//这是没用的,我写的自动回复啊那些事件不需要看 } }
kwm0707 2017-07-11
  • 打赏
  • 举报
回复
首先说明,我也遇到这个问题了,但是已经解决了,现在我将我的问题及解决办法说下。 问题说明: 我使用的是测试号,刚开始第一版代码是好用的,但是我换个了域名之后结果接口配置信息修改时总是提示我失败。按照惯例,查文档、重新测试程序、百度、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第一次配置是好用的,改了域名就不好用了,走了好多弯路
xjv368 2017-07-10
  • 打赏
  • 举报
回复
引用
36
找了半天全是PHP的解释,就没有java的解决方法(java难道没人用了?),非常感谢36楼
厵-_-鎽 2017-06-06
  • 打赏
  • 举报
回复
引用 32 楼 hzw360121 的回复:
java应该有个response.clear()的方法,c#里面有,java差不多也是这个
// response.setContentType("text/html;charset=utf-8"); 我代码是多了这段,之前是没问题的,现在去掉就可以了
IT_小白白 2017-05-02
  • 打赏
  • 举报
回复
引用 33 楼 wy444 的回复:
[quote=引用 27 楼 baidu_35917727 的回复:] 我的加了 ob_clean(); 为什么还在不行呢??
$wechatObj = new wechatCallbackapiTest(); //当接入成功后,请注销这句话,否则,会反复验证。 //$wechatObj->valid(); 这个需要打开.......[/quote]我说我老是验证失败,这个忘开了,谢谢提醒
风云雄霸 2017-04-22
  • 打赏
  • 举报
回复
10楼的方法,在我这边额可以、
矮油喔槽 2016-11-30
  • 打赏
  • 举报
回复
引用 27 楼 baidu_35917727 的回复:
我的加了 ob_clean(); 为什么还在不行呢??
$wechatObj = new wechatCallbackapiTest(); //当接入成功后,请注销这句话,否则,会反复验证。 //$wechatObj->valid(); 这个需要打开.......
加载更多回复(32)

62,247

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧