python開發(fā)微信服務(wù)號消息推送示例
前言
今天聊聊微信服務(wù)號的消息推送功能,因為最近剛好有這么個需求需要通過微信給用戶推送消息,個人號或者企業(yè)個人號沒去詳細研究,看了個大概是需要先登錄在進行發(fā)消息的功能,略麻煩,過。剛好有個認(rèn)證的服務(wù)號,直接上手
消息推送目前分為兩種,一種是模板消息,一種是訂閱通知。兩種都體驗過,訂閱通知是比較坑的,因為他是需要用戶點擊訂閱一次才能發(fā)送一次,對我沒啥用(多用于那種上課通知開獎通知啥的)
我的需求是在用戶有需要的,然后可以每天推送一個匯率通知,經(jīng)過測試之后模板消息可以達到這個功能,但是缺點是無法自定義標(biāo)題和關(guān)鍵詞,如果需要自定義的話得跟官方申請讓他們審核過后才允許,下圖是當(dāng)時被駁回的審核通知。
既然無法自定義,只能自己去找個相近的模板了,但是還要吐槽的是,微信關(guān)于篩選模板這一塊做得也不盡人意,只能一頁一頁翻過去,或者根據(jù)標(biāo)題搜索,但是相關(guān)行業(yè)的又沒有相應(yīng)的,最后勉強找個了這樣的
那么最后完成的效果是什么樣的呢?圖片
正文
整體思路蠻清晰,數(shù)據(jù)都通過相應(yīng)的 API 傳送,根據(jù)官方的相關(guān)文檔介紹
通過服務(wù)號的 APPID 和 APPSECRET 獲取 Access token
通過 Access token 去使用對應(yīng)模板,填入想要發(fā)送的信息,然后發(fā)送給對應(yīng)的用戶
分步驟介紹圖片
# 獲取access_token def get_access_token(): ## 因為我是從文件中讀取的,你們嫌麻煩可以直接把兩個填到鏈接的大括號內(nèi),并刪除后面的.format(xxx) # appId app_id = config["app_id"] # appSecret app_secret = config["app_secret"] post_url = ("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={}&secret={}" .format(app_id, app_secret)) ## 嘗試使用get獲取并轉(zhuǎn)換成json,同時取其中的值 try: access_token = get(post_url).json()['access_token'] except KeyError: print("獲取access_token失敗,請檢查app_id和app_secret是否正確") os.system("pause") sys.exit(1) print(access_token) return access_toke
## 發(fā)送消息 def send_message(to_user, access_token, money): # 這個url是賦值包含access_token的鏈接,方便后續(xù)post用 url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={}".format(access_token) now = datetime.datetime.now() date = now.strftime("%m月%d日") # 這里是傳輸需要發(fā)送的數(shù)據(jù) data = { "touser": to_user, "template_id": config["template_id"], # 這個url是點擊詳情之后的跳轉(zhuǎn),這里跳轉(zhuǎn)到百度匯率歷史 "url": "https://gushitong.baidu.com/foreign/global-CNYTWD", "data": { # 其中thing15這些是按照模板詳情中的參數(shù)來的 "thing15": { "value": "匯率通知" }, "thing16": { "value": "1 CNY = {} TWD".format(money) }, "time9": { "value": date }, "thing2": { "value": "點擊詳情查看歷史匯率" } } } # 這里就是推送消息了 response = post(url, json=data).json() if response["errcode"] == 40037: print("推送消息失敗,請檢查模板id是否正確") elif response["errcode"] == 40036: print("推送消息失敗,請檢查模板id是否為空") elif response["errcode"] == 40003: print("推送消息失敗,請檢查微信號是否正確") elif response["errcode"] == 0: print("推送消息成功") else: print(response)
整體思路是這個樣子,接下來我只需要實現(xiàn)它定時推送,或者后續(xù)增加的低于某個值推送等,不過這是后續(xù)增加的其它需求了,不過目前有一個問題就是,只能自己加要通知哪些用戶,其實應(yīng)該是有個頁面讓用戶自己選擇是否需要這個推送的。不過這方面感覺還得搭個平臺或者簡單的記錄,略麻煩,暫過。
后記
功能雖然簡單,不過也算是通了一條路,后續(xù)再此基礎(chǔ)上可以增加更多功能,僅以此記錄,學(xué)無止境。
參考 https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html
以上就是python開發(fā)微信服務(wù)號消息推送示例的詳細內(nèi)容,更多關(guān)于python微信服務(wù)號消息推送的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python中分?jǐn)?shù)的相關(guān)使用教程
這篇文章主要介紹了Python中分?jǐn)?shù)的相關(guān)使用教程,主要涉及分?jǐn)?shù)的計算、約分等簡單操作,是Python學(xué)習(xí)過程當(dāng)中的基礎(chǔ),需要的朋友可以參考下2015-03-03把JSON數(shù)據(jù)格式轉(zhuǎn)換為Python的類對象方法詳解(兩種方法)
本文通過兩種方法給大家介紹了把JSON數(shù)據(jù)格式轉(zhuǎn)換為Python的類對象,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下2019-06-06Python內(nèi)置的字符串處理函數(shù)詳細整理(覆蓋日常所用)
Python內(nèi)置的字符串處理函數(shù)整理,有字母處理、格式化相關(guān)、字符串搜索相關(guān)、字符串替換相關(guān)等等2014-08-08python 不關(guān)閉控制臺的實現(xiàn)方法
在win32下,雙擊python程序會打開dos窗口,但是執(zhí)行完畢后就會關(guān)閉,看不到輸出的結(jié)果2011-10-10對Python中的條件判斷、循環(huán)以及循環(huán)的終止方法詳解
今天小編就為大家分享一篇對Python中的條件判斷、循環(huán)以及循環(huán)的終止方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-02-02python如何為創(chuàng)建大量實例節(jié)省內(nèi)存
這篇文章主要為大家詳細介紹了python如何為創(chuàng)建大量實例節(jié)省內(nèi)存,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-03-03