微信接口请求超时解决办法
发布于 5 年前 作者 wei29 2016 次浏览 来自 分享

2020年真是多灾多难的一年

前几天公司上线的项目,突然之间,不能进行访问,而且是时灵时不灵的那种

经过排查,发现‘微信网页授权接口’大概率发生请求超时的情况,导致项目无法正常访问。并且最近一两天,社区里也有其他同学有请求超时的情况发生,所以写这篇文章。

我们服务器买的云服务器,第一直觉是云服务器是稳定可靠的,不会出问题的,然后发帖提问,社区star【橱窗旁的小辣椒】排查后发现是我们的云服务器网络不稳定导致的,建议我们用备灾域名,看能否项目正常访问,替换成备灾域名后,问题完美解决。

刚接触微信相关开发的时候,看过备灾域名的介绍,然后觉得项目一直很稳定(老子用不到这个备灾域名),直到自己项目出问题。。。

  • 我们常用的微信相关api接口,有两大部分

一部分是公众号api相关接口用的通用域名api.weixin.qq.com,此域名所能替换的备灾域名有api2.weixin.qq.com、sh.api.weixin.qq.com、sz.api.weixin.qq.com、hk.api.weixin.qq.com。【微信官方文档·接口域名说明】

一部分是支付相关api接口用的主域名api.mch.weixin.qq.com,次域名所能替换的备灾域名有api2.mch.weixin.qq.com【微信官方文档·最佳安全实践】

  • 解决方案

为了保证项目安全顺利进行,一般的项目,可以采用下面这样的解决方案

实现主备域名实时切换策略、请求失败后切换备用域名重新发起请求策略



  • 定时探测主域名连通性,实现主备域名实时切换策略【备注说明】

主域名:api.mch.weixin.qq.com, api.weixin.qq.com

备用域名:api2.mch.weixin.qq.com, api2.weixin.qq.com

【方案流程图】

【业务请求流程】

  1. 1、准备好全局存储空间(比如配置文件、内存空间等)存放“域名信息”并进行初始化;
  2. 2、发起交易前,从“域名信息”中获取当前域名;
  3. 3、使用当前域名发起请求,成功,则流程结束;
  4. 4、使用当前域名发起请求,失败(连接超时、读写超时),获取另一个域名进行重试,流程结束;
  5. 5、因业务问题导致失败,商户侧根据自身逻辑处理;

【定时探测流程】

  1. 1、启动定时探测器,每分钟一次进行主域名探测(探测频率商户可根据业务实际情况自行设定);
  2. 2、连续探测主域名5次,失败(连接超时)次数小于3次,更新域名信息为主域名,失败(连接超时)次数大于等于3次,更新域名信息为备用域名;
  3. 3、探测方式可用curl、telnet等方式发起。

失败重试策略【备注说明】

主域名:api.mch.weixin.qq.com, api.weixin.qq.com

备用域名:api2.mch.weixin.qq.com, api2.weixin.qq.com

【方案流程图】

  1. 【业务请求流程】1、发起交易前,从“域名信息”中获取当前域名;
  2. 2、使用当前域名发起请求,成功,则流程结束;
  3. 3、使用当前域名发起请求,失败(连接超时、读写超时),获取另一个域名进行重试,流程结束;
  4. 4、因业务问题导致失败,商户侧根据自身逻辑处理;


  • 网络排查指引

有时间有能力的可以看看微信官方编写的【网络排查指引】https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=23_2&index=3

回到顶部