微信小程序推送公众号模板消息
一、描述:
因小程序自带推送只能实现单一推送,还得用户授权后才能推送,想要实现相关内容的多条推送,很显然不够用。
好在通过公众号推送消息可以连接到小程序,并且公众号单日上限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
}
注意:这里的小程序必须是线上已发布的才可以。
到此,公众号消息推送算是完事啦。。。
因小程序自带推送只能实现单一推送,还得用户授权后才能推送,想要实现相关内容的多条推送,很显然不够用。
好在通过公众号推送消息可以连接到小程序,并且公众号单日上限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
}
注意:这里的小程序必须是线上已发布的才可以。
到此,公众号消息推送算是完事啦。。。