【微信小程序】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传到后端,后端根据业务场景给用户发送对应的订阅消息即可。

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

相关推荐
递归尽头是星辰4 小时前
Spring Boot 配置排除失效深度解析:时序与机制核心
spring boot·自动配置·bean 加载·exclude失效·组件扫描
小锋java12346 小时前
SpringBoot 4 + Spring Security 7 + Vue3 前后端分离项目设计最佳实践
java·vue.js·spring boot
一 乐6 小时前
校园线上招聘|基于springboot + vue校园线上招聘系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·校园线上招聘系统
不懂的浪漫6 小时前
mqtt-plus 架构解析(四):MqttMessageInterceptor 的扩展点设计
java·spring boot·物联网·mqtt
宠友信息7 小时前
一套基于uniapp+springboot完整社区系统是如何实现的?友猫社区源码级功能解析
java·spring boot·后端·微服务·微信·uni-app
阿丰资源8 小时前
SpringBoot+MySQL+MyBatis-Plus+Vue前后端分离仓库管理系统 (附资料)
spring boot·mysql·mybatis
小信丶8 小时前
Spring Cloud Stream EnableBinding注解详解:定义、应用场景与示例代码
java·spring boot·后端·spring
s1mple“”8 小时前
互联网大厂Java面试实录:谢飞机的AIGC求职之旅 - JVM并发编程到Spring Cloud微服务
spring boot·aigc·微服务架构·java面试·分布式系统·rag技术·redis数据库
ffqws_8 小时前
Spring Boot入门:通过简单的注册功能串联Controller,Service,Mapper。(含有数据库建立,连接,及一些关键注解的讲解)
数据库·spring boot·后端
YDS8298 小时前
大营销平台 —— 抽奖前置规则过滤
java·spring boot·ddd