給微信公衆號用戶主動推送消息指的是發送模板消息。能夠隨時給用戶發送提醒。功能很是豐富,好比提醒用戶特定事件(該付費了,商品降價,任務執行成功,遇到錯誤等等)。html
不只能夠向用戶發送文字消息,還能夠實現用戶點擊後跳轉指定網頁或小程序。python
可是該功能也受到不少限制。模板消息顧名思義,只能根據模板發送消息,模板能夠從模板庫選擇,也能夠本身建立,可是必須經過審覈才能使用。並且只有微信公衆號可使用模板消息,且要經過微信認證(目前的條件是必需要有營業執照才能註冊公衆號,我的註冊的是訂閱號,沒法經過微信認證)django
官方文檔寫的比較複雜,並且沒有示例代碼。json
微信模板消息官方文檔:https://developers.weixin.qq....小程序
這時候須要記下模板 idapi
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
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/
技術分類文章
微信公衆號開發分類文章~~~~