公眾號的開發(fā)說難也不難,說簡單也不簡單,但總體開發(fā)成本:公眾號 < 小程序 < App,屬于相對最容易也最快獲得回報的開發(fā)方式了。
這里介紹一種最快的方式,基于現(xiàn)有的框架快速實現(xiàn)公眾號后臺開發(fā),當然前提是你已經(jīng)有了Python,Linux,Docker等基本功。
大致步驟
- 部署基于WeRobot的后端程序
- 公眾號后臺配置URL,Token等驗證信息

所以流程并不復雜,注意上述的順序,一定要先部署,再配置公眾號,因為公眾號后臺要驗證Token信息(自定義的,和你的服務(wù)器一致即可)
測試微信API的時候,由于驗證都是在云端的,這非常不方便,有兩種方式可以解決:
- Frp內(nèi)網(wǎng)穿透
- 寶塔面板部署,對于小白這個會更方便一些
- Docker部署
作者本人是用Docker Compose編排部署的,同樣比較快捷方便,不過不斷上傳重啟容器也非常耗時,可以利用vscode的遠程連接直接在云端編寫代碼并重啟容器。
如何重啟Docker Compose中的某一個容器呢?
執(zhí)行docker-compose restart <service-name> 命令
sudo docker compose restart werobot
基于WeRoBot開發(fā)微信后端
pip install werobot
建立一個main.py
import werobot
robot = werobot.WeRoBot(token='alien_wx_token')
@robot.text
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
robot.run(host="0.0.0.0", port=8080)
大功告成,一個最簡單的微信公眾號后臺開發(fā)就完成了。

當用戶給你的公眾號發(fā)送任何消息的時候,你的公眾號都會發(fā)送Hello World文案。

當然了,如果你的公眾號只能回復Hello World,那肯定會被粉絲罵"神經(jīng)病啊",對不對,我們真正想要的是一個具有交互能力的,甚至是文字版的App,基于微信生態(tài)強大的API,實現(xiàn)這些并不是問題。
不過在開發(fā)過程中,直接在線上環(huán)境調(diào)試是不太好的,因為一些調(diào)試上的BUG很容易被微信誤以為是攻擊,倒霉一點就會被限制接口調(diào)用。
筆者本人在使用某位朋友的支付寶支付調(diào)試的時候,因為線上頻繁調(diào)試BUG,就不幸讓其支付寶商戶平臺停止運營了3天才恢復!
所以,一定要使用公眾平臺測試賬號配合微信開發(fā)者工具來開發(fā)公眾號相關(guān)的功能。
開發(fā)者工具

微信給我們提供了現(xiàn)有的測試賬號,且測試賬號是擁有公眾號開發(fā)的所有權(quán)限的,用它!

測試賬號的權(quán)限非常多,因為個人的【訂閱號】權(quán)限相對較少,面對企業(yè)的【服務(wù)號】權(quán)限與沙箱差不多是一致的。

重點關(guān)注圖中重要的信息,URL填寫你的服務(wù)器地址,Token填寫你的服務(wù)器設(shè)置的Token,這個值在兩端保存一致即可。
繼續(xù)編寫服務(wù)端代碼
創(chuàng)建菜單
client = robot.client
client.create_menu({
"button": [
{
"type": "click",
"name": "今日推薦",
"key": "KEY_TODAY_RECOMMEND"
},
{
"type": "click",
"name": "作者簡介",
"key": "KEY_ABOUT_ME"
},
{
"name": "菜單",
"sub_button": [
{
"type": "view",
"name": "搜索",
"url": "http://www.soso.com/"
},
{
"type": "view",
"name": "視頻",
"url": "http://v.qq.com/"
},
{
"type": "click",
"name": "贊一下我們",
"key": "KEY_GOOD"
}
]
}
]
})
設(shè)置菜單的點擊事件:
@robot.key_click("KEY_TODAY_RECOMMEND")
def rec(message):
return '你點擊了“今日推薦”按鈕'

注意:個人賬號沒有自定義菜單權(quán)限,需要使用測試號或者企業(yè)號,否則報錯:
48001: api unauthorized rid
根據(jù)用戶輸入回復對應(yīng)內(nèi)容
@robot.filter("講一個笑話")
def joke(message):
# reply = TextReply(message=message, content="笑不活了")
# data = ApiUtils.joke_data()
return "讓我給你講一個笑話,這簡直就是一個天大的笑話!"
發(fā)送圖文鏈接
@robot.filter("2")
def blog(message):
reply = ArticlesReply(message=message)
article = Article(
title="我的博客",
description="我的個人博客",
img="https://12345.com/0.png",
url="https://www.12345.com/u/79a88a044955"
)
reply.add_article(article)
return reply
發(fā)送圖片
@robot.filter("3")
def send_image(message):
media_id = "這里是你上傳圖片到微信后臺生成的media_id"
# 返回圖片
if media_id:
reply = ImageReply(message=message, media_id=media_id)
return reply
else:
return "圖片不存在!"
上傳臨時圖片
res = client.upload_media("image", open("qrcode.jpg", "rb"))
上傳永久多媒體文件。
media_json = client.upload_permanent_media("image", open("qrcode.jpg", "rb"))
被關(guān)注時候回復用戶消息
# 被關(guān)注
@robot.subscribe
def subscribe(message):
return "謝謝您的關(guān)注!"
處理默認消息
如果上面沒有可以處理的消息,那么最底部的handler將被觸發(fā):
@robot.text
def handle_other(message):
if message.content == "消息1":
return f'執(zhí)行:{message.content}'
if message.content == "消息2":
return f'執(zhí)行:{message.content}'
else:
return "謝謝你的關(guān)注!"
主要的就是這些了,當然還有一些API,比如授權(quán),支付等等,這些功能用小程序?qū)崿F(xiàn)會更好,有時間再寫小程序相關(guān)的開發(fā)。實在太忙了,公眾號以及其他平臺都斷更將近一年,謝謝你們的支持!