使用微信小程序的时候,我们经常会遇到要求授权订阅的弹框,如果我们确定授权后,小程序就会向我们发送一些消息通知,例如抽奖结果、订单进度、活动通知等,这些场景实际使用了微信小程序的消息订阅与发送功能。本文主要基于微搭低代码平台向您介绍如何实现小程序的消息订阅与发送。
在开始搭建之前我们先要了解一下小程序消息订阅与发送的相关接口,不熟悉的用户可以参见微信小程序官网介绍的 订阅消息接口 和 发送消息接口。 然后我们还需要了解小程序消息订阅的步骤:
步骤1:选择订阅消息模板(用户需要登录微信公众号平台进行选择)。
步骤2:实现提醒用户订阅消息的功能。
步骤3:实现服务端向用户发送消息的功能。
操作步骤
步骤1:选择订阅消息模板
注册认证小程序
选择订阅消息模板
1. 登录注册的小程序后台,选择订阅消息菜单,单击选用。
2. 在公共模板库中选择消息模板。
3. 选定模板后,选择消息模板的字段。
4. 模板设置完成并提交后,就会生成模板 ID 和参数信息。
注意
模板 ID 和参数会是我们订阅和发送消息的核心参数,另外各种参数值的格式要和模板样例保持一致。
步骤2:创建自定义 APIs
自定义 APIs
在微搭上创建自定义 APIs,命名为小程序消息订阅发送。
入参和出参
给自定义 APIs 添加消息订阅发送的方法,方法的入参有 openId(接收者 openId)、templateId(消息模板 ID)、thing1(活动名称)、thing4(活动内容)、time6(活动时间)、thing7(活动地点),方法的出参有 errCode、errMsg。
入参消息模板 ID、活动名称、活动内容、活动时间、活动地点等来自于选择的消息模板,出参来自发送消息的接口。
自定义代码
方法体的自定义代码参考微信小程序官网的发送消息接口,上面有过说明和官网地址。
自定义代码如下: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({appid: context.env.currentAppId}).subscribeMessage.send({"touser": context.env.currentOpenId,"page": 'changePage',"lang": 'zh_CN',"data": {"thing1": {"value": params.thing1},"thing4": {"value": params.thing4},"time6": {"value": params.time6},"thing7": {"value": params.thing7}},"templateId": params.templateId,"miniprogramState": 'trial'})return result} catch (err) {return err}};
步骤3:创建自定义应用
在微搭上创建自定义应用,命名小程序消息订阅发送。
为了演示消息订阅和消息发送两种功能,在应用的首页拖拽两个按钮组件,分别命名订阅和发送。订阅按钮用来模拟实现小程序的消息订阅提醒,发送按钮用来模拟实现服务端发送消息。
步骤4:提醒用户订阅消息
给订阅按钮绑定事件,事件选择自定义方法,添加方法名为 subscribe。
自定义方法的功能是调用微信小程序的订阅消息接口,具体参考上面已经提过。方法中参数 tmplIds 的值来自于上面选择的消息模板生成的模板 ID。
export default function({event, data}) {try{wx.requestSubscribeMessage({tmplIds: ['XeULkxnJ1NTDsOUG4C4cArTHSJwEf_9vRO0olhrQi34'],//模板idsuccess (res) {console.log(res)},fail (res){console.log(res)}})} catch (e) {console.log("错误代码",e.code,"错误信息",e.message)}}
步骤5:向用户发送消息
给发送按钮绑定事件,事件选择自定义方法,添加方法名为 send。
给方法配置入参,选择全局变量中的登录用户信息 > 微信/企微 openId。
自定义方法的功能是调用上面创建的自定义 APIs 的方法消息订阅发送。低代码编辑器如何调用自定义 APIs 不熟悉的用户请参见 通过低代码编辑器调用。
调用方法传递的参数其中 openId 是当前登录用户的微信 openId,templateId 是消息模板的 ID,其它参数都是模板需要的参数。
代码如下:export default async function({event, data}) {const openId = data.target //获取登录用户openid传参console.log("openId",openId)try{const result = await app.cloud.callConnector({name: 'zdy_yaw72af',methodName: 'sendMessage',params: {"openId":openId,"templateId":"XeULkxnJ1NTDsOUG4C4cArTHSJwEf_9vRO0olhrQi34", //消息模板id"thing1":"订阅消息发送","thing4":"订阅与发送消息测试活动","time6":"2020年5月1号 上午9:00-2020年5月4号 下午6:00","thing7":"腾讯大厦7070"}, // 方法入参});console.log("result",result)} catch (e) {console.log("错误代码",e.code,"错误信息",e.message)}}
步骤6:应用发布及结果验证
应用搭建完成后,需要选择发布到小程序体验版或正式版,才能验证消息订阅发送接口。
发布成功后,用手机扫描发布的二维码进入到小程序,单击订阅会弹出订阅通知。
授权确定订阅消息。
回到首页,选择发送。
退出小程序后,微信服务通知中会收到订阅的消息内容,且消息内容和我们发送的一致。