微信小程序推送公眾號模板消息
因小程序自帶推送只能實現單一推送,還得用戶授權后才能推送,想要實現相關內容的多條推送,很顯然不夠用。
好在通過公眾號推送消息可以連接到小程序,並且公眾號單日上限10萬條,可以實現小程序推送功能。
那么問題來了,如何實現公眾號推送小程序相關消息呢?很顯然可以使用openid來實現。
下面簡單說明實現思路(假設各平台已綁定):
1. 獲取公眾號token(token每天限制200次,最好實現全局統一調用,避免token覆蓋導致的請求問題)
2. 獲取公眾號關注用戶的openid
3. 通過公眾號openid來獲取unionid(說明:unionid是微信開放平台全局唯一標識)
4. 通過unionid來獲取小程序的openid(一般這個可以查詢數據庫,設計數據庫應該把openid,unionid字段設置上)
5. 通過小程序openid,發送公眾號模板
二、前期准備:
1. 微信小程序認證
2. 微信公眾號認證
3. 微信開放平台認證(小程序和公眾號綁定同一開放平台,且必須認證)
三、代碼實現
1. 獲取公眾號access_token
通過微信公眾號的 AppId 和 AppSecret 獲取 公眾號的 access_token
說明:
請求ip需在公眾號中的白名單
access_token有效期為7200s(2h)
// 請求地址: post https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET // 返回結果 { "access_token": "ACCESS_TOKEN", "expires_in": 7200 }
2.獲取公眾號關注用戶的openid
一次拉取調用最多拉取10000個關注者的OpenID,可以通過多次拉取的方式來滿足需求。
參數說明:
access_token: 調用憑證
next_openid 第一個拉取的OPENID,不填默認從頭開始拉取
// 請求地址: get https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID // 返回結果: { "count": 2, "data": { "openid": [ "OPENID1", "OPENID2" ] }, "next_openid": "NEXT_OPENID", "total": 2 }
3. 通過公眾號openid獲取對應unionid
微信針對公眾號獲取用戶信息給出了2個接口:
a. 獲取單個用戶信息
b. 批量獲取用戶信息(每次最多100條)
我這里主要講解批量獲取用戶信息,如果想獲取單個用戶信息,可查看官方接口。
// 請求地址 https://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token=ACCESS_TOKEN // post數據: { "user_list": [ { "openid": "openid1", "lang": "zh_CN" }, { "openid": "openid2", "lang": "zh_CN" } ] } // 返回數據 { "subscribe": 1, "openid": "", "nickname": "", "sex": 1, "language": "", "city": "", "province": "", "country": "", "headimgurl": "", "subscribe_time": , "unionid": "", // 綁定開放平台才會有 "remark": "", "groupid": 0, "tagid_list": [ 128, 2 ], "subscribe_scene": "ADD_SCENE_QR_CODE", "qr_scene": , "qr_scene_str": "" }
4. 通過unionid獲取小程序openid
因為是在開發小程序,所以像unionid和openid這都是在數據庫中存儲,因此在這里直接查詢數據庫信息即可,這里不過多介紹。
當然也可以通過前台傳過來的code去解析openid,相關如下:
// 請求地址 https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code // 返回結果 { "sex": 1, "photoUrl": "", "openId": "", "uniodId": "" }
5. 發送模板消息
公眾號模板消息需要公眾號openid和小程序openid
// 請求地址 post https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN // post數據 { "touser": "公眾號用戶openid", "template_id": "", "url": "http://weixin.qq.com/download", "miniprogram": { "appid": "小程序appid", "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" } } } // 返回結果 { "errcode":0, "errmsg":"ok", "msgid":200228332 }
注意:這里的小程序必須是線上已發布的才可以。
到此,公眾號消息推送算是完事啦。。。