前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微信公众号-消息收发原理

微信公众号-消息收发原理

作者头像
星哥玩云
发布2022-09-14 17:58:12
6440
发布2022-09-14 17:58:12
举报
文章被收录于专栏:开源部署
  • 收发原理
截屏2020051811.06.01.png
截屏2020051811.06.01.png

当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上

微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试

  • 自有公众号
截屏2020051810.50.09.png
截屏2020051810.50.09.png
  • 测试平台
截屏2020051810.49.07.png
截屏2020051810.49.07.png

消息类型

  • 文本消息
  • 图片消息
  • 语音消息
  • 视频消息
  • 小视频消息
  • 地理位置消息
  • 链接消息

各消息类型的推送使用XML数据包结构

代码语言:javascript
复制
<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()方法)

代码语言:javascript
复制
<span class="hljs-keyword">import</span> xmltodict
xmlStr = <span class="hljs-string">"""
&lt;xml&gt;
&lt;ToUserName&gt;&lt;![CDATA[toUser]]&gt;&lt;/ToUserName&gt;
&lt;FromUserName&gt;&lt;![CDATA[fromUser]]&gt;&lt;/FromUserName&gt;
&lt;CreateTime&gt;12357975460&lt;/CreateTime&gt;
&lt;MsgType&gt;&lt;![CDATA[text]]&gt;&lt;/MsgType&gt;
&lt;Content&gt;&lt;![CDATA[hello]]&gt;&lt;/Content&gt;
&lt;MsgId&gt;1234567890123456&lt;/MsgId&gt;
&lt;/xml&gt;
"""</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()方法)

代码语言:javascript
复制
<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>))
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
语音消息
语音消息(Voice Message Service,VMS)通过腾讯云提供的语音专线,为客户提供语音告警、语音通知、语音验证码等服务。语音消息具有高到达率、超低延时、秒级触达的优势,致力于提供优质的语音消息服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档