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

news2024/11/24 1:02:53

文章目录

  • 一、准备工作
    • 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微信小程序订阅消息提醒,并对接微信小程序提醒模板。在实际开发中,需要根据业务需求调整消息内容和发送时机。同时,要注意遵守微信小程序平台的相关规定,确保订阅消息功能的合规使用。

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

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

相关文章

win11快速安装mysql数据库系统

win11快速安装mysql数据库系统 1、下载 1.1 打开官网 1.2 向下滚动页面 1.3 进入下载选项 1.4 下载8.0.4 LTS 1.5 开始下载 1.6 下载中 2、解压 大家注意&#xff0c;此时解压后目录是没有data目录的。 3、数据库初始化 3.1 管理员身份打开CMD 开始菜单上&#xff0c;输入…

【找到所有数组中消失的数字】leetcode,python

很菜的写法&#xff1a; class Solution:def findDisappearedNumbers(self, nums: List[int]) -> List[int]:nlen(nums)#存1-Nnum_1[i for i in range(1,n1)]#预存数num_2[]nums.sort()for i in nums:num_1[i-1]0for i in num_1:if i!0:num_2.append(i)return num_2能过但是…

link.click()时浏览器报错The file at ‘data:image/png;base64,iVBORw

代码如下&#xff1a; const dataURL canvas.toDataURL({format: "png",width: 400,height: 400, });const link document.createElement("a"); link.download new Date().getTime();link.href dataURL; document.body.appendChild(link); link.click…

webpack优化构建速度示例-合理配置loader的include exclude:

实际上&#xff0c;babel-loader 在 Webpack 配置中默认并不包含 exclude 和 include 选项的默认值&#xff0c;通常&#xff0c;为了优化构建性能&#xff0c;开发者会显式地设置 exclude 和 include 选项&#xff0c;以便 babel-loader 只处理必要的文件。 src/index.js impo…

【漏洞复现】Secnet-智能路由系统弱口令

0x01 产品简介 Secnet安网智能AC管理系统是广州安网通信技术有限公司(简称“安网通信”)的无线AP管理系统 0x02 漏洞描述 攻击者可直接利用弱口令登录系统 0x03 搜索语法 fofa: title"安网-智能路由系统" || title"智能路由系统" || title"安网科…

做海外问卷调查有什么方法技巧?

大家好&#xff0c;我是橙河老师&#xff0c;很久没更新文章了&#xff0c;一方面是比较忙&#xff0c;另一方面是觉得关于项目介绍的文章&#xff0c;写的也差不多了。 后面的文章&#xff0c;还是着重讲解不同渠道的特点、做题技巧、人设创建这些实战性的内容。 我不像其他公…

有什么操作简单的副业或兼职呢?

以下是操作简单的副业或兼职 1. 网络兼职 可以在网上找一些兼职工作&#xff0c;如网络营销、客服、文案撰写等&#xff0c;只需要有一台电脑和网络连接即可。 2. 手机任务 可以用手机做做致米宝库的任务&#xff0c;一天有一百多块钱&#xff0c;还可以电脑学习项目资源&am…

PCIE协议-2-事务层规范-Virtual Channel (VC) Mechanism

2.5 虚拟通道&#xff08;VC&#xff09;机制 虚拟通道&#xff08;VC&#xff09;机制提供了对可以在整个结构中传输使用TC&#xff08;流量类别&#xff09;标签区分的流量的支持。VC的基础是独立的结构资源&#xff08;队列/缓冲区及其相关的控制逻辑&#xff09;。这些资源…

异步I/O库-libuv介绍

1.简介 libuv是一个跨平台的支持事件驱动的异步I/O的库&#xff0c;使开发者可以以非阻塞的方式执行文件I/O操作、网络通信、子进程管理等。 libuv的主要特点包括&#xff1a; 事件循环&#xff1a;libuv有一个基于事件循环的模型&#xff0c;它不断地轮询事件&#xff0c;并…

VC++ 6.0开发文件重复整理工具开发

开发背景&#xff1a;手机上的文件越来越多&#xff0c;想要备份下文件结果文件太多杂乱无章且重复文件冗余存储造成存储空间滥发&#xff0c;所以决定开发一个小工具来整理重复文件。由于本人电脑运行慢&#xff0c;选择VC6.0作为开发IDE&#xff0c;操作虽然麻烦点&#xff0…

【记录】docker笔记(五):Docker网络-Network Namespace

Docker 网络理论基础 要了解docker网络&#xff0c;先了解如下基础概念。 Network Namespace Docker 网络的底层原理是 Linux 的 Network Namespace &#xff0c;所以对于 Linux Network Namespace 的理解对 Docker 网络底层原理的理解非常重要。 简介 Network Name…

java技术:nacos

目录 一、docker安装 1、创建一个nacos 2、复制配置信息出来&#xff08;方便修改配置文件&#xff09; 3、删除nacos 4、修改配置文件&#xff08;主要是一下几个&#xff09; 6、创建数据库 nacos 7、重启nacos mysql 一、docker安装 1、创建一个nacos docker run …

添砖Java之路(其七)——static

目录 static&#xff1a; 1.被类的所有对象所共享(和c有点像) 2.多了一种调用方法&#xff0c;可以通过类名调用 3.随着类的加载而加载&#xff0c;是优先于对象的存在。 工具类&#xff1a; 为什么主类的方法要加static&#xff1a; 理解 public static void main&#…

你还在手动加好友?试试这款神器,释放双手自动添加!

你还在手动添加微信好友吗&#xff1f;尤其是在忙碌的时候&#xff0c;手动加好友不仅费时又很容易出错。试试这个自动添加好友神器——个微管理系统&#xff0c;释放你的双手&#xff0c;轻松拓展好友列表&#xff01; 1、多号同时登录在线 系统支持多个微信号同时登录在线&…

USB-OTG:1、OTG原理介绍

目录 &#x1f345;点击这里查看所有博文 随着自己工作的进行&#xff0c;接触到的技术栈也越来越多。给我一个很直观的感受就是&#xff0c;某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了&#xff0c;只有经常会用到的东西才有可能真正记…

运维别卷系列 - 云原生监控平台 之 05.prometheus alertManager 实践

文章目录 [toc]Alertmanager 简介Alertmanager 实现的核心概念GroupingInhibitionSilencesClient behaviorHigh Availability Alertmanager 配置文件globaltemplatesrouteinhibit_rulesreceivers Alertmanager 部署创建 cm创建 svc创建 stsPrometheus 配置告警Prometheus 配置文…

010.理解异步性

异步消息传递是响应式系统的一个关键特性。但到底是什么异步性&#xff0c;为什么它对响应式应用程序如此重要?我们的人生注定在许多异步任务中。你可能没有意识到&#xff0c;但你的日常活动如果它们本质上不是异步的&#xff0c;那就太烦人了。要理解什么是异步&#xff0c;…

评价决策类-层次分析法

师从江北 问题引出 归一化处理&#xff1a;指标的数组[a b c]归一化处理得到[a/(abc),b/(abc),c/(abc)] 因为每个指标的重要性不同&#xff0c;所以要加上一个权重 如何科学的确定权重&#xff0c;就要用到层次分析法&#xff08;AHP&#xff09; 模型原理 建立递阶层次结构模…

利用一下Chat-GPT写两段处理字符串的简单样例ABAP程序。这样可以大大提高工作效率。Chat-GPT的能力真是让人震撼。

我让Caht-GPT写两段ABAP 程序&#xff0c;第一段程序要求如下&#xff1a; 判读字符串里面是否含有特殊字符&#xff0c;这里说的特殊字符不包括键盘上能够输入的字符&#xff0c;如果有这样的特殊字符则输出来。 DATA: lv_string TYPE string VALUE 你的字符串,lv_result TYP…

数据结构——二叉树知识点详解!

引言&#xff1a;本篇博客将详细介绍到数据结构中的又一位大将——二叉树。它也是我们目前学到的第一个非线性的数据结构。并且本章将学到的概念居多&#xff0c;希望大家可以理解并牢记。 更多有关C语言和数据结构知识详解可前往个人主页&#xff1a;计信猫 目录 一&#xff0…