微信公众号 被动回复超时问题

  |  
阅读次数
  |  
字数 517
  |  
时长 ≈ 2 分钟

问题描述

微信公众号 被动回复超时问题1
先看一下上图,我在公号上面输入,,,到公号后端服务,被动响应之前,这个字符会调用一个内部接口,主要是查询答案,然后返回到公号后端,然后后端服务再处理报文后,做被动响应操作。

正常操作结果就是像第一个一样,返回处理后的文字向导。
但是输入第二个积分多少的时候,公号就显示出该公众号提供的服务出现故障,请稍后再试,这并不是正常的处理结果。

问题排查

排查了几个问题,

  1. 公号后端服务运行正常。
  2. 排查日志,后端服务就算机器人接口调用不通也会有返回默认响应报文,但是就是出现了故障提示。
  3. 最后排查发现,是后端服务httpclient与公众号被动回复超时时间冲突导致的。

原因描述

因为公众号被动回复响应时间为5秒,也就是说当你后端服务超过5秒钟没有响应内容的话,公众号就会当成当前用户的这次操作没有响应,因此,报了上面那个错误:该公众号提供的服务出现故障,请稍后再试

原因就是出在我们后台服务的httpclient设置的超时时间也是5秒钟,调用内部接口时,接口没响应的情况下,虽然五秒后我们有默认响应结果给到微信公众号,但是公号已经提前一步响应错误结果给到用户了,所以我们后面那次默认响应就其实是没用的,所以这里我们调整一下我们调用接口的超时响应时间为小于公众号的5秒就行了。

解决办法

1
private static final int TIMEOUT = 4000;

把httpclient的超时响应时间改为4秒钟,比公号的响应时间早一秒就可以解决问题了。