溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python開(kāi)發(fā)微信公眾號(hào)

發(fā)布時(shí)間:2020-09-24 15:33:32 來(lái)源:億速云 閱讀:227 作者:Leah 欄目:編程語(yǔ)言

本篇文章給大家分享的是有關(guān)Python開(kāi)發(fā)微信公眾號(hào),小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

準(zhǔn)備工作

首先要注冊(cè)一個(gè)公眾號(hào),這個(gè)很簡(jiǎn)單,我們到微信公眾平臺(tái)注冊(cè)就可以了,選擇個(gè)人訂閱號(hào)就可以。但是如果可以認(rèn)證的,我建議選擇認(rèn)證訂閱號(hào),因?yàn)槲凑J(rèn)證的號(hào)很多功能權(quán)限都沒(méi)有。好了,話不多說(shuō)進(jìn)入正題。

1. 配置公眾號(hào)

打開(kāi)公眾號(hào),在 開(kāi)發(fā)->基本配置 頁(yè)面填寫(xiě)內(nèi)容。

Python開(kāi)發(fā)微信公眾號(hào)

下面說(shuō)下需要填的內(nèi)容,第一個(gè)URL要填的就是我們的服務(wù)地址,這個(gè)地址必須是外網(wǎng)地址并且是80端口。我們要本地開(kāi)發(fā)時(shí)可以用 ngrok 解決。在ngrok.com官網(wǎng)下載。解壓后就是一個(gè)exe程序。在當(dāng)前目錄下輸入.\ngrok.exe http 80即可啟動(dòng)。啟動(dòng)后如下圖所示,圖片中網(wǎng)址就是我們需要的。

Python開(kāi)發(fā)微信公眾號(hào)

·然后我們復(fù)制紅色方框里面的地址到微信的URL輸入框中,比如我的就輸入http://c9b15df5.ngrok.io/connect

 后面這個(gè)connect是我自己的服務(wù)的地址。就是我們?cè)诔绦蜷_(kāi)發(fā)中自己命名的一個(gè)請(qǐng)求路徑,如果是新手的話建議按照我的來(lái)。不要改      動(dòng),避免程序跑不起來(lái)。

·第二個(gè)Token,自己想一個(gè)就行了,隨便填,你可以當(dāng)他為一個(gè)密碼。

·第三個(gè)自己生成就可以了。

·最后一個(gè)消息加解密方式選擇明文模式。配置到這里就結(jié)束了,我們先不要關(guān)閉這個(gè)頁(yè)面,等我們Python程序驗(yàn)證部分寫(xiě)好以后點(diǎn)擊頁(yè)    面下面的提交就可以了?,F(xiàn)在點(diǎn)會(huì)報(bào)錯(cuò)的。

2.接口驗(yàn)證部分代碼編寫(xiě)

查看官方文檔,當(dāng)我們點(diǎn)擊配置頁(yè)面的提交按鈕時(shí),微信后臺(tái)會(huì)向我們配置的地址發(fā)送signature、timestamp、nonce、echostr四個(gè)信息,我們拿到這部分信息后通過(guò)哈希加密算法計(jì)算出(timestamp,nonce,token)的哈希值與微信發(fā)送的signature對(duì)比,如果相等則說(shuō)明是微信后臺(tái)的請(qǐng)求,然后把echostr返回,就表示驗(yàn)證成功。

這一步,我們使用三個(gè)庫(kù),wechatpy-微信的Python SDK,falcon一個(gè)非常微小的Python Web框架,Waitress-一個(gè)Python WSGI服務(wù)器,當(dāng)然在Linux上可以使用gunicorn代替waitress。通過(guò)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='這里填寫(xiě)配置界面你輸入的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)

代碼寫(xiě)好以后,我們?cè)诿钚休斎?waitress-serve --port=80 connect:app在80端口啟動(dòng)我們的程序。啟動(dòng)后如下圖,代表啟動(dòng)成功,這時(shí)候我們到微信的配置頁(yè)面點(diǎn)擊提交,會(huì)彈出提交成功消息框,代表我們成功接入微信。

Python開(kāi)發(fā)微信公眾號(hào)

簡(jiǎn)單說(shuō)明以下上面代碼,on_get函數(shù)接收微信發(fā)來(lái)的get請(qǐng)求,并且通過(guò)query_string拿到微信發(fā)送的參數(shù),之后通過(guò)wechatpy的check_signature函數(shù)來(lái)校驗(yàn)。校驗(yàn)成功后把echostr返回給微信。

3.發(fā)送文本信息給用戶

接入成功后,就可以回復(fù)用戶的信息了。我們?cè)黾右粋€(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í),判斷是文本消息,就原樣返回給用戶?,F(xiàn)在我們啟動(dòng)腳本后,向公眾號(hào)發(fā)送文本消息就會(huì)收到自動(dòng)回復(fù)了。

4. 發(fā)送圖片信息給用戶

我們簡(jiǎn)單修改下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)

我們?cè)诖a中加入了圖片處理邏輯,如果是圖片類(lèi)型的消息,則把圖片返回給用戶。我們把圖片發(fā)送給微信后臺(tái)后,會(huì)自動(dòng)生成一個(gè)media_id,我們發(fā)送這個(gè)media_id就可以了。

效果圖:

Python開(kāi)發(fā)微信公眾號(hào)

以上就是Python開(kāi)發(fā)微信公眾號(hào),小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI