創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!
本篇文章給大家分享的是有關(guān)Python開發(fā)微信公眾號,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
準(zhǔn)備工作
首先要注冊一個(gè)公眾號,這個(gè)很簡單,我們到微信公眾平臺注冊就可以了,選擇個(gè)人訂閱號就可以。但是如果可以認(rèn)證的,我建議選擇認(rèn)證訂閱號,因?yàn)槲凑J(rèn)證的號很多功能權(quán)限都沒有。好了,話不多說進(jìn)入正題。
1. 配置公眾號
打開公眾號,在 開發(fā)->基本配置 頁面填寫內(nèi)容。
下面說下需要填的內(nèi)容,第一個(gè)URL要填的就是我們的服務(wù)地址,這個(gè)地址必須是外網(wǎng)地址并且是80端口。我們要本地開發(fā)時(shí)可以用 ngrok 解決。在ngrok.com官網(wǎng)下載。解壓后就是一個(gè)exe程序。在當(dāng)前目錄下輸入.\ngrok.exe http 80即可啟動。啟動后如下圖所示,圖片中網(wǎng)址就是我們需要的。
·然后我們復(fù)制紅色方框里面的地址到微信的URL輸入框中,比如我的就輸入http://c9b15df5.ngrok.io/connect
后面這個(gè)connect是我自己的服務(wù)的地址。就是我們在程序開發(fā)中自己命名的一個(gè)請求路徑,如果是新手的話建議按照我的來。不要改 動,避免程序跑不起來。
·第二個(gè)Token,自己想一個(gè)就行了,隨便填,你可以當(dāng)他為一個(gè)密碼。
·第三個(gè)自己生成就可以了。
·最后一個(gè)消息加解密方式選擇明文模式。配置到這里就結(jié)束了,我們先不要關(guān)閉這個(gè)頁面,等我們Python程序驗(yàn)證部分寫好以后點(diǎn)擊頁 面下面的提交就可以了。現(xiàn)在點(diǎn)會報(bào)錯(cuò)的。
2.接口驗(yàn)證部分代碼編寫
查看官方文檔,當(dāng)我們點(diǎn)擊配置頁面的提交按鈕時(shí),微信后臺會向我們配置的地址發(fā)送signature、timestamp、nonce、echostr四個(gè)信息,我們拿到這部分信息后通過哈希加密算法計(jì)算出(timestamp,nonce,token)的哈希值與微信發(fā)送的signature對比,如果相等則說明是微信后臺的請求,然后把echostr返回,就表示驗(yàn)證成功。
這一步,我們使用三個(gè)庫,wechatpy-微信的Python SDK,falcon一個(gè)非常微小的Python Web框架,Waitress-一個(gè)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端口啟動我們的程序。啟動后如下圖,代表啟動成功,這時(shí)候我們到微信的配置頁面點(diǎn)擊提交,會彈出提交成功消息框,代表我們成功接入微信。
簡單說明以下上面代碼,on_get函數(shù)接收微信發(fā)來的get請求,并且通過query_string拿到微信發(fā)送的參數(shù),之后通過wechatpy的check_signature函數(shù)來校驗(yàn)。校驗(yàn)成功后把echostr返回給微信。
3.發(fā)送文本信息給用戶
接入成功后,就可以回復(fù)用戶的信息了。我們增加一個(gè)函數(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)拿到用戶消息時(shí),判斷是文本消息,就原樣返回給用戶。現(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ā)送給微信后臺后,會自動生成一個(gè)media_id,我們發(fā)送這個(gè)media_id就可以了。
效果圖:
以上就是Python開發(fā)微信公眾號,小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。
文章題目:Python開發(fā)微信公眾號-創(chuàng)新互聯(lián)
網(wǎng)頁路徑:http://www.chinadenli.net/article36/doessg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、企業(yè)建站、小程序開發(fā)、網(wǎng)站制作、服務(wù)器托管、動態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容