微信小程序推送公众号模板消息
一、描述:
因小程序自帶推送只能實現(xiàn)單一推送,還得用戶授權(quán)后才能推送,想要實現(xiàn)相關(guān)內(nèi)容的多條推送,很顯然不夠用。
好在通過公眾號提送消息可以連接到小程序,并且公眾號單日上線10萬條,可以實現(xiàn)小程序推送功能。
那么問題來了,如何實現(xiàn)公眾號推送小程序相關(guān)消息呢?很顯然可以使用openid來實現(xiàn)。
下面簡單說明實現(xiàn)思路(假設(shè)各平臺已綁定):
1. 獲取公眾號token(token每天限制200次,最好實現(xiàn)全局統(tǒng)一調(diào)用,避免token覆蓋導致的請求問題)
2. 獲取公眾號關(guān)注用戶的openid
3. 通過公眾號openid來獲取unionid(說明:unionid是微信開放平臺全局唯一標識)
4. 通過unionid來獲取小程序的openid(一般這個可以查詢數(shù)據(jù)庫,設(shè)計數(shù)據(jù)庫應(yīng)該把openid,unionid字段設(shè)置上)
5. 通過小程序openid,發(fā)送公眾號模板
二、前期準備:
1. 微信小程序認證
2. 微信公眾號認證
3. 微信開放平臺認證(小程序和公眾號綁定同一開放平臺,且必須認證)
三、代碼實現(xiàn)
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
// 返回結(jié)果
{
"access_token": "ACCESS_TOKEN",
"expires_in": 7200
}
2.獲取公眾號關(guān)注用戶的openid
一次拉取調(diào)用最多拉取10000個關(guān)注者的OpenID,可以通過多次拉取的方式來滿足需求。
參數(shù)說明:
access_token: 調(diào)用憑證
next_openid 第一個拉取的OPENID,不填默認從頭開始拉取
// 請求地址:
get https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID
// 返回結(jié)果:
{
"count": 2,
"data": {
"openid": [
"OPENID1",
"OPENID2"
]
},
"next_openid": "NEXT_OPENID",
"total": 2
}
3. 通過公眾號openid獲取對應(yīng)unionid
微信針對公眾號獲取用戶信息給出了2個接口:
a. 獲取單個用戶信息
b. 批量獲取用戶信息(每次最多100條)
我這里主要講解批量獲取用戶信息,如果想獲取單個用戶信息,可查看官方接口。
// 請求地址
https://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token=ACCESS_TOKEN
// post數(shù)據(jù):
{
"user_list": [
{
"openid": "openid1",
"lang": "zh_CN"
},
{
"openid": "openid2",
"lang": "zh_CN"
}
]
}
// 返回數(shù)據(jù)
{
"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
因為是在開發(fā)小程序,所以像unionid和openid這都是在數(shù)據(jù)庫中存儲,因此在這里直接查詢數(shù)據(jù)庫信息即可,這里不過多介紹。
當然也可以通過前臺傳過來的code去解析openid,相關(guān)如下:
// 請求地址
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
// 返回結(jié)果
{
"sex": 1,
"photoUrl": "",
"openId": "",
"uniodId": ""
}
5. 發(fā)送模板消息
公眾號模板消息需要公眾號openid和小程序openid
// 請求地址
post https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
// post數(shù)據(jù)
{
"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"
}
}
}
// 返回結(jié)果
{
"errcode":0,
"errmsg":"ok",
"msgid":200228332
}
使用效果:
注意:這里的小程序必須是線上已發(fā)布的才可以。
到此,公眾號消息推送算是完事啦。。。
總結(jié)
以上是生活随笔為你收集整理的微信小程序推送公众号模板消息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jpg和png的区别
- 下一篇: 怎么创建具有真实纹理的CG场景岩石?