最近學(xué)了一下Flask滨彻,看見知乎里有人用web.py來(lái)寫微信公眾號(hào)后臺(tái)前塔,所以我也正好用Flask來(lái)嘗試一下,就當(dāng)做是練練手式廷。功能很簡(jiǎn)單咐扭,就是實(shí)現(xiàn)一個(gè)自動(dòng)回復(fù)機(jī)器人,當(dāng)然是調(diào)用的圖靈機(jī)器人接口滑废。相當(dāng)基礎(chǔ)的啦蝗肪!
既然要寫微信公眾號(hào)后臺(tái),首先肯定是要先有一個(gè)微信公眾號(hào)蠕趁,這個(gè)申請(qǐng)很簡(jiǎn)單薛闪,在此就不多說(shuō)了,不會(huì)的可以去百度妻导。
一逛绵、接入微信公眾號(hào)
主要步驟是根據(jù)微信公眾平臺(tái)開發(fā)文檔來(lái)的,需要看文檔的請(qǐng)點(diǎn)擊開發(fā)文檔
開發(fā)文檔提供的接入步驟為:
- 填寫服務(wù)器配置
- 驗(yàn)證服務(wù)器地址的有效性
- 依據(jù)接口文檔實(shí)現(xiàn)業(yè)務(wù)邏輯
1倔韭、填寫服務(wù)器配置
登錄微信公眾平臺(tái)官網(wǎng)后,在公眾平臺(tái)官網(wǎng)的開發(fā)-基本設(shè)置頁(yè)面瓢对,勾選協(xié)議成為開發(fā)者寿酌,點(diǎn)擊“修改配置”按鈕,填寫服務(wù)器地址(URL)硕蛹、Token和EncodingAESKey醇疼,其中URL是開發(fā)者用來(lái)接收微信消息和事件的接口URL硕并。Token可由開發(fā)者可以任意填寫,用作生成簽名(該Token會(huì)和接口URL中包含的Token進(jìn)行比對(duì)秧荆,從而驗(yàn)證安全性)倔毙。EncodingAESKey由開發(fā)者手動(dòng)填寫或隨機(jī)生成,將用作消息體加解密密鑰乙濒。
這是開發(fā)文檔的描述陕赃,說(shuō)得比較詳細(xì)
其中的URL是你的服務(wù)器地址,在這兒我是用我的網(wǎng)站颁股,Token自己隨便填寫么库,后面會(huì)用到,EncodingAESKey可以自己寫也可以隨機(jī)生成甘有,一般隨機(jī)生成就行了诉儒。先不點(diǎn)提交,因?yàn)槲覀冞€沒(méi)有寫驗(yàn)證程序亏掀,后面寫完后再點(diǎn)擊忱反。
2、驗(yàn)證服務(wù)器地址的有效性
這是文檔的說(shuō)明滤愕,我們主要就按照寫個(gè)步驟來(lái)編寫驗(yàn)證代碼
首先用Flask寫出基本框架缭受,因?yàn)楸容^簡(jiǎn)單,這兒就用單文件
from flask import Flask
from flask import request
app = Flask(__name__)
@app.route("/")
def index():
pass
if __name__ == "__main__":
app.run()
這是一個(gè)最基本的Flask程序该互,根據(jù)文檔說(shuō)明米者,開發(fā)者提交請(qǐng)求后會(huì)發(fā)送一個(gè)GET請(qǐng)求到URL,GET請(qǐng)求攜帶了四個(gè)參數(shù)宇智,我們首先獲得這四個(gè)參數(shù):
from flask import Flask
from flask import request
import hashlib
app = Flask(__name__)
@app.route("/weixin/"蔓搞,methods=["GET","POST"])
def index():
if request.method == "GET": # 判斷請(qǐng)求方式是GET請(qǐng)求
my_signature = request.args.get('signature') # 獲取攜帶的signature參數(shù)
my_timestamp = request.args.get('timestamp') # 獲取攜帶的timestamp參數(shù)
my_nonce = request.args.get('nonce') # 獲取攜帶的nonce參數(shù)
my_echostr = request.args.get('echostr') # 獲取攜帶的echostr參數(shù)
token = 'hahaha' # 一定要跟剛剛填寫的token一致
# 進(jìn)行字典排序
data = [token,my_timestamp ,my_nonce ]
data.sort()
# 拼接成字符串
temp = ''.join(data)
# 進(jìn)行sha1加密
mysignature = hashlib.sha1(temp).hexdigest()
# 加密后的字符串可與signature對(duì)比,標(biāo)識(shí)該請(qǐng)求來(lái)源于微信
if my_signature == mysignature:
return my_echostr
if __name__ == "__main__":
app.run()
根據(jù)開發(fā)文檔随橘,所有的驗(yàn)證代碼就寫完啦喂分,現(xiàn)在可以去微信公眾號(hào)后臺(tái)點(diǎn)擊提交,如果沒(méi)問(wèn)題的話就會(huì)顯示成功机蔗。也可能會(huì)提示“請(qǐng)求url超時(shí)”或“token驗(yàn)證失敗”蒲祈,前者再次提交就行,后者可能是你的程序有問(wèn)題萝嘁,如果程序沒(méi)問(wèn)題梆掸,可以試著換一下token。
驗(yàn)證成功后牙言,我們接下來(lái)就可以編寫后臺(tái)邏輯代碼了酸钦,我們下次主要是調(diào)用圖靈機(jī)器人接口實(shí)現(xiàn)自動(dòng)回復(fù),下次繼續(xù)說(shuō)咱枉。首先看看效果:
想要體驗(yàn)一下的也可以搜索公眾號(hào)gh_acc899230a63