上一篇文章討論了官方給的例子驗證token失敗的解決方法:微信公眾號token驗證失敗
想了一下,還是決定不適用web.py這個框架。因為搜了一下他的中文文檔不多,學起來可能會有點麻煩。而且看着他沒有主動取適應python3.0,pip安裝默認還是python2,例子什么的也都是python2的。我不太想回到python2。所以我選擇了flask這個框架,簡單而且文檔比較多。
下面介紹flask完成服務器驗證。因為有了上一次的經驗,知道了驗證就是獲取幾個get的數據包,然后加密再確認就可以了。所以只需要知道flask怎么獲取get包就可以了。
經過搜索,flask的獲取get使用的是request.args.get這個函數(要from flask import request),參數就是get的字段名字。
signature=request.args.get('signature')
知道這些就可以效法上一篇文章的代碼進行改造了。(當然,也得學習一下flask的基本語法什么的)
from flask import Flask from flask import request import hashlib app = Flask(__name__) @app.route('/wx') def getinput(): signature=request.args.get('signature') timestamp=request.args.get('timestamp') nonce=request.args.get('nonce') echostr=request.args.get('echostr') token = "maluguang" list = [token, timestamp, nonce] list.sort() sha1 = hashlib.sha1() sha1.update(list[0].encode('utf-8')) sha1.update(list[1].encode('utf-8')) sha1.update(list[2].encode('utf-8')) hashcode = sha1.hexdigest() print ("handle/GET func: hashcode, signature, timestamp, nonce, echostr, token: ", hashcode, signature,timestamp,nonce,echostr) if hashcode == signature: return echostr else: return "" if __name__ == '__main__': app.run(port='80')
這樣就可以完成微信token的驗證了。
題外話。本來打算跟着flask的開發文檔把那個示例的博客系統做出來的。但是,做着做着就出錯,有的地方也看不懂。因為那個東西已經基本算是個成品了,各種東西比較完善,我覺得初學的看不太懂。把他比作建樓房的話,應該先做骨架,最精簡的那種,哪怕有很多漏洞,運行效率低什么的,但這樣最起碼知道每一步在干什么。他那種,我覺得就是一下子從底到上,一遍直接給完工了,做完直接入住,因為他已經提前考慮了很多問題,在寫的時候也考慮進去了。而對於初學者,他事先考慮的很多問題,我們根本不明白為什么這樣。所以,就放棄了。
還是那種,為了實現一個功能就去搜,一次了解一個功能,一個函數具體怎么用,怎么寫比較適合我。我得想法是用許多點匯聚成面的學習。比方說,今天學了flask的get用法,明天學post,接着學表單提交,靜態模板,數據庫等等。一次明白一個東西,最后再匯聚到一起。嗯,flask的那個博客系統一次塞給我的東西太多了,接受不過來,而且自己也沒能力將那些東西拆分開來理解。
參考文章:
flask的request如何獲取參數(這個里面還有其他獲取get數據的函數)