段晓晨,
写过一点爬虫,写过几篇文章。能力虽有限,
会尽量把想说的东西讲清楚。
知乎ID:
段小草
知乎专栏:
小段同学的杂记,
https://zhuanlan.zhihu.com/666666
通过这一系列的文章,我们来介绍一下如何用Python开发微信公众号的后台。
主要工具:SAE+微信公众号+Git+Python本地环境(最好已经安装好了Git并配置好了Python IDE,比如Pycharm)
1. 工欲善其事
首先要简单介绍一下一些准备工作。
1.1 微信公众号
第一步是要注册一个个人微信公众号(个人账号不支持认证),按照
https://mp.weixin.qq.com/
给出的过程依次填写需要的信息就可以完成申请,如果已有账号的话可以直接登录。
登录以后可以看到左边栏中的自动回复功能:
在一般的使用中,我们可以通过设置关键字实现一些基本的自动回复功能,但是这样的关键字回复远远不能满足我们的实际需求,比如我们要实现一个查快递的功能,必然是要通过调用快递接口对不同用户的不同输入给出不同的输出结果,在这样的情况下关键字回复就显得很鸡肋了。于是我们选择了开发者模式。
在基本配置中,我们只需要修改URL、Token和EncodingAESKey三项配置即可,由于我们现在还没有配好自己的服务器,微信公众号这边的设置到这里暂停,等我们有了服务器获取了地址以后回来填写就可以了。
1.2 SAE
这次我们使用新浪云作为我们的服务器,注册登录
https://www.sinacloud.com
,新用户会有一定的优惠云豆,老用户充个十块也足够我们完成很多学习任务了。
选择云应用,进入控制台后创建新应用。
输入二级域名和应用名称(必填项),在下面的运行环境中选择 Python2.7 - 空应用。
成功创建应用后,会获得相应的一些配置数据和密钥,当然这些内容这次用不到,主要用到的就是登陆账号和安全密码。
SAE平台的代码版本控制分为Git和SVN,两者可以自由选择,这次我们选择使用Git进行代码的上传操作。
1.3 Git
对于Windows系统,电脑上如果安装了 Github Desktop 的话,应该就自带了 Git Bash 和 Git Shell 这样的工具,如果之前没有安装过 Git 相关的软件,可以自行搜索 Git 以后安装 Git for Windows。
Git 刚接触时可能很复杂,用起来功能很强大但繁琐,初学者可能绕来绕去就绕晕了,但是在这次的搭建过程中我们其实只需要用到四五条极为简单的命令即可,所以完全无需担心 Git ,也不要让 Git 成为你拒绝迈出第一步的障碍。(关于 SAE 的代码管理,详见
https://www.sinacloud.com/doc/sae/tutorial/code-deploy.html#git
)
下面就让我们进入到真正的开发阶段吧!
2. 捅破窗户纸
犹记得我大一的时候公众号刚刚兴起,当时我还兴致冲冲地注册了账号,设置了一大堆的关键字自动回复,坚持了数天的图文消息推送,但是当我真正开始研究开发者模式,真正想去调用一些接口时却发现,好像自己该学的也都学了,该用的也都用过,就是串不到一起去,做不出想要的东西来(当时用的好像还是 PHP ),后面一直搁置了公众号这样的东西,一下子就拖到了现在。这两天试了一下 Python 服务器的配置,发现完全就是一层窗户纸,其实一捅就破,完全没有当初的纠结和复杂了。
2.1 服务器配置和 Token 认证
由于我们之前在 SAE 平台创建的是空应用,所以我们需要做一些基础的配置工作。这次我们选择使用 web.py (Python 2.7)来进行服务器搭建,如果本地没有 web.py 库的话可以通过 pip 命令进行安装(pip install web.py)。
之后我们需要创建一个项目,并编辑如下的基本代码。
config.yaml
name: wxpytest
version: 1
libraries:
- name: webpy
version: "0.36"
- name: lxml
version: "2.3.4"
...
index.wsgi
# coding: UTF-8
importos
importsae
import web
fromweixinInterface
import WeixinInterface
urls = (
'/weixin','WeixinInterface'
)
app_root = os.path.dirname(__file__)
templates_root = os.path.join(app_root, 'templates')
render = web.template.render(templates_root)
app = web.application(urls, globals()).wsgifunc()
application = sae.create_wsgi_app(app)
这两部分是 web.py 的基础配置文件,之后我们需要开始编写实现微信公众平台功能的代码。
新建weixinInterface.py
# -*- coding: utf-8 -*-
importhashlib
import web
importlxml
import time
importos
classWeixinInterface:
def __init__(self):
self.app_root = os.
path.dirname(__file__)
self.templates_root = os.path.join(self.app_root, 'templates')
self.render = web.template.render(self.templates_root)
def GET(self):
#获取输入参数
data = web.input()
signature=data.signature
timestamp=data.timestamp
nonce=data.nonce
echostr = data.echostr
#自己的token
token="token" #这里改写你在微信公众平台里输入的token
#字典序排序
list=[token,timestamp,nonce]
list.sort()
sha1=hashlib.sha1()
map(sha1.update,list)
hashcode=sha1.hexdigest()
#sha1加密算法
#如果是来自微信的请求,则回复echostr
ifhashcode == signature:
returnechostr
编写好这三部分的代码后,我们就实现了最简单的微信平台认证配置,这三部分代码中需要修改的只有 token 字段,需要和你在微信平台中输入的 token 保持一致。(之后有机会再详细写具体的认证过程吧,这次只罗列一下实现过程,需要注意的是认证 token 我们只需要用 GET 方法而之后的发消息需要用 POST 方法。)
这时我们需要把代码上传到 SAE 平台,然后在微信平台进行认证请求。
在文件根目录右键打开 Git Bash,依次输入如下命令,过程中可能会需要输入 SAE 的用户名和安全密码,按照提示操作即可。
gitinit
git remote add sae https://git.sinacloud.com/yourapp
git add .
git commit -m 'your commit message'
git push sae master:1
之后回到公众平台的开发者页面,填写 URL 为