微信小程序发送消息
====
前言:小程序发送订阅消息是微信基础库 2.4.4 开始支持,低版本需做兼容处理。(注意阅读官方文档的注意事项,很重要!!!)
官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/subscribe-message.html
基本就是按照官方的步骤走;其中有很多的细节需要注意下。
步骤一:获取模板 ID
在微信公众平台手动配置获取模板 ID:
登录https://mp.weixin.qq.com获取模板,如果没有合适的模板,可以申请添加新模板。
步骤二: 获取下发权限
这里回调用wx的官方接口:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/subscribe-message/wx.requestSubscribeMessage.html
/**
* 发送订阅消息
*/
sendInfo(){
wx.requestSubscribeMessage({
// 这里是你的模板id 最多支持三个
tmplIds: ['6wH7uJeq-ZrmwQJB8uoRAxeXhBe9sdIaZOSd9KCW7VI'],
success (res) {
console.log("订阅消息",res);
},
// 官方文档中有状态码的解释 具体是什么错很详细
fail(err){
console.log("订阅失败",err);
}
})
},
步骤三:调用接口下发订阅消息
官方接口文档: [下发接口](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html)
我这里用的是https调用方式
首先你先要获取小程序全局唯一后台接口调用凭据(access_token)
接口地址
```
GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
三个参数
grant_type:client_credential(这个写死就行)
appid:(这里是你的小程序appid)
secret:(这里是你的小程序密钥)
上面两个都可以去你的小程序个人中心 开发=> 开发管理 => 开发设置 中查看 注意保存 (后期会省事很多)
```
这里我是用postman测试拿的access_token,实际开发中可以将他们作为参数传给后端,让后端去拿access_token
接下来去调用后端推送消息的接口
[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html)
接口地址:POST https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN
这里注意token需要拼在url后面
其他的参数需要放在body中,content-type设置为application/json,参数含义在文档中都有介绍。 需要注意的是: data的格式必须跟你申请的模板的模板详情格式严格保持一致 (这里需要多注意接口报错的信息,注意与文档对比纠正)
{
"touser": "OPENID",
"template_id": "TEMPLATE_ID",
"page": "index",
"miniprogram_state":"developer",
"lang":"zh_CN",
"data": {
"number01": {
"value": "339208499"
},
"date01": {
"value": "2015年01月05日"
},
"site01": {
"value": "TIT创意园"
} ,
"site02": {
"value": "广州市新港中路397号"
}
}
}
这样就可以给用户发送订阅消息了
在这里说下前端如何获取openId
需要先去调用登录接口,拿到返回值的code 作为下面请求的参数,至于在哪调用,就得看实际情况,建议做缓存
wx.login({
success(res) {
wx.request({
url: 'https://api.weixin.qq.com/sns/jscode2session?appid=你的小程序appid&secret=你的小程序secret&js_code=' + 调用微信登录获取的code + '&grant_type=authorization_code',
success(result) {
// 获取用户的openId
console.log(result);
// "oy5o95A3MHGsdelAe4wIWkfe_XgM"
}
})
}
})