评论

在微搭中实现微信小程序消息订阅

日常我们使用小程序时,经常会有消息弹框提醒,提示你是否允许小程序发送消息,比如签到提醒、抽奖信息发送等。当用户点击允许后,小程序会推送订阅消息方便用户及时获取最新的数据。

日常我们使用小程序时,经常会有消息弹框提醒,提示你是否允许小程序发送消息,比如签到提醒、抽奖信息发送等。当用户点击允许后,小程序会推送订阅消息方便用户及时获取最新的数据。


一、选择消息模板

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);
    }
}


至此整个流程就做好了,将应用发布后即可进行功能演示。

这里就不做成果演示了,有兴趣的可以自行发布进行体验。


最后一次编辑于  2023-07-19  
点赞 6
收藏
评论

2 个评论

  • 信天游
    信天游
    2025-10-20

    越看越糊涂,太复杂了。

    2025-10-20
    赞同
    回复
  • Hi Mr·zhou
    Hi Mr·zhou
    2023-07-20

    学废了!一会去试试!

    2023-07-20
    赞同
    回复
登录 后发表内容