小試微信公眾號(hào)開發(fā)

倒騰完靜態(tài)博客的搭建后,又開始琢磨著動(dòng)態(tài)頁面的事情了。
一旦可以與用戶產(chǎn)生交互,那就有了非常多的想象空間了。
現(xiàn)在移動(dòng)開發(fā)漸漸變得主流起來,連一開始搭建這個(gè)Hexo博客挑選主題時(shí),對(duì)移動(dòng)端的良好適配也變成了首要考慮的因素。
結(jié)合以上因素,想到之前申請的微信訂閱號(hào)可以做開發(fā),定制自己想要的功能,為何不拿來試一試呢。

1. 預(yù)期目標(biāo)

打通開發(fā)各環(huán)節(jié),實(shí)現(xiàn)消息的通信。
因此,只實(shí)現(xiàn)一個(gè)最簡單的功能,即接收用戶發(fā)來的消息,并將該消息發(fā)回用戶。

2. 基本方案

開發(fā)環(huán)境
網(wǎng)上搜了一下發(fā)現(xiàn),目前做公眾號(hào)開發(fā)的主流方案是PHP或Java,無奈自己都不會(huì),于是考慮用Python。
Python有很多現(xiàn)成的web框架,可以快速實(shí)現(xiàn)功能,不用重復(fù)造輪子了。這里選用了Flask。
服務(wù)器
因?yàn)橹皇亲约和妫韵韧泄茉诿赓M(fèi)的云服務(wù)器上好了。

最終選定的方案為:

  • Python+Flask框架
  • Coding.net的項(xiàng)目演示平臺(tái)。

3. 前期準(zhǔn)備

3.1 開發(fā)者功能

在公眾號(hào)管理平臺(tái)打開開發(fā)者功能。
服務(wù)器地址之后在部署的時(shí)候會(huì)得到,Token令牌就是一個(gè)密碼,可以任意設(shè)置。

3.2 Flask安裝

通過python的包管理工具pip來安裝Flask是最簡單的方法:

$ pip install flask

系統(tǒng)會(huì)自動(dòng)安裝Flask及其依賴包Werkzeug和Jinja2。

4. 程序設(shè)計(jì)

主程序:

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. 項(xiàng)目部署

5.1 其他項(xiàng)目文件

依賴說明文件:requirements.txt

Flask==0.10.1
Jinja2==2.8
Werkzeug==0.11.2
gunicorn==19.0.0

指定應(yīng)用的啟動(dòng)命令:Procfile

web: gunicorn hello:app -b $VCAP_APP_HOST:$VCAP_APP_PORT

更詳細(xì)的說明可以參看官方文檔說明

5.2 啟動(dòng)服務(wù)

在Coding.net中新建一個(gè)項(xiàng)目,本地添加遠(yuǎn)程代碼庫地址后,用Git工具將項(xiàng)目文件push到相應(yīng)的代碼庫中。
在項(xiàng)目菜單中進(jìn)入演示選項(xiàng),點(diǎn)擊開始檢測進(jìn)行部署環(huán)境的自動(dòng)檢測。檢測完成后,點(diǎn)擊開啟功能。

開啟演示

進(jìn)入演示控制臺(tái),設(shè)置訪問域名以及應(yīng)用內(nèi)存。

該訪問域名就是公眾號(hào)平臺(tái)中需要設(shè)置的服務(wù)器地址。

選擇一建部署,等待一會(huì)兒,項(xiàng)目在云端就部署完成了。

演示控制臺(tái)

6. 系統(tǒng)測試

在微信中打開公眾號(hào)對(duì)話框,現(xiàn)在來發(fā)消息試試。


對(duì)話測試

可以看到,系統(tǒng)會(huì)將我們的消息再次發(fā)送回來。
現(xiàn)在看起來有點(diǎn)傻,也沒有什么實(shí)際的使用意義,但只要服務(wù)器能夠收到用戶發(fā)送的消息,并正確解析,那么對(duì)該消息進(jìn)行何種處理,做出怎樣的反饋,都是可以進(jìn)一步開發(fā)的。做出一個(gè)像Siri或者Cortana那樣的聊天機(jī)器人也不是不可能啊。

7. 后續(xù)任務(wù)

7.1 Flask相關(guān)

  • 基本功能
    目前只不過實(shí)現(xiàn)了Flask的Hello World,基本的使用方法還需要更深入的研究。
  • 項(xiàng)目架構(gòu)
    為了測試最基本的功能,將整個(gè)應(yīng)用在一個(gè)模塊中實(shí)現(xiàn),并不符合基本的MVC模式。
    Flask應(yīng)用有推薦的項(xiàng)目架構(gòu),為了后續(xù)更復(fù)雜功能的開發(fā),據(jù)其做相應(yīng)的調(diào)整。
  • 數(shù)據(jù)庫
    一般的Web應(yīng)用都會(huì)用到數(shù)據(jù)庫。以SQLite為例,研究數(shù)據(jù)庫在Flask中的調(diào)用方法。
  • 應(yīng)用擴(kuò)展
    Flask的設(shè)計(jì)思想就是核心簡單易用,功能易于擴(kuò)展。利用Flask-Script等擴(kuò)展應(yīng)用,實(shí)現(xiàn)更加豐富的功能。

7.2 公眾號(hào)相關(guān)

  • 開發(fā)文檔
    閱讀公眾號(hào)開發(fā)文檔,熟悉最基本的API及調(diào)用方法。
  • 開發(fā)框架
    有很多基于Python的公眾號(hào)開發(fā)框架,將官方API進(jìn)行打包,更加利于使用。
  • 本地調(diào)試
    如果每次開發(fā)調(diào)試都要將項(xiàng)目重新部署到遠(yuǎn)程服務(wù)器上,那就非常不方便,需要尋找一種本地調(diào)試的方法。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,901評(píng)論 25 709
  • 22年12月更新:個(gè)人網(wǎng)站關(guān)停,如果仍舊對(duì)舊教程有興趣參考 Github 的markdown內(nèi)容[https://...
    tangyefei閱讀 35,390評(píng)論 22 257
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    aimaile閱讀 26,832評(píng)論 6 427
  • 日子一天天過去,父親的身板比之前壯實(shí)了,卻多了些印記---傷痕,雙手早已結(jié)了繭子。父親依然愛好寫字,每天下班后,找...
    魏道道女王閱讀 382評(píng)論 2 2
  • 明知身上萬條傷, 仍舊強(qiáng)忍不落淚。 怨天尤人有何用? 踏破坎坷不怕累!
    冷竹心閱讀 139評(píng)論 0 0

友情鏈接更多精彩內(nèi)容