 
 
上大學的時候,對微信公眾號開發淺嘗輒止的玩了一下,感覺還是挺有意思的。
//www.jb51.net/article/133677.htm后來服務器到期了,也就擱置了。由于發布web程序,使用PHP很順手,就使用了PHP作為開發語言。但是其實微信公眾號的開發和語言關聯并不大,流程,原理上都是一致的。
快要做畢設了,想著到時候應該會部署一些代碼到服務器上,進行長期的系統構建。所以趁著還是學生,就買了阿里云的學生機。買了之后,就想著玩點什么,于是微信公眾號的開發,就又提上了日程。但是這次,我不打算使用PHP了,感覺局限性相對于Python而言,稍微有點大。
使用Python的話,可以靈活的部署一些爬蟲類程序,和用戶交互起來也會比較方便。可拓展性感覺也比較的高,于是就選它了。
服務器配置這部分屬于是比較基礎的,不太明白的可以看看我之前的那個博客,還算是比較的詳細。今天就只是對核心代碼做下介紹好了。
項目目錄
root@aliyun:/var/www/html/wx/py# ls *.pyapi.py dispatcher.py robot.pyroot@aliyun:/var/www/html/wx/py#
api.py
這個文件相當于是一個關卡,涉及token的驗證,和服務的支持。
# -*- coding:utf-8 -*-    #中文編碼import sysreload(sys) # 不加這部分處理中文還是會出問題sys.setdefaultencoding('utf-8')import timefrom flask import Flask, request, make_responseimport hashlibimport jsonimport xml.etree.ElementTree as ETfrom dispatcher import *app = Flask(__name__)app.debug = True@app.route('/') # 默認網址def index(): return 'Index Page'@app.route('/wx', methods=['GET', 'POST'])def wechat_auth(): # 處理微信請求的處理函數,get方法用于認證,post方法取得微信轉發的數據 if request.method == 'GET': token = '你自己設置好的token' data = request.args signature = data.get('signature', '') timestamp = data.get('timestamp', '') nonce = data.get('nonce', '') echostr = data.get('echostr', '') s = [timestamp, nonce, token] s.sort() s = ''.join(s) if (hashlib.sha1(s).hexdigest() == signature):  return make_response(echostr) else: rec = request.stream.read() # 接收消息 dispatcher = MsgDispatcher(rec) data = dispatcher.dispatch() with open("./debug.log", "a") as file:  file.write(data)  file.close() response = make_response(data) response.content_type = 'application/xml' return responseif __name__ == '__main__': app.run(host="0.0.0.0", port=80)dispatcher.py
這個文件是整個服務的核心,用于識別用戶發來的消息類型,然后交給不同的handler來處理,并將運行的結果反饋給前臺,發送給用戶。消息類型這塊,在微信的開發文檔上有詳細的介紹,因此這里就不再過多的贅述了。
新聞熱點
疑難解答