小试微信公众号开发

倒腾完静态博客的搭建后,又开始琢磨着动态页面的事情了。
一旦可以与用户产生交互,那就有了非常多的想象空间了。
现在移动开发渐渐变得主流起来,连一开始搭建这个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 = "%s0"
        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到相应的代码库中。
在项目菜单中进入演示选项,点击开始检测进行部署环境的自动检测。检测完成后,点击开启功能

小试微信公众号开发_第1张图片
开启演示

进入演示控制台,设置访问域名以及应用内存。

该访问域名就是公众号平台中需要设置的服务器地址。

选择一建部署,等待一会儿,项目在云端就部署完成了。

小试微信公众号开发_第2张图片
演示控制台

6. 系统测试

在微信中打开公众号对话框,现在来发消息试试。


小试微信公众号开发_第3张图片
对话测试

可以看到,系统会将我们的消息再次发送回来。
现在看起来有点傻,也没有什么实际的使用意义,但只要服务器能够收到用户发送的消息,并正确解析,那么对该消息进行何种处理,做出怎样的反馈,都是可以进一步开发的。做出一个像Siri或者Cortana那样的聊天机器人也不是不可能啊。

7. 后续任务

7.1 Flask相关

  • 基本功能
    目前只不过实现了Flask的Hello World,基本的使用方法还需要更深入的研究。
  • 项目架构
    为了测试最基本的功能,将整个应用在一个模块中实现,并不符合基本的MVC模式。
    Flask应用有推荐的项目架构,为了后续更复杂功能的开发,据其做相应的调整。
  • 数据库
    一般的Web应用都会用到数据库。以SQLite为例,研究数据库在Flask中的调用方法。
  • 应用扩展
    Flask的设计思想就是核心简单易用,功能易于扩展。利用Flask-Script等扩展应用,实现更加丰富的功能。

7.2 公众号相关

  • 开发文档
    阅读公众号开发文档,熟悉最基本的API及调用方法。
  • 开发框架
    有很多基于Python的公众号开发框架,将官方API进行打包,更加利于使用。
  • 本地调试
    如果每次开发调试都要将项目重新部署到远程服务器上,那就非常不方便,需要寻找一种本地调试的方法。

你可能感兴趣的:(小试微信公众号开发)