基于WeRoBot的微信公眾號開發(fā)

公眾號的開發(fā)說難也不難,說簡單也不簡單,但總體開發(fā)成本:公眾號 < 小程序 < App,屬于相對最容易也最快獲得回報的開發(fā)方式了。

這里介紹一種最快的方式,基于現(xiàn)有的框架快速實現(xiàn)公眾號后臺開發(fā),當然前提是你已經(jīng)有了Python,Linux,Docker等基本功。

大致步驟

  1. 部署基于WeRobot的后端程序
  2. 公眾號后臺配置URL,Token等驗證信息
image.png

所以流程并不復雜,注意上述的順序,一定要先部署,再配置公眾號,因為公眾號后臺要驗證Token信息(自定義的,和你的服務(wù)器一致即可)

測試微信API的時候,由于驗證都是在云端的,這非常不方便,有兩種方式可以解決:

  1. Frp內(nèi)網(wǎng)穿透
  2. 寶塔面板部署,對于小白這個會更方便一些
  3. 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ā)就完成了。

image-1.png

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

image-2.png

當然了,如果你的公眾號只能回復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ā)者工具

image-3.png

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

image-4.png

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

image-5.png

重點關(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 '你點擊了“今日推薦”按鈕'
image-6.png

注意:個人賬號沒有自定義菜單權(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ā)。實在太忙了,公眾號以及其他平臺都斷更將近一年,謝謝你們的支持!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容