摘要:一站式解決新手開發(fā)微信公眾號遇到的所有問題。這一步,我們使用三個庫,微信的一個非常微小的框架,一個服務(wù)器,當(dāng)然在上可以使用代替。校驗成功后把返回給微信。我們把圖片發(fā)送給微信后臺后,會自動生成一個我們發(fā)送這個就可以了。
本文面向想通過Python學(xué)習(xí)公眾號開發(fā)的同學(xué)。一站式解決新手開發(fā)微信公眾號遇到的所有問題。
為了防止我的文章被到處轉(zhuǎn)載,貼一下我的公眾號【智能制造社區(qū)】,歡迎大家關(guān)注。
github倉庫地址https://github.com/injetlee/Python/tree/master/wechat
本篇文章首先實現(xiàn)與公眾號的對接,實現(xiàn)簡單的回復(fù)文字、圖片內(nèi)容。下一篇會對接騰訊的AI平臺,實現(xiàn)對照片的人臉檢測與分析,分析年齡、性別、表情、魅力值等。
準備工作首先要注冊一個公眾號,這個很簡單,我們到微信公眾平臺注冊就可以了,選擇個人訂閱號就可以。但是如果可以認證的,我建議選擇認證訂閱號,因為未認證的號很多功能權(quán)限都沒有。好了,話不多說進入正題。
1. 配置公眾號打開公眾號,在 開發(fā)->基本配置 頁面填寫內(nèi)容。
下面說下需要填的內(nèi)容,第一個URL要填的就是我們的服務(wù)地址,這個地址必須是外網(wǎng)地址并且是80端口。我們要本地開發(fā)時可以用 ngrok 解決。在ngrok.com官網(wǎng)下載。解壓后就是一個exe程序。在當(dāng)前目錄下輸入. grok.exe http 80 即可啟動。啟動后如下圖所示,圖片中網(wǎng)址就是我們需要的
然后我們復(fù)制紅色方框里面的地址到微信的URL輸入框中,比如我的就輸入http://c9b15df5.ngrok.io/connect 后面這個connect是我自己的服務(wù)的地址。就是我們在程序開發(fā)中自己命名的一個請求路徑,如果是新手的話建議按照我的來。不要改動,避免程序跑不起來。
第二個Token,自己想一個就行了,隨便填,你可以當(dāng)他為一個密碼。
第三個自己生成就可以了。
最后一個消息加解密方式選擇明文模式。配置到這里就結(jié)束了,我們先不要關(guān)閉這個頁面,等我們Python程序驗證部分寫好以后點擊頁面下面的提交就可以了。現(xiàn)在點會報錯的。
2.接口驗證部分代碼編寫查看官方文檔,當(dāng)我們點擊配置頁面的提交按鈕時,微信后臺會向我們配置的地址發(fā)送signature、timestamp、nonce、echostr四個信息,我們拿到這部分信息后通過哈希加密算法計算出(timestamp,nonce,token)的哈希值與微信發(fā)送的signature對比,如果相等則說明是微信后臺的請求,然后把echostr返回,就表示驗證成功。
這一步,我們使用三個庫,wechatpy-微信的Python SDK,falcon一個非常微小的Python Web框架,Waitress-一個Python WSGI服務(wù)器,當(dāng)然在Linux上可以使用gunicorn代替waitress。通過pip install wechatpy[pycrypto]和pip install falcon,pip install waitress安裝。代碼如下,只需要把配置界面的token替換到代碼里
import falcon from falcon import uri from wechatpy.utils import check_signature from wechatpy.exceptions import InvalidSignatureException class Connect(object): def on_get(self, req, resp): query_string = req.query_string query_list = query_string.split("&") b = {} for i in query_list: b[i.split("=")[0]] = i.split("=")[1] try: check_signature(token="這里填寫配置界面你輸入的token", signature=b["signature"], timestamp=b["timestamp"], nonce=b["nonce"]) resp.body = (b["echostr"]) except InvalidSignatureException: pass resp.status = falcon.HTTP_200 app = falcon.API() connect = Connect() app.add_route("/connect", connect)
代碼寫好以后,我們在命令行輸入 waitress-serve --port=80 connect:app在80端口啟動我們的程序。啟動后如下圖,代表啟動成功,這時候我們到微信的配置頁面點擊提交,會彈出提交成功消息框,代表我們成功接入微信
簡單說明以下上面代碼,on_get函數(shù)接收微信發(fā)來的get請求,并且通過query_string拿到微信發(fā)送的參數(shù),之后通過wechatpy的check_signature函數(shù)來校驗。校驗成功后把echostr返回給微信。
3. 發(fā)送文本信息給用戶接入成功后,就可以回復(fù)用戶的信息了。我們增加一個函數(shù)處理用戶發(fā)送的消息,整體代碼如下:
import falcon from wechatpy.utils import check_signature from wechatpy.exceptions import InvalidSignatureException from wechatpy import parse_message from wechatpy.replies import TextReply, ImageReply class Connect(object): def on_get(self, req, resp): query_string = req.query_string query_list = query_string.split("&") b = {} for i in query_list: b[i.split("=")[0]] = i.split("=")[1] try: check_signature(token="xxxxx", signature=b["signature"], timestamp=b["timestamp"], nonce=b["nonce"]) resp.body = (b["echostr"]) except InvalidSignatureException: pass resp.status = falcon.HTTP_200 def on_post(self, req, resp): xml = req.stream.read() msg = parse_message(xml) if msg.type == "text": reply = TextReply(content=msg.content, message=msg) xml = reply.render() resp.body = (xml) resp.status = falcon.HTTP_200 app = falcon.API() connect = Connect() app.add_route("/connect", connect)
我們導(dǎo)出了parse_message,TextReply,ImageReply函數(shù)。當(dāng)拿到用戶消息時,判斷是文本消息,就原樣返回給用戶?,F(xiàn)在我們啟動腳本后,向公眾號發(fā)送文本消息就會收到自動回復(fù)了。
4. 發(fā)送圖片信息給用戶我們簡單修改下on_post函數(shù),使其不僅能處理文本,也能處理圖片信息。完整代碼如下:
import falcon from wechatpy.utils import check_signature from wechatpy.exceptions import InvalidSignatureException from wechatpy import parse_message from wechatpy.replies import TextReply, ImageReply class Connect(object): def on_get(self, req, resp): query_string = req.query_string query_list = query_string.split("&") b = {} for i in query_list: b[i.split("=")[0]] = i.split("=")[1] try: check_signature(token="xxxxxxx", signature=b["signature"], timestamp=b["timestamp"], nonce=b["nonce"]) resp.body = (b["echostr"]) except InvalidSignatureException: pass resp.status = falcon.HTTP_200 def on_post(self, req, resp): xml = req.stream.read() msg = parse_message(xml) if msg.type == "text": reply = TextReply(content=msg.content, message=msg) xml = reply.render() resp.body = (xml) resp.status = falcon.HTTP_200 elif msg.type == "image": reply = ImageReply(media_id=msg.media_id, message=msg) xml = reply.render() resp.body = (xml) resp.status = falcon.HTTP_200 app = falcon.API() connect = Connect() app.add_route("/connect", connect)
我們在代碼中加入了圖片處理邏輯,如果是圖片類型的消息,則把圖片返回給用戶。我們把圖片發(fā)送給微信后臺后,會自動生成一個media_id,我們發(fā)送這個media_id就可以了。
效果圖 總結(jié)以上就是第一部分的內(nèi)容,我們首先做了接口認證,之后通過一個on_post函數(shù)處理了用戶發(fā)送的文本和圖片信息,不過目前就是原樣返回。
下一篇我們接入騰訊AI平臺,對照片進行人臉分析檢測之后再返回給用戶,不要走開哦。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/41851.html
摘要:由設(shè)計,作為編程語言的繼承者,于年首次發(fā)布。表達式表達式是編程語言中的語法實體,可以對其進行評估以確定其值。它是編程語言解釋和計算以產(chǎn)生值的常量變量函數(shù)和運算符的組合。它在年年年和年被評為年度編程語言,是唯一四次獲得該獎項的語言。 ...
摘要:寫在前面本周剛在項目中實現(xiàn)了微信第三方網(wǎng)站掃碼登錄。準備與注意事項微信公眾平臺跟微信開放平臺是兩個不同的平臺,別搞混了。參數(shù)在微信開放平臺中查看。 寫在前面 本周剛在項目中實現(xiàn)了微信第三方網(wǎng)站掃碼登錄。因為第一次寫相關(guān)項目,所以遇到了很多坑。所以寫這篇文章是希望像我之前那樣的小白也能從容的開發(fā),不要浪費無謂的時間,這篇文章盡量寫的詳細簡單。準備與注意事項 微信公眾平臺跟微信開放平臺是...
摘要:文章目錄前言爬取分析視頻教學(xué)成果展示福利入門到就業(yè)學(xué)習(xí)路線規(guī)劃小白快速入門爬蟲路線前言皮皮蝦一個沙雕而又有趣的憨憨少年,和大多數(shù)小伙伴們一樣喜歡聽歌游戲,當(dāng)然除此之外還有寫作的興趣,,日子還很長,讓我們一起加油努力叭話 ...
閱讀 2823·2021-10-08 10:04
閱讀 3284·2021-09-10 11:20
閱讀 534·2019-08-30 10:54
閱讀 3328·2019-08-29 17:25
閱讀 2310·2019-08-29 16:24
閱讀 895·2019-08-29 12:26
閱讀 1453·2019-08-23 18:35
閱讀 1944·2019-08-23 17:53