使用flask搭建微信公眾號:完成token的驗證


上一篇文章討論了官方給的例子驗證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數據的函數)

flask 如何獲取全部 GET 查詢參數?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM