小试微信公众号开发

倒腾完静态博客的搭建后,又开始琢磨着动态页面的事情了。
一旦可以与用户产生交互,那就有了非常多的想象空间了。
现在移动开发渐渐变得主流起来,连一开始搭建这个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进行打包,更加利于使用。
  • 本地调试
    如果每次开发调试都要将项目重新部署到远程服务器上,那就非常不方便,需要寻找一种本地调试的方法。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,753评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,668评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,090评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,010评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,054评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,806评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,484评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,380评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,873评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,021评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,158评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,838评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,499评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,044评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,159评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,449评论 3 374
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,136评论 2 356

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,199评论 25 707
  • 22年12月更新:个人网站关停,如果仍旧对旧教程有兴趣参考 Github 的markdown内容[https://...
    tangyefei阅读 35,186评论 22 257
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,491评论 6 427
  • 日子一天天过去,父亲的身板比之前壮实了,却多了些印记---伤痕,双手早已结了茧子。父亲依然爱好写字,每天下班后,找...
    魏道道女王阅读 328评论 2 2
  • 明知身上万条伤, 仍旧强忍不落泪。 怨天尤人有何用? 踏破坎坷不怕累!
    冷竹心阅读 114评论 0 0