如果公眾號(hào)只是用來發(fā)文章就太無聊了,人生就在于折騰,比如說給公眾號(hào)配上關(guān)鍵詞回復(fù)、或者是機(jī)器人。接下來我們就開始折騰吧。
服務(wù)器選擇為安裝apache的,避免80端口被占用,無法使用nginx的情況。好吧,其實(shí)是為了省事~
第一步,我們要先安裝nginx,讓ip指向flask的鏈接端口,安裝完成之后,配置nginx.conf ,將80端口用nginx轉(zhuǎn)發(fā)到flask服務(wù)器端口
listen 80;
server_name 公網(wǎng)ip;
location / {
# root html;
# index index.html index.htm;
proxy_pass_header Server;
proxy_redirect off;
proxy_pass http://127.0.0.1:5000;
}
第二步,安裝flask pip3 install flask ,下面flask文件代碼 用于令牌token的校驗(yàn)
# -*- coding:utf-8 -*-
from flask import Flask
from flask import request
import hashlib
app = Flask(__name__)
app.debug = True
@app.route('/mp',methods=['GET','POST'])
def wechat():
if request.method == 'GET':
#這里改寫你在微信公眾平臺(tái)里輸入的token
token = 'yourtoken'
#獲取輸入?yún)?shù)
data = request.args
signature = data.get('signature','')
timestamp = data.get('timestamp','')
nonce = data.get('nonce','')
echostr = data.get('echostr','')
#字典排序
list = [token, timestamp, nonce]
list.sort()
s = list[0] + list[1] + list[2]
#sha1加密算法
hascode = hashlib.sha1(s.encode('utf-8')).hexdigest()
#如果是來自微信的請(qǐng)求,則回復(fù)echostr
if hascode == signature:
return echostr
else:
return ""
if __name__ == '__main__':
app.run()
第三步,先看下微信公眾號(hào)后臺(tái)是咋樣設(shè)置的,
?、?服務(wù)器地址 --> http://公網(wǎng)ip/mp ,與flask路由設(shè)置一致
?、?token --> 自己設(shè)定,與flask中發(fā)送的token一致
?、?消息加密 --> 隨機(jī)生成
如果你對(duì)微信token的校驗(yàn)機(jī)制有興趣,可以查一下微信公眾號(hào)文檔
第四步點(diǎn)擊提交,如果顯示成功則配置完成了 flask服務(wù)器就可以關(guān)閉了,到此即完成了開頭難的部分,接下來就是使用werobot這個(gè)框架了,使用 pip install werobot 進(jìn)行安裝
微信公眾號(hào)內(nèi)發(fā)送信息,所有的消息自動(dòng)回復(fù) Hello World!
import werobot
robot = werobot.WeRoBot(token='namejaho')
@robot.handler
def echo(message):
return 'Hello World!'
robot.config['HOST'] = '0.0.0.0'
robot.config['PORT'] = 80
robot.run()
微信公眾號(hào)已經(jīng)接入服務(wù)器,現(xiàn)在想通過 werobot 實(shí)現(xiàn)公眾號(hào)的控制,如添加回復(fù)、關(guān)鍵詞回復(fù)、自定義菜單(坑)等
需求已經(jīng)有了,現(xiàn)在想想如何實(shí)現(xiàn),werobot框架的使用很簡單,幾行代碼就可以實(shí)現(xiàn)自動(dòng)回復(fù)功能,通過查閱文檔可知,自定義菜單代碼也不多,下面對(duì)其進(jìn)行簡單封裝
from werobot import WeRoBot
robot = WeRoBot()
robot.config["APP_ID"] = "APP_ID"
robot.config["APP_SECRET"] = "APP_SECRET"
class Wechat(object):
def __init__(self):
#self.robot = WeRoBot(token='namejaho')
self.client = robot.client
def create_menu(self,menu,key):
self.client.create_menu({
"button":[{
"type": "click",
"name": menu,
"key": key
}]
})
@robot.key_click("author")
def handler(msg):
return '歡迎添加我微信:***'
def run(self):
self.create_menu('聯(lián)系我','author')
robot.run()
wechat = Wechat()
wechat.run()
接下來跑下代碼,不出意外的話,你也會(huì)報(bào) 48001: api unauthorized hint 這個(gè)錯(cuò)誤,這是因?yàn)槲⑿殴娞?hào)有個(gè)接口權(quán)限,對(duì)個(gè)人主體賬號(hào)限制了很多,如果想開通權(quán)限,只能通過企業(yè)號(hào)或者服務(wù)號(hào)了
自定義菜單只能以后再想辦法,接下來是關(guān)注自動(dòng)回復(fù)與關(guān)鍵詞回復(fù),這些操作可以通過 handler 解決
# 關(guān)注自動(dòng)回復(fù)
import werobot
robot = werobot.WeRoBot(token='token')
@robot.subscribe
def subscribe(message):
return 'Hello My Friend!'
robot.config['HOST'] = '0.0.0.0'
robot.config['PORT'] = 80
robot.run()
PS:只要你啟用了服務(wù)器配置,你公眾號(hào)就不能使用原來的自定義菜單和自動(dòng)回復(fù)了,兩者是互斥的。
可能您還想看