微信公众号-消息收发原理
阅读 (386684)
分享
- 收发原理
当普通微信用户向公众账号发消息时,微信服务器将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"))
需要
登录
才可以提问哦
: