接口调试成功,但运行时提示该公众号提供的服务出现故障

清川先生 2020-02-20 12:57:28

开发环境如下

CentOS 7
Python 3.7
Flask 1.1.1
tornado 6.0.3

关键代码如下

xml_data = request.stream.read()
xml_objt = receive.parse_xml(xml_data)
if xml_objt.MsgType == "text":
text_str = '''<xml><ToUserName>![CDATA[%s]]</ToUserName><FromUserName>![CDATA[%s]]</FromUserName><CreateTime>%s</CreateTime><MsgType>![CDATA[text]]</MsgType><Content>![CDATA[%s]]</Content></xml>'''
response = make_response(text_str % (xml_objt.FromUserName, xml_objt.ToUserName, str(int(time.time())), xml_objt.Content))
response.headers['content-type'] = 'application/xml'
return response
else:
return make_response("")

其中的消息接受和解析如下

# -*- coding: utf-8 -*-
import xml.etree.ElementTree as ET


def parse_xml(web_data):
if len(web_data) == 0:
return None
xmlData = ET.fromstring(web_data)
msg_type = xmlData.find('MsgType').text
print(msg_type, xmlData)
print(ET.tostring(xmlData))
if msg_type == 'event':
event_type = xmlData.find('Event').text
if event_type == 'CLICK':
return Click(xmlData)
elif event_type in ('subscribe', 'unsubscribe'):
return Subscribe(xmlData)
elif msg_type == 'text':
return TextMsg(xmlData)
elif msg_type == 'image':
return ImageMsg(xmlData)
elif msg_type == 'voice':
return VoiceMsg(xmlData)
else:
return Msg(xmlData)


class Msg(object):
def __init__(self, xmlData):
self.ToUserName = xmlData.find('ToUserName').text
self.FromUserName = xmlData.find('FromUserName').text
self.CreateTime = xmlData.find('CreateTime').text
self.MsgType = xmlData.find('MsgType').text

class TextMsg(Msg):
def __init__(self, xmlData):
Msg.__init__(self, xmlData)
self.Content = xmlData.find('Content').text

目前已排除的问题

1. 接口返回值中没有空格
2. 接口返回值字段取值正确,ToUserName和FromUserName没反
3. xml返回值的节点名正确
4. 返回值编码没问题
5. 公众号后台服务器配置已启用
6. 域名解析正常、端口访问正常
7. 公众号没有绑定第三方平台

另外公众号曾经改过名,这里接受到的用户消息中的ToUserName是原始ID,而不是当前公众号ID,不知道是否有影响
而且现在微信公众号运维的端口告警功能无法使用,所以不能通过这个调试
...全文
145 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
清川先生 2020-02-20
  • 打赏
  • 举报
回复
Tornado的配置以及Flask的运行代码

app = Flask(__name__)
app.debug = True
define("debug", default=True, help="Debug Mode", type=bool)
. . .
if __name__ == '__main__':
        options.parse_command_line()
        http_server = HTTPServer(WSGIContainer(app))
        http_server.listen(80)
        IOLoop.instance().start()
另外,接口URL也是毫无问题的,不存在缺少'/'的问题

3,143

社区成员

发帖
与我相关
我的任务
社区描述
微信开发即微信公众平台开发,将企业信息、服务、活动等内容通过微信网页的方式进行表现,通过二次开发可以将公众账号由一个媒体型营销工具转化成提供服务的产品。
社区管理员
  • 微信开发
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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