日常我们使用小程序时,经常会有消息弹框提醒,提示你是否允许小程序发送消息,比如签到提醒、抽奖信息发送等。当用户点击允许后,小程序会推送订阅消息方便用户及时获取最新的数据。
一、选择消息模板
1、登录 微信公众号平台 。登录成功后在左侧菜单栏中选择订阅消息菜单,在右侧的面板中单击选用
2、选择消息模版。这里以选择《预约通知》模版作为示例
3、选择消息模板的字段(注意最多可选择5个字段),并填写场景说明(按订阅的需求填写)
4、提交成功后在会自动跳转至我的模版中,在我的模版中会以列表的形式展示你所有已订阅的模版。查看模版详情可以查看模版的ID以及使用模板所需要的参数
二、新建自定义APIs,编写发送消息函数
1、新建APIs
2、添加新方法,填写方法名称、方法标识、方法入参、方法出参、自定义代码
方法入参:
openId(接收者 openId)
templateId(消息模板 ID)
name1(预约人)
data3(预约时间)
thing7(预约备注)
thing8(温馨提示)
方法出参:
errCode
errMsg
自定义代码编写:
const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV,
})
module.exports = async function (params, context) {
try {
const result = await cloud.openapi.subscribeMessage.send({
"touser": params.openId, // 发送给谁
"page": 'my', // 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。
"lang": 'zh_CN',
"data": { // 模板所需的参数
"name1": {
"value": params.name1 // 预约人
},
"data3": {
"value": params.data3 // 预约时间
},
"thing7": {
"value": params.thing7 // 预约备注
},
"thing8": {
"value": params.thing8 // 温馨提示
}
},
"templateId": params.templateId, // 模板ID ---- 在模版详情中获取
"miniprogramState": 'trial' // 跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版
})
return result
} catch (err) {
return err
}
};
以下为截图示例:
三、让用户触发订阅提醒
这里只是作为演示,就简单的通过两个按钮进行功能演示,其中 “订阅消息” 按钮用于弹窗提示用户进行订阅消息,“发送消息” 按钮则是给当前用户发送订阅的消息
给 订阅消息 按钮绑定点击事件,调用微信小程序的订阅消息接口
export default async function ({ event, data }) {
try {
// wx.requestSubscribeMessage 为微信小程序的订阅消息方法
// 可参考 https://developers.weixin.qq.com/miniprogram/dev/api/open-api/subscribe-message/wx.requestSubscribeMessage.html
wx.requestSubscribeMessage({
tmplIds: ['xxxxx模版ID'], // 这里填写你的模板ID,注意是数组里是字符串的格式
success(res) {
console.log("success")
},
fail(res) {
console.log(res)
}
})
} catch (e) {
console.log('错误代码:', e.code, '错误信息:', e.message);
}
}
四、向用户发送消息
这里只是作为演示,就简单的通过两个按钮进行功能演示,其中 “订阅消息” 按钮用于弹窗提示用户进行订阅消息,“发送消息” 按钮则是给当前用户发送订阅的消息
给 发送消息 按钮绑定点击事件,给用户发送消息提醒
注意:发送消息的前提是需要用户允许订阅消息
这里给发送按钮绑定点击事件的操作就不做过多的描述,与上面订阅消息按钮绑定事件步骤一致,发送消息的方法名称为: send
export default async function ({ event, data }) {
try {
let { OPENID } = await app.utils.getWXContext() // 获取当前用户的 OPENID
app.dataset.state.OPENID = OPENID // 保存到全局变量中
// 调用APIs传入对应的参数发送消息
const result = await app.cloud.callConnector({
name: 'sendMsg_1xmxoi2', // APIs标识
methodName: 'sendMessage', // 方法名称
params: {
"openId": app.dataset.state.OPENID, // 用户的 OPENID
"templateId": "xxxx模版ID", // 消息订阅模版ID
"name1": "张三", // 预约人 这是使用的为虚拟数据用于演示,在实际项目中可根据实际情况进行填写入参
"data3": "2023年07月16日", // 预约时间 这是使用的为虚拟数据用于演示,在实际项目中可根据实际情况进行填写入参
"thing7": "测试订阅消息", // 预约备注 这是使用的为虚拟数据用于演示,在实际项目中可根据实际情况进行填写入参
"thing8": "已预约成功请注意查看" // 温馨提示 这是使用的为虚拟数据用于演示,在实际项目中可根据实际情况进行填写入参
}
});
console.log(result)
} catch (e) {
console.log('错误代码', e.code, '错误信息', e.message);
}
}
至此整个流程就做好了,将应用发布后即可进行功能演示。
这里就不做成果演示了,有兴趣的可以自行发布进行体验。

越看越糊涂,太复杂了。
学废了!一会去试试!