一.什么是订阅消息
微信里有一个服务通知,我们经常收到的各种消息,就是通过订阅消息进行发送的,订阅消息分为二种:
进一步了解跳转到官方文档中去学习吧官方解释
二.在小程序中使用订阅消息
业务:用户点击按钮,我们返回用户如下信息:
2.1第一步:创建模板
1.进入到小程序官网首页,点击订阅消息
公共模板>任务模板>选择红框框里的哪一个>选用
选择参数,下面的场景说明也要填写,然后提交
注意模板ID是一个很重要的参数,点击详情
进行详情页面,记住thing1和thing2参数【模板不一样参数名也不一样】
2.2 第二步:创建云服务
由于我已经创建过云服务的环境了,这里可能有点不一样但是,大概过程差不多
进行微信小程序开发工具里>云开发
编写环境名称,和支付方式
这里注意一下按量收费,我使用的是预付费,用的免费套餐,但是免费套餐现在一天可访问人数为500有点坑:
找到自己的环境ID
2.3 第三步:云服务项目配置
第一个app.js中进行配置
//云数据
wx.cloud.init({
env:"你的环境ID"
})
然后创建红框框里的三个文件
第一个文件创建方式为,箭头指向的文件夹,点击创建文件夹名为cloud
另外二个创建方式如下:文件名分别对应:getopenid,sendmessage
getopenid里面关心红框框里的即可:
,这里的DYNAMIC_CURRENT_ENV其实就是环境id只是动态的获取环境Id
getopenid文件就是获取openid,这个openid可以理解为用户家的地址,我要给用户发消息肯定要知道该用户家在哪里吧
index.js内容如下:
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
// 云函数入口函数
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
return {
event,
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
}
}
sendmessage里,主要关心红框框里的内容:
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
// 云函数入口函数
exports.main = async (event, context) => {
try{
let tmplId='模板ID'
let index='pages/index/index'
const result = await cloud.openapi.subscribeMessage.send({
touser: event.openId,
page: index,
data: {
thing1: {
value:event.thing1
},
thing2: {
value:event.thing2
}
},
templateId: 模板ID
})
return result
}catch(err){
console.log(err)
return err
}
}
里面的参数一定要填对!
上面的配置完了就上传到云服务中去!
部署完之后就是通过云服务进行查看是否上传成功!
2.3 第三步:项目使用订阅消息
在utils中创建一个messagepush.js文件
这里的send就是用来发送消息的函数,实现方式就三步
- 进行授权
- 获取openid
- 进行发送
具体操作看源码,解释查找官方文档:
- 详见小程序端消息订阅接口wx.requestSubscribeMessage
- 详见服务端消息发送接口 subscribeMessage.send
function send(thing1,thing2){
//【1】进行授权
let tmplId='Xl-JeelQZqmAWcUy9VlyDc7eWy2HoPTdenK4pbr1V4w'
wx.requestSubscribeMessage({
tmplIds: [tmplId],
success (res) {
console.log('授权成功',res)
//【2】获取openid
wx.cloud.callFunction({
name:'getopenid'
}).then(res=>{
//【3】进行发送
wx.cloud.callFunction({
name:'sendmessage',
data:{
openId:res.result.openid,
thing1:thing1,
thing2:thing2
}
}).then(res=>{
console.log('发送成功',res)
}).catch(res=>{
console.log('发送失败',res)
})
}).catch(res=>{
console.log("获取失败",res)
})
},fail(res){
console.log('授权失败',res)
}
})
}
module.exports = {
send: send
}
小程序中创建一个buttion的按钮:
在点击事件中,调用send方法进行发送消息即可
最后运行效果: