实现流程
- 1.通过原生云函数的默认函数获取用户openid
- 2.获取用户授权,获取一次授权就可以发送一次订阅消息,所以多引导用户多点击订阅消息授权。
- 3.实现发送订阅给单个授权用户
- 4.实现发送订阅给多个授权用户
一,获取用户openid
- 原生云函数内容
// 云函数入口文件
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,//通过该参数来获取当前用户的openid
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
}
}
- 调用云函数方法获取到用户openid
//获取用户openid
getOpenid() {
wx.cloud.callFunction({
name: "yunkaifa_getopenid"
}).then(res => {
console.log("获取openid成功", res)
userid = res.result.openid
}).catch(res => {
console.log("获取openid失败", res)
})
},
二,生成订阅模板并引导用户进行授权-默认对当前用户进行授权(尽量引导用户多点击授权,具体可参考美团优选小程序一开始的授权引导)
//获取用户授权,获取一次授权就可以发送一次订阅消息,所以多引导用户多点击订阅消息授权。
shouquan() {
wx.requestSubscribeMessage({
// 1.登录小程序管理平台
// 2.选择左侧的订阅消息
// 3.点击同意开启该功能
// 4.选用模板后即可获取模板id
tmplIds: ['-t0yjI0tuZowJtpJxwQNaCH1uRQaMTMJSWhMlOjs92w'], //这里填入我们生成的模板id
success(res) {
console.log('授权成功', res)
},
fail(res) {
console.log('授权失败', res)
}
})
},
三,发送订阅消息给单个授权用户
//发送消息给单个用户
sendOne() {
if (name == null || name == '') {
wx.showToast({
icon: "none",
title: '请输入日程主题',
})
return
}
//这里的用户id给指定为自己的id了,如需指定可以按照注释方式指定
// this.sendFun("oucwI5bkpw2xgXN8kUameZfbzAAE", name)
console.log(userid)
this.sendFun(userid, name)//发送订阅消息实现函数(云函数)
},
//封装的方式方法
sendFun(openid, name) {
wx.cloud.callFunction({
name: "yunkaifa_dingyuetuisong",
data: {
openid: openid,
name: name
}
}).then(res => {
console.log("发送多条成功", res)
}).catch(res => {
console.log("发送多条失败", res)
})
}
四,发送订阅消息给多个授权用户
//发送订阅消息给多个用户
sendAll() {
if (name == null || name == '') {
wx.showToast({
icon: "none",
title: '请输入日程主题',
})
return
}
//指定多个用户id
let users = [
"oucwI5bkpw2xgXN8kUameZfbzAAE",
// "oc4sa0dZ-pSCu95djiLCt7jo97bY" 因为没有多个用户id,所以在这里仅演示功能,如有多个id可自己设定
]
//循环调用发送函数给多个用户发送订阅消息
users.forEach(item => {
console.log("for循环", item)
this.sendFun(item, name)
})
},
//封装的方式方法
sendFun(openid, name) {
wx.cloud.callFunction({
name: "yunkaifa_dingyuetuisong",
data: {
openid: openid,
name: name
}
}).then(res => {
console.log("发送多条成功", res)
}).catch(res => {
console.log("发送多条失败", res)
})
}
五,整体代码
- 云函数yunkaifa_dingyuetuisong
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
// 云函数入口函数
exports.main = async(event, context) => {
try {
const result = await cloud.openapi.subscribeMessage.send({
touser: event.openid, //要推送给哪个用户
page: 'pages/index/index', //要跳转到那个小程序页面,点开订阅消息时。一般都是跳转到小程序首页
data: { //推送的内容
thing1: {
value: event.name
},
time3: {
value: '2020年3月10日 14:00'
},
thing4: {
value: '杭州市浙江大学'
},
},
templateId: '-t0yjI0tuZowJtpJxwQNaCH1uRQaMTMJSWhMlOjs92w' //模板id
})
console.log(result)
return result
} catch (err) {
console.log(err)
return err
}
}
- 云函数yunkaifa_getopenid
// 云函数入口文件
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,
}
}
- index.wxss
/**index.wxss**/
.userinfo {
display: flex;
flex-direction: column;
align-items: center;
}
.userinfo-avatar {
width: 128rpx;
height: 128rpx;
margin: 20rpx;
border-radius: 50%;
}
.userinfo-nickname {
color: #aaa;
}
.usermotto {
margin-top: 200px;
}
- index.wxml
<button bindtap="getOpenid">1:获取用户openid</button>
<button bindtap="shouquan">2:获取用户授权</button>
<input placeholder="输入日程主题" bindinput="getName"></input>
<button bindtap="sendOne">3:发送订阅消息给单个用户</button>
<button bindtap="sendAll">4:发送订阅消息给多个用户</button>
- index.js
let name = ''
let userid = ""
Page({
//获取用户openid
getOpenid() {
wx.cloud.callFunction({
name: "yunkaifa_getopenid"
}).then(res => {
console.log("获取openid成功", res)
userid = res.result.openid
}).catch(res => {
console.log("获取openid失败", res)
})
},
//获取用户授权,获取一次授权就可以发送一次订阅消息,所以多引导用户多点击订阅消息授权。
shouquan() {
wx.requestSubscribeMessage({
// 1.登录小程序管理平台
// 2.选择左侧的订阅消息
// 3.点击同意开启该功能
// 4.选用模板后即可获取模板id
tmplIds: ['-t0yjI0tuZowJtpJxwQNaCH1uRQaMTMJSWhMlOjs92w'], //这里填入我们生成的模板id
success(res) {
console.log('授权成功', res)
},
fail(res) {
console.log('授权失败', res)
}
})
},
//获取用户输入的日程主题
getName(event) {
name = event.detail.value
},
//发送消息给单个用户
sendOne() {
if (name == null || name == '') {
wx.showToast({
icon: "none",
title: '请输入日程主题',
})
return
}
//这里的用户id给指定为自己的id了,如需指定可以按照注释方式指定
// this.sendFun("oucwI5bkpw2xgXN8kUameZfbzAAE", name)
console.log(userid)
this.sendFun(userid, name)
},
//发送订阅消息给多个用户
sendAll() {
if (name == null || name == '') {
wx.showToast({
icon: "none",
title: '请输入日程主题',
})
return
}
//指定多个用户id
let users = [
"oucwI5bkpw2xgXN8kUameZfbzAAE",
// "oc4sa0dZ-pSCu95djiLCt7jo97bY" 因为没有多个用户id,所以在这里仅演示功能,如有多个id可自己设定
]
//循环调用发送函数给多个用户发送订阅消息
users.forEach(item => {
console.log("for循环", item)
this.sendFun(item, name)
})
},
//封装的方式方法
sendFun(openid, name) {
wx.cloud.callFunction({
name: "yunkaifa_dingyuetuisong",
data: {
openid: openid,
name: name
}
}).then(res => {
console.log("发送多条成功", res)
}).catch(res => {
console.log("发送多条失败", res)
})
}
})