Python实现微信订阅号开发
1 | 此微信订阅号开发全程使用python语言进行开发 |
1.搭建服务
1 | 以web.py为网络框架,web.py提供了一种简单方法去制作一个网站 |
环境准备
1 | (1).安装python2.7版本以上 |
main.py
1 | # -*- coding: utf-8 -*- |
1 | 如果出现"socket.error: No socket could be created"错误信息 |
使用5002端口,启动Main.py


2.申请订阅号






3.开发者基本配置



1 | 现在选择提交肯定是验证token失败,因为还需要完成代码逻辑。改动原先main.py文件,新增handle.py |
main.py
1 | # -*- coding: utf-8 -*- |
handle.py
1 | # -*- coding: utf-8 -*- |
1 | 重新启动成功后(python main.py 80),点击提交按钮。 |

4.搭建一个安全稳定高效的公众号框架

1 | 主要有三个部分: |
(1).AccessToken中控服务器:
1 | 负责: 提供主动刷新和被动刷新机制来刷新accessToken并存储(为了防止并发刷新,注意加并发锁), |
(2).API-Proxy服务器:
1 | 负责:专一与微信API对接,不同的服务器可以负责对接不同的业务逻辑,更可进行调用频率、权限限制。 |
5.实现”你问我答”
目的
1 | 理解被动消息的含义 |
预实现功能
1 | 粉丝给公众号一条文本消息,公众号立马回复一条文本消息给粉丝,不需要通过公众平台网页操作 |
5.1.接受文本消息
1 | 粉丝给公众号发送的文本消息。官方wiki链接:消息管理/接收消息-接受普通消息 |
1 | <xml> |
1 | createTime 是微信公众平台记录粉丝发送该消息的具体时间 |
5.2. 被动回复文本消息
1 | 即公众号给粉丝发送的文本消息,官方wiki链接: 消息管理/接收消息-被动回复消息 |
1 | <xml> |
1 | 特别备注: |
5.3.回复success问题
1 | 查询官方wiki 开头强调: 假如服务器无法保证在五秒内处理回复,则必须回复"success"或者""(空串),否则微信后台会发起三次重试。 |
5.4.流程图

代码实现
1 | main.py文件不改变,handle.py 需要增加一下代码,增加新的文件receive.py, reply.py |
main.py
1 | # -*- coding: utf-8 -*- |
handle.py
1 | # -*- coding: utf-8 -*- |
receive.py
1 | # -*- coding: utf-8 -*- |
reply.py
1 | # -*- coding:utf-8 -*- |
在线测试
1 | 微信公众平台有提供一个在线测试的平台,方便开发者模拟场景测试代码逻辑。 |


真实体验
1 | 拿出手机,微信扫描公众号二维码,成为自己公众号的第一个粉丝。公众号二维码位置如下图: |


6.实现”图”尚往来
目的
1 | (1).引入素材管理 |
预实现功能:
1 | 接受粉丝发送的图片消息,并立马回复相同的图片给粉丝 |
6.1.接收图片消息
1 | 即粉丝给公众号发送的图片消息。粉丝给公众号发送一张图片消息,在公众号开发者后台接收到的xml如下: |
1 | <xml> |
特别说明
1 | PicUrl: 这个参数是微信系统把"粉丝"发送的图片消息自动转化成url。 这个url可用浏览器打开查看到图片。 |
6.2.被动回复图片消息
1 | 即公众号给粉丝发送的图片消息 |
特别说明
1 | (1).被动回复消息,即发送被动响应消息,不同于客服消息接口 |
1 | <xml> |
1 | 这里填写的MediaId的内容,其实就是粉丝的发送图片的原MediaId,所以粉丝收到了一张一模一样的原图。 |
流程图

handle.py
1 | # -*- coding: utf-8 -*- |
7.AccessToken
7.1.查看appid及appsecret
1 | 公众平台官网查看, 其中AppSecret 不点击重置时候,则一直保持不变 |
f813e764eb892f1ef6e3e2b2ebc6bddb
7.2.获取accessToken
临时方法获取
1 | 为了方便先体验其他接口,可以临时通过 在线测试 或者 浏览器获取accessToken |


7.3.接口获取
特别强调
1 | (1).第三方需要一个access_token获取和刷新的中控服务器。 |
basic.py
1 | # -*- coding: utf-8 -*- |
8. 临时素材
1 | 公众号经常有需要用到一些临时性的多媒体素材的场景 |
8.1.新建临时素材
1 | 接口详情请依据wiki介绍。提供参考代码如何上传素材作为临时素材,供其它接口使用。 |
media.py
1 | # -*- coding: utf-8 -*- |
8.2.获取临时素材MediaID
1 | 临时素材的MediaID 没有提供特定的接口进行统一查询,因此有俩种方式 |
8.3.下载临时素材
手工体验
1 | 开发者如何保存粉丝发送的图片呢? |
https://api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID (自行替换数据)
ACCESS_TOKEN 如 “AccessToken”章节讲解
MEDIA_ID 如 图尚往来/接受图片消息xml中的MediaId 讲解
只要数据正确,则会下载图片到本地,如下图:
9.自定义菜单
目的
1 | 三个菜单栏,体验click、view、media_id 三种类型的菜单按钮 |
menu.py
1 | # -*- coding: utf-8 -*- |
使用图灵微信第三方平台接管公众号


本文作者 : Matrix
原文链接 : https://matrixsparse.github.io/2017/06/19/Python实现微信订阅号开发/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
知识 & 情怀 | 二者兼得