微信小程序订阅消息之 subscribeMessage.send


外圆内方 2019-12-12 小程序 云开发

微信官方:小程序模板消息接口将于 2020 年 1 月 10 日下线,开发者可使用订阅消息功能

  1. 原来的 templateMessage.send 要替换为 subscribeMessage.send

  2. 云调用 subscribeMessage.send 要在 config.json 中配置 subscribeMessage.send API 的权限,并且上传云函数。

  3. subscribeMessage.send 调用前必须先调用 wx.requestSubscribeMessage 请求用户同意订阅消息成功后才能顺利执行。

  4. templateMessage.send 必须的参数中 formId 在 subscribeMessage.send 已经不需要了, 并且 wx.requestSubscribeMessage 成功的执行只有两个场景。分别是:一、用户点击行为。 二、发起支付回调后。(注:一定要注意用户点击是直接触发的,promise 和 await 后都会导致不执行

不多说直接上代码

微信端:

onSend() {
    wx.requestSubscribeMessage({
        tmplIds: ['微信小程序后台配置的订阅消息模板id'],
        // 成功的回调
        success: (res) => {
            // 调用后台,这里用的是云开发
            wx.cloud.callFunction({
              name: 'sendMessage',
              data: {}
            }).then(res => {
              console.log(res)
            })
        }
      })
    }

云函数:

const cloud = require("wx-server-sdk")
cloud.init()
exports.main = async (event, context) => {
	const getWXContext = cloud.getWXContext()
	try {
		const result = await cloud.openapi.subscribeMessage.send({
			touser: getWXContext.OPENID,
			// 同样是模板的id,但是不同于微信端 requestSubscribeMessage 的是数组,这里只能填一个string
			templateId: "微信小程序后台配置的订阅消息模板id",
			// 推送到的消息跳转小程序的页面
			page: `index`,
			// 生成模板中的参数
			data: {
				// 这里的 key1, key2 必须按订阅的消息模板中详细内容的返回字段写
				key1: {
					value: event.createTime
				},
				key2: {
					value: event.content
				}
			}
		})
		return result
	} catch (err) {
		console.log(err)
		return err
	}
}