微信小程序+Springboot实现订阅消息推送 (demo)

news2025/8/4 21:00:32

1. 开通订阅消息

2. 选用模板

  订阅消息 - 公共模板库 - 选用

3. 选择关键词 

勾选关键词 - 最多勾选5个 - 显示例子

 

4. 我的模板

 

5. 订阅号开发者-文档: 发送订阅消息 | 微信开放文档

6. 依赖
<dependency>
	<groupId>com.alibaba.fastjson2</groupId>
	<artifactId>fastjson2</artifactId>
	<version>2.0.32</version>
</dependency>
<dependency>
	<groupId>cn.hutool</groupId>
	<artifactId>hutool-all</artifactId>
	<version>5.3.3</version>
</dependency>

7. MessageVo
import lombok.Data;
import java.util.Map;


/**
 * 封装请求参数
 */
@Data
public class MessageVo {

    // 接收者(用户)的 openid
    private String touser;
    // 订阅消息模板id
    private String template_id;
    // 默认跳到小程序首页
    private String page = "pages/index/index";
    // 推送文字
    private Map<String, TemplateData> data;
    // developer为开发版;trial为体验版;formal为正式版;默认为正式版
    private String miniprogram_state;
    // zh_CN(简体中文)
    private String lang;
}

8. TemplateData
import lombok.Data;


/**
 * 封装订阅消息内容
 */
@Data
public class TemplateData {

    private String value;

    public TemplateData(String value){
        this.value = value;
    }
}

9. SendMessage
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.Map;

@Slf4j
@Service
public class SendMessage {

    /**
     * 发送订阅消息
     * @return
     */
    public String send(){


        RestTemplate restTemplate = new RestTemplate();

        // url + access_token(接口调用凭证)
        String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + "access_token";

        // 拼接推送的模板
        MessageVo vo = new MessageVo();
        // 要发送给哪个用户 (动态传进来)
        vo.setTouser("用户openid");
        vo.setTemplate_id("模板id");
        // 必填(否)
        vo.setPage("pages/index/index");
        // developer为开发版;trial为体验版;formal为正式版;默认为正式版
        vo.setMiniprogram_state("developer");
        // 语言类型
        vo.setLang("zh_CN");


        Map<String, TemplateData> map = new HashMap<>(5);

        /**封装模板消息内容, 必须和你申请的小程序模板格式一模一样, 并一一对应*/
        // 商品名称
        map.put("thing1",new TemplateData("商品名称"));
        // 支付时间
        map.put("time2",new TemplateData("支付时间"));
        // 支付金额
        map.put("amount3",new TemplateData("支付金额"));
        // 订单号
        map.put("character_string4",new TemplateData("订单号"));
        // 支付方式
        map.put("thing5",new TemplateData("支付方式"));
        vo.setData(map);


        ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, vo, String.class);
        String bodyAsString = responseEntity.getBody();

        JSONObject json = JSON.parseObject(bodyAsString);
        String errcode = json.getString("errcode");
        String errmsg = json.getString("errmsg");
        if (("ok").equals(errmsg)) {
            log.info("发送订阅消息成功: {}", bodyAsString);
        } else {
            log.info("发送订阅消息失败: {}", bodyAsString);
        }
        return bodyAsString;
    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/970343.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

淘宝API接口解析,实现获得淘宝商品快递费用

要获取淘宝商品快递费用&#xff0c;需要使用淘宝的开放平台API接口。以下是一个基本的示例&#xff0c;解析并实现获取淘宝商品快递费用的API接口。 首先&#xff0c;你需要访问淘宝开放平台并注册一个开发者账号。注册完成后&#xff0c;你需要创建一个应用并获取到API的权限…

滑动窗口实例7(串联所有单词的子串)

题目&#xff1a; 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如&#xff0c;如果 words ["ab","cd","ef"]&#xff0c;…

iPhone勿扰模式如何设置?1分钟学会!

上班的时候手机信息一直“噔、噔、噔”的响&#xff0c;开了静音模式也没用&#xff0c;信息一来手机还是会一直震动&#xff0c;搞得我无法安心工作&#xff0c;还有什么方法可以将这些信息免打扰吗&#xff1f; iPhone手机有一个功能叫做【勿扰模式】&#xff0c;它能够帮助用…

多numa设备,如何看网卡插在哪个numa上

1.在Linux系统中&#xff0c;可以通过lstopo命令来查看系统的NUMA拓扑结构。这个命令通常随着hwloc包一起提供。 安装hwloc包&#xff1a;yum install hwloc 使用lstopo命令来显示系统的NUMA拓扑结构。 &#xff08;在bclinux安装后&#xff0c;只有lstopo-no-graphics命令&…

TSN协议解读系列 | (2) Qbv:车间里的求知路

时春季夜间&#xff0c;风清月朗&#xff0c;周期仿佛又轮转到了从前。一位不修篇幅的老头&#xff0c;牙还没刷&#xff0c;却已然歪头斜躺在床上&#xff0c;床边微亮的显示屏上隐约可见Victory的字样&#xff0c;不一会儿就熄了屏。 这正是我们今天的主人公&#xff0c;Qbv…

微服务-gateway跨域配置

文章目录 一、前言二、gateway跨域配置1、问题描述1.1、什么是跨域请求&#xff1f;1.1.1、同源策略1.1.2. 安全性考虑1.1.3. 跨域攻击 1.2、问题产生原因 2、解决方法2.1、修改配置文件2.2、配置类统一配置2.3、全局跨域拦截器 三、总结 一、前言 在SpringCloud项目中&#x…

C++ - 继承 一些 细节 - 组合 和 继承的区别

前言 本篇博客基于 C - 继承_chihiro1122的博客-CSDN博客 之上列出一些例子&#xff0c;如果有需要请看以上博客。 继承的例子 例1 上述例子应该选择 C。 首先不用说&#xff0c;p3肯定是指向 d 对象的开头的&#xff1b;p1 也是指向 d 对象的开头的&#xff1b;…

网站监控系统最佳实践之静态资源采样上报

作者 观测云 产品服务部门 深圳团队 朱端畅 背景说明 通过 RUM 采集前端数据时&#xff0c;若采集的数据过多&#xff0c;可能会导致占用过多的网络带宽以及其他资源。特别是刚进入首页加载数据时&#xff0c;可能会调用几十次甚至更多次 v1/write/rum?precisionms数据采集接…

spacy安装旧版本en_core_web_sm的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Navicat Premium 16.2.7 数据库管理教程

Navicat Premium 16.2.7是一款功能强大的数据库管理工具&#xff0c;支持多种数据库类型&#xff0c;包括MySQL、Oracle、SQL Server等。以下是使用Navicat Premium的基本步骤&#xff1a; 安装Navicat Premium软件。打开Navicat Premium&#xff0c;在主界面上选择“新建连接…

实现高效数据存储:OpenStack Swift与本地文件系统的完美对接

文章目录 Swift对接本地文件系统前言控制节点新增20G磁盘针对磁盘做分区&#xff08;2个&#xff09;针对磁盘格式化卸载原有的 Swift 虚拟设备创建两个目录并挂载更改权限创建builder创建ring再平衡测试配合glance对接swiftglance对接swift测试 Swift对接本地文件系统 前言 实…

OpenCV实战(31)——基于级联Haar特征的目标检测

OpenCV实战&#xff08;31&#xff09;——基于级联Haar特征的目标检测 0. 前言1. Haar 特征图像表示2. 基于级联 Haar 特征的二分类分类器3. 级联分类器算法流程4. 使用 Haar 级联检测器进行人脸检测5. 完整代码小结系列链接 0. 前言 在机器学习基础一节中&#xff0c;我们介…

【Linux】文件缓冲区

目录 一、缓冲区图解二、自定义实现文件操作函数三、强制刷新内核缓冲区&#xff08;fsync&#xff09; 提到文件缓冲区这个概念我们好像并不陌生&#xff0c;但是我们对于这个概念好像又是模糊的存在脑海中&#xff0c;之间我们在介绍c语言文件操作已经简单的提过这个概念&…

NoSQL MongoDB Redis E-R图 UML类图概述

NoSQL NoSQL(Not only SQL)是对不同于传统的关系数据库的数据库管理系统的统称&#xff0c;即广义地来说可以把所有不是关系型数据库的数据库统称为NoSQL。 NoSQL 数据库专门构建用于特定的数据模型&#xff0c;并且具有灵活的架构来构建现代应用程序。NoSQL 数据库使用各种数…

CIM和websockt-实现实时消息通信:双人聊天和消息列表展示

欢迎大佬的来访&#xff0c;给大佬奉茶 一、文章背景 有一个业务需求是&#xff1a;实现一个聊天室&#xff0c;我和对方可以聊天&#xff1b;以及有一个消息列表展示我和对方&#xff08;多个人&#xff09;的聊天信息和及时接收到对方发来的消息并展示在列表上。 项目框架概…

SNP 分享:SAP S/4HANA Cloud 私有云版本及其独特优势

近几年来&#xff0c;SAP一直强调其愿景是帮助客户达成智慧型企业(Intelligent Enterprise)&#xff0c;为此其相关产品也在不断进行快速迭代&#xff0c;其核心就是S4HANA。同时SAP一直强调其要成为一家云计算公司&#xff0c;近些年也一直在推行云优先战略(Cloud First)。因此…

指针(通过指针间接访问内存)

#include <iostream> #include <algorithm> using namespace std; int main() { int a 2;//定义指针 &#xff1a; 数据类型 *指针变量名;int *p &a;cout << &a << " " << p << endl;//使用指针 &#xff1a; 可以通过…

怎么把表情包做成动态?分享一个简单的方法

表情包在我们的日常交流中已经成为了一种非常流行的表达方式&#xff0c;而将表情包做成动态则可以让它更加生动有趣。本文将介绍如何将表情包制作成动态图&#xff0c;以及一些简单的方法和制作注意事项。 制作动态表情包的方法有很多种&#xff0c;以下是其中两种简单易行的方…

SpringCloud面试题大全(Netflix+Alibaba)

SpringCloud面试题大全 ​ Spring cloud 是一个基于 Spring Boot 实现的服务治理工具包&#xff0c;用于微服务架构中管理和协调服务的。Spring Cloud 是一系列框架的有序集合。它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发&#xff0c;如服务发现注…

华为云云服务器评测 | 3分钟搞懂如何在华为云服务器安装Nginx并配置静态访问页面

文章目录 一、什么是Nginx&#xff1f;二、申请华为云服务器三、使用XShell连接华为云服务器并安装Nginx四、FileZilla连接服务器五、Linux下安装Nginx❇️配置80端口并关闭Linux防火墙✳️测试 六、配置静态html至华为云服务器并访问⚠️在华为服务器新建路径⏰使用Filezilla上…