组团学

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

阅读 (386684)
  • 收发原理

截屏2020051811.06.01.png

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

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

  • 自有公众号

截屏2020051810.50.09.png

  • 测试平台

截屏2020051810.49.07.png

消息类型

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

各消息类型的推送使用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"))
需要 登录 才可以提问哦