介绍:
消息能力是小程序能力中的重要组成部分,微信官方提供了订阅消息能力,以便实现开发者实现服务的闭环和更优的体验。可以支持在用户自主订阅后,推送消息到用户端(服务通知),用户点击查看详情可跳转至小程序的页面,实现服务的闭环,提高活跃度和用户粘性。
业务场景:
用户在微信小程序使用某个服务,比如购买、预约等服务,在用户预约成功后向该用户推送一条预约成功的消息提醒。
发送订阅消息步骤:
- 开通消息订阅:开发者可以申请开通订阅消息能力,开启后开发者可以调用接口向用户推送消息;
- 配置消息模板:申请生成消息模板ID,确定模板详情:标题、内容等;
- 前端订阅消息:通过按钮或者支付回调向用户发起订阅消息的询问;
- 后端进行推送:用户同意订阅后,后端请求微信消息推送接口携带模板ID、模板内容(可理解成数据字段)用户open_id、跳转地址等参数进行推送;
- 用户收到消息:用户在服务通知中收到该模板消息的卡片,点击可转向小程序中的跳转地址,可传参。
一、开通消息订阅
- 打开微信公众平台地址,扫码登录后台, 并找到订阅消息
- 若您未开通消息订阅模板, 会先提示您去开通此功能.
二、配置消息模板
- 登录微信公众平台之后,消息模板的配置入口在小程序管理后台中的
基础功能
-订阅消息
里,你会看到下面这张图展示的内容: - 点击
选用
按钮,进入公共模板库中
- 由于长期性订阅消息,目前仅向政务民生、医疗、交通、金融、教育等线下公共服务开放,后期将逐步支持到其他线下公共服务业务。仅就线下公共服务这一点,长期性订阅消息就和大部分开发者无缘了。 所以我们这里只能以使用一次性订阅消息为例。
- 手动配置模板ID(若在公共模板库中没有找到合适的,可以申请添加新模板、审核通过后即可使用).
- 根据自身业务需求,选择创建适合自己的模板
- 点击
选用
模板,进入模板详情页 - 填写模板参数,并提交审核
- 配置完成后提交, 你就会在我的模板看到该条订阅消息相关信息.
- 需等待微信官方审核通过后,方可使用。
注意:创建模板提交审核,尽量提前创建模板,避免审核失败。
- 点击
详情
按钮进入模版详情页,可以看到我们配置的信息: - 下图的
模板ID
就是我们需要的。
三、前端订阅消息 前端 uni-app 代码实现
1、替换你的请求基础地址:
// 请求基础地址
const requestBaseUrl = 'YOUR_URL_ADDRESS'
2、替换你的模版Id:
// 模版id
const tmplId = 'your_template_id'
3、代码示例:
<template>
<view style="display: flex;align-items: center;justify-content: center;height: 100vh;">
<button @click="subscribe">点我唤起订阅面板</button>
</view>
</template>
<script setup>
import {
ref } from 'vue'
// 用户 openId
const openId = ref(null)
// 请求基础地址
const requestBaseUrl = 'http://192.168.43.245:3000/api/weChatMp'
// 发送订阅消息
async function subscribe() {
// 如果没有 openId 就代表未登录
if (!openId.value) {
await wechatLogin()
}
// 模版id
const tmplId = 'GAcYabm1vG_YJwl75R_vXntgqe5q2Li3N-0XTCOEehE'
// 接口文档地址:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/subscribe-message/wx.requestSubscribeMessage.html
uni.requestSubscribeMessage({
tmplIds: [tmplId],
success(res) {
console.log('接口调用成功的回调函数', res)
if (res[tmplId] == 'accept') {
// 用户同意后
// 发送请求给后端进行通知
uni.request({
url: `${
requestBaseUrl}/sendSubscribeMsg`,
method: 'POST',
data: {
touser: openId.value, // 接收者(用户)的 openid
page: `/pages/index/index`, // 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转
template_id: tmplId, // 所需下发的订阅模板id
data: