这里需要注意 http 的端口号固定使用80 , 不可填写其他 。这里坑了我很久 , 因为我的服务器上还有我自己的博客 , 80端口被博客占用了 , 为了把80端口让出来 , 我重新搭了我的博客 , 修改了端口 , 导致现在访问我的博客后边必须加上修改后的端口 。这里如果有同学有更高的方法 , 还请劳烦告知一下!好了 , 现在我们的验证流程完成 , 运行我们的 Web 服务器 。然后到公众号后台配置处点击保存 , 如果提示验证通过 , 那么恭喜你完成了验证 。
如果提示验证失败 , 我们自己根据报错提示来查看是哪里的问题 。
实现“你问我答”和“图”上往来【给你的公众号添加一个智能机器人】我们验证成功了 , 下面就要开始处理粉丝在公众号发过来的消息了 。我们先来实现一个简单的“你问我答” , 粉丝给公众号一条文本消息 , 公众号立马回复一条相同文本消息给粉丝;还有图上往来 , 接受粉丝发送的图片消息 , 并立马回复相同的图片给粉丝 。
我们通过公众号文档知道 , 普通用户向公众号发消息是用的 POST 方法 , 消息分为文本消息、图片消息、语音消息、视频消息等很多种 。这里我们只对文本消息和图片消息进行处理和回复(后续你也可以针对其他消息进行处理和回复) 。
消息的格式为XML数据包 , 下面看一下文本消息的实例:
<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>- ToUserName 开发者微信号
- FromUserName 发送方帐号(一个OpenID)
- CreateTime 消息创建时间 (整型)
- MsgType 消息类型 , 文本为text , 图片为image
- Content 文本消息内容
- MsgId 消息id , 64位整型
<xml> <ToUserName><![CDATA[粉丝号]]></ToUserName> <FromUserName><![CDATA[公众号]]></FromUserName> <CreateTime>1460541339</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[test]]></Content></xml>- Content 回复的消息内容
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType><![CDATA[image]]></MsgType> <Image> <MediaId><![CDATA[media_id]]></MediaId> </Image></xml>- MediaId 通过素材管理中的接口上传多媒体文件 , 得到的id 。

文章插图

文章插图
我们根据流程来修改一下我们的代码 。我们增加两个文件来处理接收的消息 , 和回复的消息 receive.py , reply.py 。
receive.py
import xml.etree.ElementTree as ETdef parse_xml(web_data): if len(web_data) == 0: return None xmlData = ET.fromstring(web_data) msg_type = xmlData.find('MsgType').text if msg_type == 'text': return TextMsg(xmlData) elif msg_type == 'image': return ImageMsg(xmlData)class Msg(object): def __init__(self, xmlData): self.ToUserName = xmlData.find('ToUserName').text self.FromUserName = xmlData.find('FromUserName').text self.CreateTime = xmlData.find('CreateTime').text self.MsgType = xmlData.find('MsgType').text self.MsgId = xmlData.find('MsgId').textclass TextMsg(Msg): def __init__(self, xmlData): Msg.__init__(self, xmlData) self.Content = xmlData.find('Content').textclass ImageMsg(Msg): def __init__(self, xmlData): Msg.__init__(self, xmlData) self.PicUrl = xmlData.find('PicUrl').text self.MediaId = xmlData.find('MediaId').text
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Python爬虫案例:爬取微信公众号文章
- 小程序云开发支持公众号网页开发了
- 机器学习概念和经典算法,我用大白话给你讲清楚了!入门必看
- 一行代码让你的python运行速度提高100倍
- 新手如何快速推广微信公众号
- 道光为什么不传位给恭亲王 恭亲王奕欣和光绪什么关系
- 西汉东方朔 东方朔给汉武帝写了一篇文章
- 教你学会网易云JS逆向,爬来的歌打包发给女友邮箱可好?
- 详解Hbase底层的数据结构——LSMT
- 在30分钟内创建你的深度学习服务器
