微信公众号开发--“该公众号提供的服务出现故障,请稍后再试”
错误描述
在之前的微信公众号开发过程中,遇到了提示“该公众号提供的服务出现故障,请稍后再试”的错误,当时找错误的原因真是丧心病狂,通过查阅资料也知道了几个产生这个提示的原因,特此写个小经验分享一下,有同样遇到的小伙伴可自行排查一下。
错误图片:
尽管公众号会提示有故障,但其实并没有影响到我们的业务,只不过天天提示这玩意儿也很恶心。
好了,进入正题,产生这个问题的原因总结为以下几点。
原因排查
微信服务器没有在5秒内收到回复
这是官方文档的要求,默认用户服务器必须在5秒内给予回复
可能我们的业务并不能保证5秒内能执行完,但是可以设置成异步去处理。
返回给微信服务器的消息内容格式不正确
你的接口返回值里面有空格
我并没有遇到这个错误,这是在查阅资料时发现有的博主遇到了这个问题,所以也借鉴过来:
可以看到接口文档里面的返回值
<xml> <ToUserName>< ![CDATA[toUser] ]></ToUserName> <FromUserName>< ![CDATA[fromUser] ]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType>< ![CDATA[text] ]></MsgType> <Content>< ![CDATA[你好] ]></Content> </xml>
里面包含了大量的空格,这是致命性的,接口文档里面没有特别说明这些空格的处理,所以这也是一个巨坑了,去掉xml中的所有空格就ok(尤其要注意符号之间的空格,请严格检查)。
接口返回值的字段取值不对
还是以被动回复用户信息为例,同时结合接收普通消息接口说明
ToUserName、FromUserName参数值取错,这一点也很容易赋值错误,很多人(包括我)一开始ToUserName我取的就是接收普通消息接口里面的ToUserName、FromUserName,细思后发现,这是一个很搞笑的错误,显然这两个接口接收的主体对象是不一样的,也就是说,被动回复用户信息接口返回值里面的ToUserName、FromUserName参数值应该取值接收普通消息接口里面的FromUserName、ToUserName。
xml返回值的节点名不对
可以看到,被动回复用户信息接口xml返回值里面的节点名是Image,要是你写成小写的image,就gg了。
授权给了第三方平台
这是我在开发过程中遇到的问题。排查这个问题有一个非常好的技巧,不得不说,微信文档在全是坑的同时,也提供了一点非常有用的工具了。
就是这个东东,大家可以去自己的公众号管理平台上找到运维中心-接口告警,你就可以看到这个二维码了,我的问题出现的时候,已经排查了以上多种原因,看的是头脑发混,但是最终还是被我发现了这个小工具,扫码后会建立一个群,一个是你,一个是微信公众号平台报警账号。
在测试这个报警之前,需要先设置一下告警规则,让微信服务器知道在什么时候需要向你的告警群发送警报。
设置后,可以再次让自己的公众号产生几次故障的提示,那么群中的微信告警账号会发送一个消息,如下:
主要看这两个地方,在我的警报中我发现有一个第三方平台的提示,就去平台上找到公众号配置-授权管理,果然是有这个第三方的授权,猜测是该第三方的原因,取消授权后,问题果然迎刃而解,所以授权第三方时还是要注意一下这个问题。
不过微信的这个小工具还是要点个赞的!!!啾咪(^_-)