该公众号提供的服务出现故障,请稍后再试
2021-04-28 本文已影响0人
码丁
一、问题描述
在微信公众号后台配置好接口配置信息后,以为就万事大吉了,开发的过程中遇到了一个“该公众号提供的服务出现故障,请稍后再试”错误,觉得挺奇怪,但未引起足够重视。直至QA在测试过程中发现该错误,才发现是代码的bug。

二、解决方案
在寻找问题之前,大脑中先有了一个猜想:既然需要接收并处理微信发送过来的回调消息,那十有八九是接口返回给微信的消息不正确。基于此,在微信开者文档中找到了证据:
微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。详情请见“发送消息-被动回复消息”。
代码是python写的,在处理完消息后,返回了一个None值,下面是错误的写法:
class WeChatWebHook(ApiView):
def post(self, request, *args, **kwargs):
# 省略接收到微信回调消息后的业务逻辑处理过程
return HttpResponse(None)
改正方法很简单,直接返回空字符串即可,如下:
class WeChatWebHook(ApiView):
def post(self, request, *args, **kwargs):
# 省略接收到微信回调消息后的业务逻辑处理过程
return HttpResponse("")
修改完成后,再次给微信公众号发送消息、或者触发扫码关注事件,都不会报错了。
小结
在跟第三方平台进行集成时,极其容易遇到问题,遇到问题时,要冷静地找到自己的解题思路。