django 微信公衆號開發 - 給用戶主動推送消息(發送模板消息,python公衆號開發)

介紹

給微信公衆號用戶主動推送消息指的是發送模板消息。能夠隨時給用戶發送提醒。功能很是豐富,好比提醒用戶特定事件(該付費了,商品降價,任務執行成功,遇到錯誤等等)。html

不只能夠向用戶發送文字消息,還能夠實現用戶點擊後跳轉指定網頁或小程序。python

限制

可是該功能也受到不少限制。模板消息顧名思義,只能根據模板發送消息,模板能夠從模板庫選擇,也能夠本身建立,可是必須經過審覈才能使用。並且只有微信公衆號可使用模板消息,且要經過微信認證(目前的條件是必需要有營業執照才能註冊公衆號,我的註冊的是訂閱號,沒法經過微信認證)django

準備步驟

  1. 經過微信認證
  2. 另外要發送消息,先要綁定用戶 openid,具體操做請間我前一篇文章:django 微信公衆號開發 - 獲取受權 綁定用戶微信 openid

官方文檔

官方文檔寫的比較複雜,並且沒有示例代碼。json

微信模板消息官方文檔:https://developers.weixin.qq....小程序

添加模板

image.png

這時候須要記下模板 idapi

image.png

獲取 access token

接口詳情

https請求方式: GET https://api.weixin.qq.com/cgi...

參數說明微信

參數 是否必須 說明
grant_type 獲取access_token填寫client_credential
appid 第三方用戶惟一憑證
secret 第三方用戶惟一憑證密鑰,即appsecret

返回說明app

正常狀況下,微信會返回下述JSON數據包給公衆號:post

{"access_token":"ACCESS_TOKEN","expires_in":7200}

代碼

exp_time = 0
access_token = ''
def get_access_token():
    global exp_time, access_token
    if time.time() > exp_time:
        r = requests.get('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET')
        d = json.loads(r.text)
        access_token = d['access_token']
        exp_time = time.time() + d['expires_in'] - 10  # 減一點防止快到時間的時候已經失效了
    return access_token

python 獲取微信公衆號 access token字體

調用接口,發送模板消息

接口詳情

http請求方式: POST https://api.weixin.qq.com/cgi...

POST數聽說明

POST數據示例以下:

{
           "touser":"OPENID",
           "template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
           "url":"http://weixin.qq.com/download",  
           "miniprogram":{
             "appid":"xiaochengxuappid12345",
             "pagepath":"index?foo=bar"
           },          
           "data":{
                   "first": {
                       "value":"恭喜你購買成功!",
                       "color":"#173177"
                   },
                   "keyword1":{
                       "value":"巧克力",
                       "color":"#173177"
                   },
                   "keyword2": {
                       "value":"39.8元",
                       "color":"#173177"
                   },
                   "keyword3": {
                       "value":"2014年9月22日",
                       "color":"#173177"
                   },
                   "remark":{
                       "value":"歡迎再次購買!",
                       "color":"#173177"
                   }
           }
       }

參數說明

參數 是否必填 說明
touser 接收者openid
template_id 模板ID
url 模板跳轉連接(海外賬號沒有跳轉能力)
miniprogram 跳小程序所需數據,不需跳小程序可不用傳該數據
appid 所需跳轉到的小程序appid(該小程序appid必須與發模板消息的公衆號是綁定關聯關係,暫不支持小遊戲)
pagepath 所需跳轉到小程序的具體頁面路徑,支持帶參數,(示例index?foo=bar),要求該小程序已發佈,暫不支持小遊戲
data 模板數據
color 模板內容字體顏色,不填默認爲黑色

注:url和miniprogram都是非必填字段,若都不傳則模板無跳轉;若都傳,會優先跳轉至小程序。開發者可根據實際須要選擇其中一種跳轉方式便可。當用戶的微信客戶端版本不支持跳小程序時,將會跳轉至url。

返回碼說明

在調用模板消息接口後,會返回JSON數據包。正常時的返回JSON數據包示例:

{
    "errcode":0,
     "errmsg":"ok",
     "msgid":200228332
  }

代碼

def send_msg(idx):
    users = UserProfile.objects.filter(school=request.user.userpro  file.school, user_type='工做人員',  vacation_manage=True)
    data =  {
       "touser":"OPENID",
       "template_id":"xxxxxxxxx",
       "url":"https://xxxx.com/view/%d/" % idx,
       "data":{
               "first": {
                   "value": "",
                   "color": "#173177"
               },
               "keyword1":{
                   "value": '',
                   "color":"#173177"
               },
               "keyword2": {
                   "value": data,
                   "color":"#173177"
               },
               "keyword3": {
                   "value": '',
                   "color":"#173177"
               },
               "remark":{
                   "value": description,
                   "Data": description,
                   "color":"#173177"
               }
       }
    }
    for u in users:
        if u.openid:
            data['touser'] = u.openid
            url = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=' + get_access_token()
            r = requests.post(url, json.dumps(data))

歡迎來到個人博客:https://codeplot.top/
技術分類文章
微信公衆號開發分類文章~~~~

相關文章
相關標籤/搜索