当普通微信用户向公众账号发消息时,微信服务器将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()方法)
<span class="hljs-keyword">import</span> xmltodict
xmlStr = <span class="hljs-string">"""
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12357975460</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[hello]]></Content>
<MsgId>1234567890123456</MsgId>
</xml>
"""</span>
xmlDict = xmltodict.parse(xmlStr)[<span class="hljs-string">'xml'</span>]
<span class="hljs-keyword">for</span> key, val <span class="hljs-keyword">in</span> xmlDict.items():
print(key, <span class="hljs-string">"="</span>, val)
dict字典数据转为XML数据(unparse()方法)
<span class="hljs-keyword">import</span> xmltodict
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">textMsg</span><span class="hljs-params">(toUser, fromUser, contentType, content)</span>:</span>
<span class="hljs-keyword">import</span> time
responseXMLDict = {
<span class="hljs-string">"ToUserName"</span>: toUser,
<span class="hljs-string">"FromUserName"</span>: fromUser,
<span class="hljs-string">"CreateTime"</span>: int(time.time()),
<span class="hljs-string">"MsgType"</span>: contentType,
<span class="hljs-string">"Content"</span>: content
}
responseXMLStr = xmltodict.unparse({<span class="hljs-string">"xml"</span>:responseXMLDict})
<span class="hljs-keyword">return</span> responseXMLStr
print(textMsg(<span class="hljs-string">"toUser"</span>, <span class="hljs-string">"fromUser"</span>, <span class="hljs-string">"text"</span>,<span class="hljs-string">"sunck is a good man"</span>))