【微信小程序】3、SpringBoot整合WxJava发送订阅消息

1、创建消息模板

在公共模板库里面选择符合自己业务场景的消息模板,例如:

每个消息模板最多选择5项,可根据自己业务需求自行选择,顺序也可以自己决定。提交后,我们就得到了属于自己的消息模板ID

2、文档阅读

官方文档 发送订阅消息

bash 复制代码
https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-message-management/subscribe-message/sendMessage.html

可以关注到消息模板中每种参数的类型有明确的规定

参数类别 参数说明 参数值限制 说明
thing.DATA 事物 20个以内字符 可汉字、数字、字母或符号组合
number.DATA 数字 32位以内数字 只能数字,可带小数
letter.DATA 字母 32位以内字母 只能字母
symbol.DATA 符号 5位以内符号 只能符号
character_string.DATA 字符串 32位以内数字、字母或符号 可数字、字母或符号组合
time.DATA 时间 24小时制时间格式(支持+年月日),支持填时间段,两个时间点之间用"~"符号连接 例如:15:01,或:2019年10月1日 15:01
date.DATA 日期 年月日格式(支持+24小时制时间),支持填时间段,两个时间点之间用"~"符号连接 例如:2019年10月1日,或:2019年10月1日 15:01
amount.DATA 金额 1个币种符号+10位以内纯数字,可带小数,结尾可带"元" 可带小数
phone_number.DATA 电话 17位以内,数字、符号 电话号码,例:+86-0766-66888866
car_number.DATA 车牌 8位以内,第一位与最后一位可为汉字,其余为字母或数字 车牌号码:粤A8Z888挂
name.DATA 姓名 10个以内纯汉字或20个以内纯字母或符号 中文名10个汉字内;纯英文名20个字母内;中文和字母混合按中文名算,10个字内
phrase.DATA 汉字 5个以内汉字 5个以内纯汉字,例如:配送中
enum.DATA 枚举值 只能上传枚举值范围内的字段值 调用接口获取参考枚举值

符号表示除中文、英文、数字外的常见符号,不能带有换行等控制字符。 时间格式支持HH:MM:SS或者HH:MM。 日期包含年月日,为y年m月d日,y年m月、m月d日格式,或者用'-'、'/'、'.'符号连接,如2018-01-01,2018/01/01,2018.01.01,2018-01,01-01。 每个模板参数都会以类型为前缀,例如第一个数字模板参数为number01.DATA,第二个为number02.DATA

例如,模板的内容为:

bash 复制代码
姓名: {{name01.DATA}}
金额: {{amount01.DATA}}
行程: {{thing01.DATA}}
日期: {{date01.DATA}}

则对应的json为

json 复制代码
{
  "touser": "OPENID",
  "template_id": "TEMPLATE_ID",
  "page": "index",
  "data": {
      "name01": {
          "value": "某某"
      },
      "amount01": {
          "value": "¥100"
      },
      "thing01": {
          "value": "广州至北京"
      } ,
      "date01": {
          "value": "2018-01-01"
      }
  }
}

3、发送消息

java 复制代码
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage;
import cn.binarywang.wx.miniapp.constant.WxMaConstants;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Slf4j
@Service
@RequiredArgsConstructor
public class WxMaMsgServiceImpl {

    private final WxMaService wxMaService;

    public void sendSubscribeMsg(WxMaSubscribeMessage reqVO) throws WxErrorException {
        WxMaSubscribeMessage message = new WxMaSubscribeMessage();
        message.setToUser("用户openId");
        message.setTemplateId("消息模板id");
        // 非必填
        message.setPage("点击模板卡片后的跳转页面,仅限本小程序内的页面");
        // 模板内容
        List<WxMaSubscribeMessage.MsgData> data = new ArrayList<>();
        data.add(new WxMaSubscribeMessage.MsgData("thing13", "美甲"));
        data.add(new WxMaSubscribeMessage.MsgData("phrase9", "预约成功"));
        data.add(new WxMaSubscribeMessage.MsgData("time22", "2025年06月18日 14:00"));
        data.add(new WxMaSubscribeMessage.MsgData("time23", "2025年06月18日 16:00"));
        data.add(new WxMaSubscribeMessage.MsgData("thing8", "已预约成功请注意查看"));
        message.setData(data);
        // 体验版
        reqVO.setMiniprogramState(WxMaConstants.MiniProgramState.TRIAL);
        // 正式版
        // reqVO.setMiniprogramState(WxMaConstants.MiniProgramState.FORMAL);
        wxMaService.getSubscribeService().sendSubscribeMsg(reqVO);
    }
}

4、前端订阅

javascript 复制代码
const noticeRes = await wx.requestSubscribeMessage({
  tmplIds: ['消息模板id1', '消息模板id2']
})
let acceptArray = []
// 消息1同意
if (noticeRes['消息模板id1'] === 'accept') {
  acceptArray.push('消息模板id1')
}
// 消息2同意
if (noticeRes['消息模板id2'] === 'accept') {
  acceptArray.push('消息模板id2')
}

然后把用户同意订阅的消息模板id传到后端,后端根据业务场景给用户发送对应的订阅消息即可。

如您在阅读中发现不足,欢迎留言!!!

相关推荐
hdsoft_huge2 小时前
SpringBoot 与 JPA 整合全解析:架构优势、应用场景、集成指南与最佳实践
java·spring boot·架构
张先shen5 小时前
Elasticsearch RESTful API入门:基础搜索与查询DSL
大数据·spring boot·elasticsearch·搜索引擎·全文检索·restful
慕木兮人可5 小时前
Docker部署MySQL镜像
spring boot·后端·mysql·docker·ecs服务器
毛毛三由6 小时前
基于svga+uniapp的微信小程序动画组件开发指南
微信小程序·uni-app·notepad++
苦学编程的谢8 小时前
SpringBoot项目的创建
java·spring boot·intellij-idea
武昌库里写JAVA8 小时前
vue3面试题(个人笔记)
java·vue.js·spring boot·学习·课程设计
敏叔V58710 小时前
SpringBoot实现MCP
java·spring boot·后端
小袁拒绝摆烂10 小时前
SpringCache整合SpringBoot使用
java·spring boot·后端
写不出来就跑路12 小时前
SpringBoot静态资源与缓存配置全解析
java·开发语言·spring boot·spring·springboot
vx_bscxy32213 小时前
springboot排课系统 -计算机毕业设计源码-23791
spring boot·后端·课程设计