Java微信小程序订阅消息提醒的实现与对接

文章目录

  • 一、准备工作
    • 1. 注册微信小程序,并开通订阅消息功能。
    • 2. 获取小程序的AppID和AppSecret。
    • 3. 在微信小程序管理后台,设置提醒模板,并获取模板ID。
    • 4. 小程序端需要获取用户订阅允许提醒的权限
      • (1)引导用户触发订阅
      • (2)编写订阅消息的JavaScript代码
      • (3)用户授权订阅
      • (4)后台发送订阅消息
      • (5)注意事项
  • 二、实现步骤
    • 1. 获取Access Token
    • 2. 用户订阅消息
    • 3. 发送订阅消息
  • 三、总结

在这里插入图片描述
微信小程序订阅消息提醒功能,允许开发者向用户提供一种主动推送消息的机制。通过该功能,用户可以订阅感兴趣的内容,一旦有更新,开发者就可以通过微信平台向用户发送消息提醒。本文将介绍如何使用Java实现微信小程序订阅消息提醒,并对接微信小程序提醒模板。

一、准备工作

1. 注册微信小程序,并开通订阅消息功能。

2. 获取小程序的AppID和AppSecret。

3. 在微信小程序管理后台,设置提醒模板,并获取模板ID。

4. 小程序端需要获取用户订阅允许提醒的权限

在小程序中,要获取用户订阅允许提醒的权限,需要遵循以下步骤:

  1. 模板配置:首先,在微信公众平台后台配置好订阅消息模板,并获取模板ID。
  2. 小程序代码编写:在小程序中编写调用订阅消息API的代码。
  3. 用户触发订阅:通过用户点击某个按钮或完成某个操作来触发订阅消息的请求。
  4. 用户授权:用户会看到一个弹窗,询问是否允许订阅该消息。
  5. 后台发送订阅消息:一旦用户同意订阅,后台就可以根据模板ID和用户OpenID发送订阅消息。
    下面是具体的实现步骤:

(1)引导用户触发订阅

在小程序中,通常会在用户完成某个操作(如查看详情、下单等)后,提供一个按钮引导用户订阅相关内容。

<button open-type="订阅消息" bindtap="subscribeMessage">订阅消息</button>

(2)编写订阅消息的JavaScript代码

在页面的js文件中,编写subscribeMessage函数,用于调用微信的wx.requestSubscribeMessage接口。

Page({
  subscribeMessage() {
    wx.requestSubscribeMessage({
      tmplIds: ['你的模板ID'],
      success(res) {
        if (res.errMsg === 'requestSubscribeMessage:ok') {
          // 用户同意订阅,可以在这里处理后续逻辑,如发送订阅消息等
          if (res['你的模板ID'] === 'accept') {
            // 用户同意订阅该模板ID的消息
            // 可以在这里调用服务器接口,将用户的订阅信息保存到数据库
          }
        }
      },
      fail(err) {
        // 订阅失败的处理
        console.log(err);
      }
    });
  }
});

(3)用户授权订阅

当用户点击“订阅消息”按钮时,会弹出授权窗口,询问用户是否允许订阅该消息。

(4)后台发送订阅消息

一旦用户同意订阅,后台服务器就可以根据用户的OpenID和模板ID发送订阅消息。这通常会在用户完成某个操作后触发,例如下单成功、预约成功等。

(5)注意事项

  • 订阅消息模板的内容和格式需要提前在微信公众平台配置好,且需要审核通过后才能使用。
  • 用户同意订阅后,开发者可以在7天内向用户发送一条订阅消息,超过这个时间期限,需要用户重新授权。
  • 订阅消息的使用需要遵守微信小程序的相关政策和规定,不得用于发送广告、营销等内容。
    通过以上步骤,小程序端可以获取用户订阅允许提醒的权限,并在合适的时机向用户发送订阅消息。

二、实现步骤

1. 获取Access Token

首先,需要通过AppID和AppSecret获取微信小程序的Access Token。Access Token是微信小程序API调用的凭证,具有时效性,需要定时更新。

public static String getAccessToken() {
    String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
    url = url.replace("APPID", yourAppId).replace("APPSECRET", yourAppSecret);
    String result = HttpUtil.get(url);
    JSONObject jsonObject = JSON.parseObject(result);
    return jsonObject.getString("access_token");
}

2. 用户订阅消息

在小程序中,当用户同意订阅消息时,需要调用微信API进行订阅。

public static void subscribeMessage(String openId, String templateId) {
    String accessToken = getAccessToken();
    String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + accessToken;
    JSONObject data = new JSONObject();
    data.put("touser", openId);
    data.put("template_id", templateId);
    data.put("page", "index");
    JSONObject miniprogram = new JSONObject();
    miniprogram.put("appid", yourAppId);
    data.put("miniprogram", miniprogram);
    // 设置消息内容
    JSONObject thing1 = new JSONObject();
    thing1.put("value", "thing1");
    JSONObject thing2 = new JSONObject();
    thing2.put("value", "thing2");
    JSONObject thing3 = new JSONObject();
    thing3.put("value", "thing3");
    JSONObject thing4 = new JSONObject();
    thing4.put("value", "thing4");
    JSONObject thing5 = new JSONObject();
    thing5.put("value", "thing5");
    JSONObject thing6 = new JSONObject();
    thing6.put("value", "thing6");
    JSONObject thing7 = new JSONObject();
    thing7.put("value", "thing7");
    JSONObject thing8 = new JSONObject();
    thing8.put("value", "thing8");
    JSONObject thing9 = new JSONObject();
    thing9.put("value", "thing9");
    JSONObject thing10 = new JSONObject();
    thing10.put("value", "thing10");
    data.put("data", new JSONObject().fluentPut("thing1", thing1)
            .fluentPut("thing2", thing2)
            .fluentPut("thing3", thing3)
            .fluentPut("thing4", thing4)
            .fluentPut("thing5", thing5)
            .fluentPut("thing6", thing6)
            .fluentPut("thing7", thing7)
            .fluentPut("thing8", thing8)
            .fluentPut("thing9", thing9)
            .fluentPut("thing10", thing10));
    String result = HttpUtil.post(url, data.toJSONString());
    System.out.println("订阅消息结果:" + result);
}

3. 发送订阅消息

当需要向用户发送订阅消息时,可以调用以下方法:

public static void sendSubscribeMessage(String openId, String templateId) {
    String accessToken = getAccessToken();
    String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + accessToken;
    JSONObject data = new JSONObject();
    data.put("touser", openId);
    data.put("template_id", templateId);
    data.put("page", "index");
    // 设置消息内容
    JSONObject thing1 = new JSONObject();
    thing1.put("value", "更新内容1");
    JSONObject thing2 = new JSONObject();
    thing2.put("value", "更新内容2");
    data.put("data", new JSONObject().fluentPut("thing1", thing1).fluentPut("thing2", thing2));
    String result = HttpUtil.post(url, data.toJSONString());
    System.out.println("发送订阅消息结果:" + result);
}

三、总结

通过以上步骤,我们可以实现Java微信小程序订阅消息提醒,并对接微信小程序提醒模板。在实际开发中,需要根据业务需求调整消息内容和发送时机。同时,要注意遵守微信小程序平台的相关规定,确保订阅消息功能的合规使用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VB6连接各种类型的数据库

VB6连接各种类型的数据库 一、连接VFP数据库 Dim CNN As New ADODB.Connection Dim rssys As New ADODB.Recordset If CNN.state 1 Then CNN.Close CNN.ConnectionString "Driver{Microsoft Visual FoxPro Driver};SourceType.DBc;SourceDb" Trim(Text1) CNN…

经济寒冬 | 品牌策划人还可以去哪些行业发展?

在这个经济寒冬下&#xff0c;咱们品牌策划人也需要考虑后路问题了。 随着市场竞争的加剧和消费者需求的不断变化&#xff0c;品牌策划人的工作不再只是简单的广告宣传和市场推广。 咱们需要重新思考自己的角色&#xff0c;寻找新的生存和发展之道。 当然&#xff0c;品牌策…

45°和68°焕新上市,五粮液完成产品体系化布局

执笔 | 尼 奥 编辑 | 扬 灵 如今&#xff0c;白酒行业正经历周期性调整&#xff0c;头部化和品牌化集中趋势日益显著。五粮液在这一关键时刻&#xff0c;敏锐地捕捉到市场机遇&#xff0c;通过产品焕新&#xff0c;进一步完善和丰富了其代际系列产品体系。 这一举措不仅巩…

大龄程序员是否要入职嵌入式python岗位?

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Python的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 是否要做嵌入式 Python 取决于…

提升写作效率的秘密武器:一个资深编辑的AI写作体验

有句话说:“写作是一项你坐在打字机前流血的工作。”而如今,各类生成式软件的涌现似乎打破了写作这一古老的艺术形式壁垒。过去,作家们独自在书桌前冥思苦想,如今,一款名为“玲珑AI工具”的ai写作助手正悄然改变着文案写作行业的创作生态,成为提升写作效率的秘密武器。 在传统…

通俗易懂讲乐观锁与悲观锁

浅谈乐观锁与悲观锁 乐观锁和悲观锁是Java并发编程中的两个概念。使用乐观锁和悲观锁可以解决并发编程中数据不一致性、死锁、性能差等问题&#xff0c;乐观锁与悲观锁的实行方式不同&#xff0c;所以其特性也不近相同&#xff0c;下文将详细介绍两者的特性与适用场景。 《熊…

【C语言】必备Linux命令和C语言基础

&#x1f31f;博主主页&#xff1a;我是一只海绵派大星 &#x1f4da;专栏分类&#xff1a;嵌入式笔记 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、文件和目录相关命令 Linux 的文件系统结构 文件系统层次结构标准FHS pwd命令 ls 列目录内容 文件的权限 c…

[董晓算法]搜索相关题目及模板

前言&#xff1a; 本系列是学习了董晓老师所讲的知识点做的笔记 董晓算法的个人空间-董晓算法个人主页-哔哩哔哩视频 (bilibili.com) 动态规划系列&#xff08;还没学完&#xff09; 【董晓算法】动态规划之线性DP问题-CSDN博客 【董晓算法】动态规划之背包DP问题&#xff…

NSSCTF | [SWPUCTF 2021 新生赛]ez_unserialize

打开题目&#xff0c;发现是一个GIF动图页面&#xff0c;什么都没有。我们来查看一下源代码&#xff0c;看看有没有什么发现 其实只要足够了解网站的构成&#xff0c;看到绿色的注释字样就能知道它这里在提示robots.txt文件。 但是对于小白来说&#xff0c;也不知道它是什么&a…

高效稳定,AH1515-15V转12V8A稳压芯片成为各种设备首选

高效稳定&#xff0c;AH1515 15V转12V稳压芯片成为各种设备首选 随着科技的不断发展&#xff0c;各种电子设备对电源的要求越来越高&#xff0c;尤其是电压稳定性和电流输出能力。为了解决这一问题&#xff0c;我国一款名为AH1515的稳压芯片应运而生&#xff0c;凭借其优异的性…

win11家庭中文版安装docker,报错 Docker Engine stopped

先引一下这位博主的链接超详细Windows11家庭中文版系统安装Docker-20230401_windows11安装docker-CSDN博客&#xff0c;我到前五步(跳出页面重启)和博主都是一样的&#xff0c;但是第六步我并没有报错&#xff0c;直接跳出docker界面 记录一下我的解决办法&#xff0c;首先按照…

[链表专题]力扣141, 142

1. 力扣141 : 环形链表 题 : 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾…

2024042001-计算机网络 - 物理层

计算机网络 - 物理层 计算机网络 - 物理层 通信方式带通调制 通信方式 根据信息在传输线上的传送方向&#xff0c;分为以下三种通信方式&#xff1a; 单工通信&#xff1a;单向传输半双工通信&#xff1a;双向交替传输全双工通信&#xff1a;双向同时传输 带通调制 模拟信号…

深度盘点解析一家公司的PMO的定位与发展规划

对于一家公司的PMO(项目管理办公室)的定位与发展规划,今天从以下几个方面进行深度盘点和解析,具体如下: 一、PMO的定位 1. 战略与推手:PMO是持续提升组织项目管理水平,实现组织所有项目成功的重要推手。它站在公司战略的高度,从全局视角出发,对公司内部的项目进行统一…

使用高防IP是应对网络安全的重要措施

使用高防IP&#xff08;High Defense IP&#xff09;在现代网络环境中显得尤为重要&#xff0c;这主要源于以下几个方面的原因&#xff1a; 一、网络安全形势严峻 随着互联网的快速发展&#xff0c;网络安全问题日益突出。各种网络攻击手段层出不穷&#xff0c;如分布式拒绝服…

结合小波变换的遥感语义分割网络,融合频域和空间域特征提升分割效果

题目:SFFNet: A Wavelet-Based Spatial and Frequency Domain Fusion Network for Remote Sensing Segmentation 论文:http://arxiv.org/abs/2405.01992 代码:https://github.com/yysdck/SFFNet 年份:2024 创新点 两阶段网络SFFNet:网络首先使用空间方法提取特征,以保…

论:即时战略RTS游戏的小地图采用 自下而上的汇报式 还是 自上而下的查找式?

关键词&#xff1a;RTS 小地图 游戏设计 思路 卫星 位置映射 阵营 更新 汇报 询问 UE4 UE5 Unreal Engine 前言 你是否想过类似红色警戒的战略小地图的要素是采用何种方式更新数据的。大量数据实时更新&#xff0c;考虑频率&#xff0c;运行效率&#xff0c;开发中如何选型&a…

「每日跟读」英语常用句型公式 第15篇

「每日跟读」英语常用句型公式 第15篇 1. It’s only logical that __ 合理的做法/结论是__ It’s only logical that we should take a break &#xff08;合理的做法是我们应该休息一下&#xff09; It’s only logical that we work hard to make money&#xff08;合理…

SQL注入漏洞常用绕过方法

SQL注入漏洞 漏洞描述 Web 程序代码中对于用户提交的参数未做过滤就直接放到 SQL 语句中执行&#xff0c;导致参数中的特殊字符打破了原有的SQL 语句逻辑&#xff0c;黑客可以利用该漏洞执行任意 SQL 语句&#xff0c;如查询数据、下载数据、写入webshell 、执行系统命令以及…

详细分析Vue3中的ref(附Demo)

目录 前言1. 基本知识2. Demo 前言 由于新项目涉及Vue3&#xff0c;本着探究问题的本质研究所不会的疑问 1. 基本知识 ref 是 Vue 3 中用于创建响应式数据的函数 接收一个初始值并返回一个包含了该值的响应式引用对象与 Vue 2.x 中的 data 属性不同&#xff0c;ref 返回的是…