写在前面

《使用Python进行微信公众号开发》系列文章将与大家分享如何使用Python一步步搭建微信公众号后台服务器。

效果体验

扫码“是雯子吖”公众号进行体验

配置自己的公众号后台进行体验

想要体验效果的小伙伴可以将微信公众号后台的 开发-> 基本配置 -> 服务器配置 中的Token随意配置,服务器地址配置为 https://apit.toodo.fun/wechatMP/ + Token,如

Token = hello  # 可随意设置,但是要保证与服务器地址最后一项相同
服务器地址:https://apit.toodo.fun/wechatMP/hello
消息加解密方式:明文模式或者兼容模式

如果配置成功的话,新关注你公众号的用户将会收到“Hi~ 终于等到你”,并且收到消息后会由我服务器上的机器人自动回复。

项目地址

GitHub:https://github.com/MR5356/toodoWechat

接收消息

微信用户向公众号发消息时,服务器会收到一个内容为XML数据的POST请求,服务器需要在5秒内做出回应,如果5秒内无法做出回应,可直接回复空串,否则微信将发起重试,总计三次。各类型的消息XML数据包结构如下:

消息类型

所有类型的消息都包含以下内容

<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>1348831860</CreateTime><MsgId>1234567890123456</MsgId>
</xml>
参数 描述
ToUserName 开发者微信号
FromUserName 发送方帐号(一个OpenID)
CreateTime 消息创建时间 (整型)
MsgId 消息id,64位整型

文本消息

<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>1348831860</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[this is a test]]></Content><MsgId>1234567890123456</MsgId>
</xml>
参数 描述
MsgType 消息类型,文本为text
Content 文本消息内容

图片消息

<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>1348831860</CreateTime><MsgType><![CDATA[image]]></MsgType><PicUrl><![CDATA[this is a url]]></PicUrl><MediaId><![CDATA[media_id]]></MediaId><MsgId>1234567890123456</MsgId>
</xml>
参数 描述
MsgType 消息类型,图片为image
PicUrl 图片链接(由系统生成)
MediaId 图片消息媒体id,可以调用获取临时素材接口拉取数据。

语音消息

<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>1357290913</CreateTime><MsgType><![CDATA[voice]]></MsgType><MediaId><![CDATA[media_id]]></MediaId><Format><![CDATA[Format]]></Format><MsgId>1234567890123456</MsgId>
</xml>
参数 描述
MsgType 语音为voice
MediaId 语音消息媒体id,可以调用获取临时素材接口拉取数据。
Format 语音格式,如amr,speex等
Recognition 语音识别结果,需开启语音识别功能

视频消息

<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>1357290913</CreateTime><MsgType><![CDATA[video]]></MsgType><MediaId><![CDATA[media_id]]></MediaId><ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId><MsgId>1234567890123456</MsgId>
</xml>
参数 描述
MsgType 视频为video
MediaId 视频消息媒体id,可以调用获取临时素材接口拉取数据。
ThumbMediaId 视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。

小视频消息

<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>1357290913</CreateTime><MsgType><![CDATA[shortvideo]]></MsgType><MediaId><![CDATA[media_id]]></MediaId><ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId><MsgId>1234567890123456</MsgId>
</xml>
参数 描述
MsgType 小视频为shortvideo
MediaId 视频消息媒体id,可以调用获取临时素材接口拉取数据。
ThumbMediaId 视频消息缩略图的媒体id,可以调用获取临时素材接口拉取数据。

位置信息

<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>1351776360</CreateTime><MsgType><![CDATA[location]]></MsgType><Location_X>23.134521</Location_X><Location_Y>113.358803</Location_Y><Scale>20</Scale><Label><![CDATA[位置信息]]></Label><MsgId>1234567890123456</MsgId>
</xml>
参数 描述
MsgType 消息类型,地理位置为location
Location_X 地理位置纬度
Location_Y 地理位置经度
Scale 地图缩放大小
Label 地理位置信息

链接消息(个人微信公众号不用考虑)

<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>1351776360</CreateTime><MsgType><![CDATA[link]]></MsgType><Title><![CDATA[公众平台官网链接]]></Title><Description><![CDATA[公众平台官网链接]]></Description><Url><![CDATA[url]]></Url><MsgId>1234567890123456</MsgId>
</xml>
参数 描述
MsgType 消息类型,链接为link
Title 消息标题
Description 消息描述
Url 消息链接

代码片段

因为微信发送给服务器的是XML数据包,我们需要对数据进行解析,在Python当中,我们可以使用xmltodict函数包将xml数据包转换为字典。

msg = xmltodict.parse(request.data).get('xml')

我们可以根据xml数据中的MsgType参数来判断消息的类型

msgType = msg.get('MsgType')
if msgType == 'text':print('这是文字消息')
if msgType == 'image':print('这是图片消息')
......

本小节完整代码

from WechatMP import WechatMP
import xmltodictapp = Flask(__name__)
Token = ''
appId = ''
secret = ''
wmp = WechatMP(Token=Token, appId=appId, secret=secret)@app.before_request
def checkSignature():signature = request.values.get('signature')timestamp = request.values.get('timestamp')nonce = request.values.get('nonce')echostr = request.values.get('echostr')  # 仅在验证服务器时使用次参数if not wmp.checkSignature(timestamp=timestamp, nonce=nonce, signature=signature):abort(404)if echostr:return echostr@app.route('/')
def main():msg = xmltodict.parse(request.data).get('xml')msgType = msg.get('MsgType')res = wmp.replyText(msg, 'Hi~ 终于等到你啦')if msgType == 'text':res = wmp.replyText(msg, msg.get('Content'))if msgType == 'image':res = wmp.replyImage(msg, msg.get('MediaId'))return xmltodict.unparse(res)if __name__ == '__main__':app.run(port=8001)

系列文章

使用Python进行微信公众号开发(一)服务器对接:https://blog.csdn.net/m0_49475727/article/details/115236330

参考文档

开发者文档-接收普通消息:https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_standard_messages.html

下面是我自己运营的微信小程序“但行趣事”和公众号“微电脑”,更多的技术文章以及视频我会放到小程序和公众号当中,有志同道合的小伙伴也可以在小程序(联系客服按钮)或者公众号(直接留言)当中联系我们

但行趣事小程序 微电脑公众号

使用Python进行微信公众号开发(二)接收消息相关推荐

  1. 使用Python进行微信公众号开发(三)回复消息

    写在前面 <使用Python进行微信公众号开发>系列文章将与大家分享如何使用Python一步步搭建微信公众号后台服务器. 效果体验 扫码"是雯子吖"公众号进行体验 配置 ...

  2. 基于python的微信公众号开发教程_基于python的微信公众号开发教程

    应广大python学员的期盼,九宝老师精心制作的"基于python的微信公众号开发"视频教程即将上线. 该课程秉承九宝培训一贯的"简单.高效.快速"的讲课原则, ...

  3. 视频教程-基于python的微信公众号开发教程-微信开发

    基于python的微信公众号开发教程 微信企业号星级会员.10多年软件从业经历,国家级软件项目负责人,主要从事软件研发.软件企业员工技能培训.已经取得计算机技术与软件资格考试(软考)--"信 ...

  4. 微信公众号php编程,PHP编程:微信公众号开发之文本消息自动回复php代码

    搜索热词 <微信公众号开发之文本消息自动回复PHP代码>要点: 本文介绍了微信公众号开发之文本消息自动回复PHP代码,希望对您有用.如果有疑问,可以联系我们. 本文实例为大家分享了PHP微 ...

  5. 微信公众 php代码,微信公众号开发之文本消息自动回复php代码_php实例

    本文实例为大家分享了php微信文本消息自动回复 别代码,供大家参考,具体内容如下 1.PHP示例代码下载 下载地址1:http://xiazai.php.net/201608/yuanma/phpwx ...

  6. 微信公众号回复、接收消息中中文乱码问题的分析及解决

    微信公众号回复.接收消息中文乱码问题的分析及解决 为了方便,我们把接收时用的编码记为A.把处理时用的编码记为B.把返回时用的编码记为C 文章目录 微信公众号回复.接收消息中文乱码问题的分析及解决 中文 ...

  7. PHP 一一 微信公众号开发(二次开发)

    两个星期前,学校请了传智播客的老师给我们做实训,讲了一个微信公众号开发,感觉挺有意思,在这里做一下记录,以便以后复习. 一.了解微信公众平台 1. 什么是微信公众平台? 微信公众平台是腾讯为了让用户申 ...

  8. 基于python的微信公众号开发

    最近想自学服务器方面的知识,用微信公众号开发来练手.阅读了一些文章,实践以后总结一下. 租了腾讯云服务器,操作系统为 Ubuntu Server 14.04.1 LTS 64位,分配了一个公网IP地址 ...

  9. python训练营微信公众号真实性_用python进行微信公众号开发(仅测试学习)

    今天看到篇教程,是用python开发微信公众号的,觉得有意思,就敲代码实现了一下,成功后更觉得好玩,故记录,方便开发深入时使用. 基础背景介绍: 首先得有个人微信号(没有自行注册),为方便测试学习: ...

最新文章

  1. ACMNO.13求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字。 输入 n 输出 和 样例输入 5 样例输出 153
  2. 漫画:什么是 “建造者模式” ?
  3. Oracle客户端安装教程
  4. 美团点评基于MGR的CMDB高可用架构搭建之路【转】
  5. 优麒麟 使用samba的windows打印机_优麒麟 19.10 将于本月结束生命周期
  6. 洛谷P2568 GCD(莫比乌斯反演)
  7. 关于SSH使用的一些经验
  8. 1.JAVA反射萧静默
  9. Mac上go环境变量配置
  10. 【Java】菜鸟教程Java基础测试刷题笔记
  11. 入门OJ 3172【导游】
  12. Android—Gradle教程(一)
  13. 2021年杭州行政区划调整方案与远景轨道线网概念图
  14. 数据结构银行排队系统c语言,数据结构银行排队系统实验报告
  15. javascript基础常识问答(三)
  16. 黎明回港避谈婚事 被曝宴请好友庆祝新婚(附图)
  17. 经纬财富:乐山稳健投资之道,积小胜为大胜
  18. java 和 c md5加密_Java与C++实现同样的MD5加密算法
  19. 【软件测试】测试员vs测试工程师,你是测试员还是测试工程师?
  20. 2016美国大选数据分析

热门文章

  1. 节日类非遗题材工笔人物画的创作实践 ——以《元日》系列作品为例
  2. cortex a7 a53_奥迪A7 升级原厂空气悬挂、FOGIAGO碳纤维进气套件、自动泊车辅助-改装作品...
  3. IP地址、子网掩码、网络号、主机号、网络地址、主机地址以及ip段/数字
  4. 被忽视的几个神秘的希腊字母简易LATEX,Markdown,Word编辑希腊字母快捷字符教程
  5. 23年电赛控制类笔记
  6. 软件测试人员该学习 Python 的七个理由
  7. 2018年12月六级考试真题笔记
  8. 鞭长莫及的真正含义新解
  9. 求质数的java算法
  10. php 图片系统,php七夜图片管理系统 MyPic v2.2 正式版