倒腾完静态博客的搭建后,又开始琢磨着动态页面的事情了。
一旦可以与用户产生交互,那就有了非常多的想象空间了。
现在移动开发渐渐变得主流起来,连一开始搭建这个Hexo博客挑选主题时,对移动端的良好适配也变成了首要考虑的因素。
结合以上因素,想到之前申请的微信订阅号可以做开发,定制自己想要的功能,为何不拿来试一试呢。
1. 预期目标
打通开发各环节,实现消息的通信。
因此,只实现一个最简单的功能,即接收用户发来的消息,并将该消息发回用户。
2. 基本方案
开发环境
网上搜了一下发现,目前做公众号开发的主流方案是PHP或Java,无奈自己都不会,于是考虑用Python。
Python有很多现成的web框架,可以快速实现功能,不用重复造轮子了。这里选用了Flask。
服务器
因为只是自己玩,所以先托管在免费的云服务器上好了。
最终选定的方案为:
- Python+Flask框架
- Coding.net的项目演示平台。
3. 前期准备
3.1 开发者功能
在公众号管理平台打开开发者功能。
服务器地址之后在部署的时候会得到,Token令牌就是一个密码,可以任意设置。
3.2 Flask安装
通过python的包管理工具pip来安装Flask是最简单的方法:
$ pip install flask
系统会自动安装Flask及其依赖包Werkzeug和Jinja2。
4. 程序设计
主程序:
import time
from flask import Flask, request, make_response
import hashlib
import xml.etree.ElementTree as ET
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def wechat_auth():
if request.method == 'GET':
token = 'your token'
query = request.args
signature = query.get('signature', '')
timestamp = query.get('timestamp', '')
nonce = query.get('nonce', '')
echostr = query.get('echostr', '')
s = [timestamp, nonce, token]
s.sort()
s = ''.join(s)
if (hashlib.sha1(s).hexdigest() == signature):
return make_response(echostr)
else:
xml_recv = ET.fromstring(request.data)
ToUserName = xml_recv.find("ToUserName").text
FromUserName = xml_recv.find("FromUserName").text
Content = xml_recv.find("Content").text
reply = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>0</FuncFlag></xml>"
response = make_response(reply % (FromUserName, ToUserName,
str(int(time.time())), Content))
response.content_type = 'application/xml'
return response
5. 项目部署
5.1 其他项目文件
依赖说明文件:requirements.txt
Flask==0.10.1
Jinja2==2.8
Werkzeug==0.11.2
gunicorn==19.0.0
指定应用的启动命令:Procfile
web: gunicorn hello:app -b $VCAP_APP_HOST:$VCAP_APP_PORT
更详细的说明可以参看官方文档说明。
5.2 启动服务
在Coding.net中新建一个项目,本地添加远程代码库地址后,用Git工具将项目文件push到相应的代码库中。
在项目菜单中进入演示选项,点击开始检测进行部署环境的自动检测。检测完成后,点击开启功能。
进入演示控制台,设置访问域名以及应用内存。
该访问域名就是公众号平台中需要设置的服务器地址。
选择一建部署,等待一会儿,项目在云端就部署完成了。
6. 系统测试
在微信中打开公众号对话框,现在来发消息试试。
对话测试
可以看到,系统会将我们的消息再次发送回来。
现在看起来有点傻,也没有什么实际的使用意义,但只要服务器能够收到用户发送的消息,并正确解析,那么对该消息进行何种处理,做出怎样的反馈,都是可以进一步开发的。做出一个像Siri或者Cortana那样的聊天机器人也不是不可能啊。
7. 后续任务
7.1 Flask相关
-
基本功能
目前只不过实现了Flask的Hello World,基本的使用方法还需要更深入的研究。 -
项目架构
为了测试最基本的功能,将整个应用在一个模块中实现,并不符合基本的MVC模式。
Flask应用有推荐的项目架构,为了后续更复杂功能的开发,据其做相应的调整。 -
数据库
一般的Web应用都会用到数据库。以SQLite为例,研究数据库在Flask中的调用方法。 -
应用扩展
Flask的设计思想就是核心简单易用,功能易于扩展。利用Flask-Script等扩展应用,实现更加丰富的功能。
7.2 公众号相关
-
开发文档
阅读公众号开发文档,熟悉最基本的API及调用方法。 -
开发框架
有很多基于Python的公众号开发框架,将官方API进行打包,更加利于使用。 -
本地调试
如果每次开发调试都要将项目重新部署到远程服务器上,那就非常不方便,需要寻找一种本地调试的方法。
网友评论