小試微信公眾號開發

倒騰完靜態博客的搭建后,又開始琢磨著動態頁面的事情了。
一旦可以與用戶產生交互,那就有了非常多的想象空間了。
現在移動開發漸漸變得主流起來,連一開始搭建這個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閱讀 227,797評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,179評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,628評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,642評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,444評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,948評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,040評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,185評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,717評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,794評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,418評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,414評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,750評論 2 370

推薦閱讀更多精彩內容

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