共计 1304 个字符,预计需要花费 4 分钟才能阅读完成。
- 收发原理
当普通微信用户向公众账号发消息时,微信服务器将 POST 消息的 XML 数据包到开发者填写的 URL 上
微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试
- 自有公众号
- 测试平台
消息类型
- 文本消息
- 图片消息
- 语音消息
- 视频消息
- 小视频消息
- 地理位置消息
- 链接消息
各消息类型的推送使用 XML 数据包结构
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1478317060</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[hello]]></Content>
<MsgId>1234567890123456</MsgId>:q
</xml>
注意:<![CDATA 与]]> 括起来的数据不会被 xml 解析器解析
xmltodic 模块基本使用
安装:pip install xmltodic
作用:可将 XML 数据转为 Python 中的 dict 字典数据,也可将 dict 字典数据转为 XML 数据
-
XML 数据转为 dict 字典数据(parse() 方法)
import xmltodict xmlStr = """ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>12357975460</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[hello]]></Content> <MsgId>1234567890123456</MsgId> </xml> """ xmlDict = xmltodict.parse(xmlStr)['xml'] for key, val in xmlDict.items(): print(key, "=", val)
-
dict 字典数据转为 XML 数据(unparse() 方法)
import xmltodict def textMsg(toUser, fromUser, contentType, content): import time responseXMLDict = {"ToUserName": toUser, "FromUserName": fromUser, "CreateTime": int(time.time()), "MsgType": contentType, "Content": content } responseXMLStr = xmltodict.unparse({"xml":responseXMLDict}) return responseXMLStr print(textMsg("toUser", "fromUser", "text","sunck is a good man"))
正文完
星哥玩云-微信公众号