基于WeRoBot的微信公眾號(hào)開(kāi)發(fā)

公眾號(hào)的開(kāi)發(fā)說(shuō)難也不難,說(shuō)簡(jiǎn)單也不簡(jiǎn)單,但總體開(kāi)發(fā)成本:公眾號(hào) < 小程序 < App砸捏,屬于相對(duì)最容易也最快獲得回報(bào)的開(kāi)發(fā)方式了谬运。

這里介紹一種最快的方式,基于現(xiàn)有的框架快速實(shí)現(xiàn)公眾號(hào)后臺(tái)開(kāi)發(fā)垦藏,當(dāng)然前提是你已經(jīng)有了Python梆暖,Linux,Docker等基本功掂骏。

大致步驟

  1. 部署基于WeRobot的后端程序
  2. 公眾號(hào)后臺(tái)配置URL轰驳,Token等驗(yàn)證信息
image.png

所以流程并不復(fù)雜,注意上述的順序弟灼,一定要先部署级解,再配置公眾號(hào),因?yàn)楣娞?hào)后臺(tái)要驗(yàn)證Token信息(自定義的田绑,和你的服務(wù)器一致即可)

測(cè)試微信API的時(shí)候勤哗,由于驗(yàn)證都是在云端的,這非常不方便掩驱,有兩種方式可以解決:

  1. Frp內(nèi)網(wǎng)穿透
  2. 寶塔面板部署芒划,對(duì)于小白這個(gè)會(huì)更方便一些
  3. Docker部署

作者本人是用Docker Compose編排部署的,同樣比較快捷方便欧穴,不過(guò)不斷上傳重啟容器也非常耗時(shí)腊状,可以利用vscode的遠(yuǎn)程連接直接在云端編寫代碼并重啟容器。

如何重啟Docker Compose中的某一個(gè)容器呢苔可?

執(zhí)行docker-compose restart <service-name> 命令

sudo docker compose restart werobot

基于WeRoBot開(kāi)發(fā)微信后端

pip install werobot

建立一個(gè)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)

大功告成缴挖,一個(gè)最簡(jiǎn)單的微信公眾號(hào)后臺(tái)開(kāi)發(fā)就完成了。

image-1.png

當(dāng)用戶給你的公眾號(hào)發(fā)送任何消息的時(shí)候焚辅,你的公眾號(hào)都會(huì)發(fā)送Hello World文案映屋。

image-2.png

當(dāng)然了,如果你的公眾號(hào)只能回復(fù)Hello World同蜻,那肯定會(huì)被粉絲罵"神經(jīng)病啊"棚点,對(duì)不對(duì),我們真正想要的是一個(gè)具有交互能力的湾蔓,甚至是文字版的App瘫析,基于微信生態(tài)強(qiáng)大的API,實(shí)現(xiàn)這些并不是問(wèn)題默责。

不過(guò)在開(kāi)發(fā)過(guò)程中贬循,直接在線上環(huán)境調(diào)試是不太好的,因?yàn)橐恍┱{(diào)試上的BUG很容易被微信誤以為是攻擊桃序,倒霉一點(diǎn)就會(huì)被限制接口調(diào)用杖虾。

筆者本人在使用某位朋友的支付寶支付調(diào)試的時(shí)候,因?yàn)榫€上頻繁調(diào)試BUG媒熊,就不幸讓其支付寶商戶平臺(tái)停止運(yùn)營(yíng)了3天才恢復(fù)奇适!

所以坟比,一定要使用公眾平臺(tái)測(cè)試賬號(hào)配合微信開(kāi)發(fā)者工具來(lái)開(kāi)發(fā)公眾號(hào)相關(guān)的功能。

開(kāi)發(fā)者工具

image-3.png

微信給我們提供了現(xiàn)有的測(cè)試賬號(hào)嚷往,且測(cè)試賬號(hào)是擁有公眾號(hào)開(kāi)發(fā)的所有權(quán)限的葛账,用它!

image-4.png

測(cè)試賬號(hào)的權(quán)限非常多,因?yàn)閭€(gè)人的【訂閱號(hào)】權(quán)限相對(duì)較少皮仁,面對(duì)企業(yè)的【服務(wù)號(hào)】權(quán)限與沙箱差不多是一致的注竿。

image-5.png

重點(diǎn)關(guān)注圖中重要的信息,URL填寫你的服務(wù)器地址魂贬,Token填寫你的服務(wù)器設(shè)置的Token巩割,這個(gè)值在兩端保存一致即可。

繼續(xù)編寫服務(wù)端代碼

創(chuàng)建菜單

client = robot.client
client.create_menu({
    "button": [
        {
            "type": "click",
            "name": "今日推薦",
            "key": "KEY_TODAY_RECOMMEND"
        },
        {
            "type": "click",
            "name": "作者簡(jiǎn)介",
            "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è)置菜單的點(diǎn)擊事件:

@robot.key_click("KEY_TODAY_RECOMMEND")
def rec(message):
    return '你點(diǎn)擊了“今日推薦”按鈕'
image-6.png

注意:個(gè)人賬號(hào)沒(méi)有自定義菜單權(quán)限付燥,需要使用測(cè)試號(hào)或者企業(yè)號(hào)宣谈,否則報(bào)錯(cuò):48001: api unauthorized rid

根據(jù)用戶輸入回復(fù)對(duì)應(yīng)內(nèi)容

@robot.filter("講一個(gè)笑話")
def joke(message):
    # reply = TextReply(message=message, content="笑不活了")
    # data = ApiUtils.joke_data()
    return "讓我給你講一個(gè)笑話,這簡(jiǎn)直就是一個(gè)天大的笑話键科!"

發(fā)送圖文鏈接

@robot.filter("2")
def blog(message):
    reply = ArticlesReply(message=message)
    article = Article(
            title="我的博客", 
            description="我的個(gè)人博客",
            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 = "這里是你上傳圖片到微信后臺(tái)生成的media_id"
    # 返回圖片
    if media_id:
        reply = ImageReply(message=message, media_id=media_id)
        return reply
    else:
        return "圖片不存在闻丑!"

上傳臨時(shí)圖片

res = client.upload_media("image", open("qrcode.jpg", "rb"))

上傳永久多媒體文件。

media_json = client.upload_permanent_media("image", open("qrcode.jpg", "rb"))

被關(guān)注時(shí)候回復(fù)用戶消息

# 被關(guān)注
@robot.subscribe
def subscribe(message):
    return "謝謝您的關(guān)注勋颖!"

處理默認(rèn)消息

如果上面沒(méi)有可以處理的消息嗦嗡,那么最底部的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)注!"

主要的就是這些了饭玲,當(dāng)然還有一些API侥祭,比如授權(quán),支付等等茄厘,這些功能用小程序?qū)崿F(xiàn)會(huì)更好矮冬,有時(shí)間再寫小程序相關(guān)的開(kāi)發(fā)。實(shí)在太忙了次哈,公眾號(hào)以及其他平臺(tái)都斷更將近一年胎署,謝謝你們的支持!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末窑滞,一起剝皮案震驚了整個(gè)濱河市琼牧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哀卫,老刑警劉巖巨坊,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異聊训,居然都是意外死亡抱究,警方通過(guò)查閱死者的電腦和手機(jī)恢氯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門带斑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鼓寺,“玉大人,你說(shuō)我怎么就攤上這事勋磕÷韬颍” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵挂滓,是天一觀的道長(zhǎng)苦银。 經(jīng)常有香客問(wèn)我,道長(zhǎng)赶站,這世上最難降的妖魔是什么幔虏? 我笑而不...
    開(kāi)封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮贝椿,結(jié)果婚禮上想括,老公的妹妹穿的比我還像新娘。我一直安慰自己烙博,他們只是感情好瑟蜈,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著渣窜,像睡著了一般铺根。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乔宿,一...
    開(kāi)封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天位迂,我揣著相機(jī)與錄音,去河邊找鬼详瑞。 笑死囤官,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蛤虐。 我是一名探鬼主播党饮,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼驳庭!你這毒婦竟也來(lái)了刑顺?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤饲常,失蹤者是張志新(化名)和其女友劉穎蹲堂,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體贝淤,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡柒竞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了播聪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片朽基。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡布隔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出稼虎,到底是詐尸還是另有隱情衅檀,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布霎俩,位于F島的核電站哀军,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏打却。R本人自食惡果不足惜杉适,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望柳击。 院中可真熱鬧淘衙,春花似錦、人聲如沸腻暮。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)哭靖。三九已至具垫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間试幽,已是汗流浹背筝蚕。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铺坞,地道東北人起宽。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像济榨,于是被迫代替她去往敵國(guó)和親坯沪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容