摘要:一站式解決新手開(kāi)發(fā)微信公眾號(hào)遇到的所有問(wèn)題。這一步,我們使用三個(gè)庫(kù),微信的一個(gè)非常微小的框架,一個(gè)服務(wù)器,當(dāng)然在上可以使用代替。校驗(yàn)成功后把返回給微信。我們把圖片發(fā)送給微信后臺(tái)后,會(huì)自動(dòng)生成一個(gè)我們發(fā)送這個(gè)就可以了。
本文面向想通過(guò)Python學(xué)習(xí)公眾號(hào)開(kāi)發(fā)的同學(xué)。一站式解決新手開(kāi)發(fā)微信公眾號(hào)遇到的所有問(wèn)題。
為了防止我的文章被到處轉(zhuǎn)載,貼一下我的公眾號(hào)【智能制造社區(qū)】,歡迎大家關(guān)注。
github倉(cāng)庫(kù)地址https://github.com/injetlee/Python/tree/master/wechat
本篇文章首先實(shí)現(xiàn)與公眾號(hào)的對(duì)接,實(shí)現(xiàn)簡(jiǎn)單的回復(fù)文字、圖片內(nèi)容。下一篇會(huì)對(duì)接騰訊的AI平臺(tái),實(shí)現(xiàn)對(duì)照片的人臉檢測(cè)與分析,分析年齡、性別、表情、魅力值等。
準(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)容。
下面說(shuō)下需要填的內(nèi)容,第一個(gè)URL要填的就是我們的服務(wù)地址,這個(gè)地址必須是外網(wǎng)地址并且是80端口。我們要本地開(kāi)發(fā)時(shí)可以用 ngrok 解決。在ngrok.com官網(wǎng)下載。解壓后就是一個(gè)exe程序。在當(dāng)前目錄下輸入. grok.exe http 80 即可啟動(dòng)。啟動(dòng)后如下圖所示,圖片中網(wǎng)址就是我們需要的
然后我們復(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è)面下面的提交就可以了。現(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替換到代碼里
</>復(fù)制代碼
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ì)彈出提交成功消息框,代表我們成功接入微信
簡(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ā)送的消息,整體代碼如下:
</>復(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)在我們啟動(dòng)腳本后,向公眾號(hào)發(fā)送文本消息就會(huì)收到自動(dòng)回復(fù)了。
4. 發(fā)送圖片信息給用戶我們簡(jiǎn)單修改下on_post函數(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="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就可以了。
效果圖 總結(jié)以上就是第一部分的內(nèi)容,我們首先做了接口認(rèn)證,之后通過(guò)一個(gè)on_post函數(shù)處理了用戶發(fā)送的文本和圖片信息,不過(guò)目前就是原樣返回。
下一篇我們接入騰訊AI平臺(tái),對(duì)照片進(jìn)行人臉?lè)治鰴z測(cè)之后再返回給用戶,不要走開(kāi)哦。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/41851.html
摘要:由設(shè)計(jì),作為編程語(yǔ)言的繼承者,于年首次發(fā)布。表達(dá)式表達(dá)式是編程語(yǔ)言中的語(yǔ)法實(shí)體,可以對(duì)其進(jìn)行評(píng)估以確定其值。它是編程語(yǔ)言解釋和計(jì)算以產(chǎn)生值的常量變量函數(shù)和運(yùn)算符的組合。它在年年年和年被評(píng)為年度編程語(yǔ)言,是唯一四次獲得該獎(jiǎng)項(xiàng)的語(yǔ)言。 ...
摘要:寫(xiě)在前面本周剛在項(xiàng)目中實(shí)現(xiàn)了微信第三方網(wǎng)站掃碼登錄。準(zhǔn)備與注意事項(xiàng)微信公眾平臺(tái)跟微信開(kāi)放平臺(tái)是兩個(gè)不同的平臺(tái),別搞混了。參數(shù)在微信開(kāi)放平臺(tái)中查看。 寫(xiě)在前面 本周剛在項(xiàng)目中實(shí)現(xiàn)了微信第三方網(wǎng)站掃碼登錄。因?yàn)榈谝淮螌?xiě)相關(guān)項(xiàng)目,所以遇到了很多坑。所以寫(xiě)這篇文章是希望像我之前那樣的小白也能從容的開(kāi)發(fā),不要浪費(fèi)無(wú)謂的時(shí)間,這篇文章盡量寫(xiě)的詳細(xì)簡(jiǎn)單。準(zhǔn)備與注意事項(xiàng) 微信公眾平臺(tái)跟微信開(kāi)放平臺(tái)是...
摘要:文章目錄前言爬取分析視頻教學(xué)成果展示福利入門(mén)到就業(yè)學(xué)習(xí)路線規(guī)劃小白快速入門(mén)爬蟲(chóng)路線前言皮皮蝦一個(gè)沙雕而又有趣的憨憨少年,和大多數(shù)小伙伴們一樣喜歡聽(tīng)歌游戲,當(dāng)然除此之外還有寫(xiě)作的興趣,,日子還很長(zhǎng),讓我們一起加油努力叭話 ...
閱讀 2825·2021-10-08 10:04
閱讀 3285·2021-09-10 11:20
閱讀 536·2019-08-30 10:54
閱讀 3330·2019-08-29 17:25
閱讀 2314·2019-08-29 16:24
閱讀 896·2019-08-29 12:26
閱讀 1454·2019-08-23 18:35
閱讀 1945·2019-08-23 17:53