springboot实现小程序订阅消息推送

2023-10-27

  • 1,拿到用户的openid
  • 2,获取access_token
  • 3,调用小程序消息推送的接口

一,获取用户的openid

        关于openid的获取百度一大堆方法,有兴趣的可以去查看一下,此处不在赘述。。。。。

二,获取access_token

        关于access_token官方给出的解答如下

        

        其实access_token就是小程序官方给我们提供的一个凭证,你要调用小程序官方的接口,就必须先拿到access_token

注意:grant_type是一个固定的值,只有appid和secret是需要我们填入的,这两个值在我们的小程序后台就可以拿到

话不多说,直接上代码 

 我这里用了springboot自带的RestTemplate来做网络请求。就是用RestTemplate来实现一个get请求

原代码:

//获取Access_Token
public String getAccessToken() throws Exception{
    RestTemplate restTemplate = new RestTemplate();
    Map<String, String> params = new HashMap<>();
    params.put("APPID", AppId);  //
    params.put("APPSECRET", AppSecret);  //
    ResponseEntity<String> responseEntity = restTemplate.getForEntity(
            "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={APPID}&secret={APPSECRET}", String.class, params);
    String body = responseEntity.getBody();
    JSONObject object = JSON.parseObject(body);
    String Access_Token = object.getString("access_token");
    String expires_in = object.getString("expires_in");
    log.info("有效时长expires_in:" + expires_in);
    return Access_Token;
}

注意点:

access_token是存在有效期的,先看官方解释

所以在获取到 access_token后可以存到数据库或者缓存中(推荐放到缓存中),之后用的时候直接判断是否超出2小时,超出后重新获取

通过上面两步就正式拿到access_token了,接下来就开始调用发送消息的接口,老规矩先看官方文档

上面的参数都是发送消息使用到的,模板id在小程序后台配置好模板后复制出来就可以了

推送消息代码如下

 

//发送订阅消息
private String push(String openid) throws Exception{
    RestTemplate restTemplate = new RestTemplate();
    //TODO 没有整合redis 每次获取最新的sendUrl
    String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + getAccessToken();
    //拼接推送的模版
    WxMssVo wxMssVo = new WxMssVo();
    wxMssVo.setTouser(openid);//用户的openid
    wxMssVo.setTemplate_id("xxxxxxxxx");//订阅消息模板id
    wxMssVo.setPage("pages/index/index");

    Map<String, TemplateData> m = new HashMap<>();
    m.put("thing1", new TemplateData("审核通知"));
    wxMssVo.setData(m);
    ResponseEntity<String> responseEntity =
            restTemplate.postForEntity(url, wxMssVo, String.class);
    return responseEntity.getBody();
}

最后再把对应的两个封装了放到下面,至此推送消息的接口就全部完成

WxMssVo用来封装请求参数
package com.scanapp.fangguanerscanapp.entity;

import lombok.Data;

import java.util.Map;

/**
 * @author zxy
 * @date 2021/10/11
 * @description 封装请求微信参数
 */
@Data
public class WxMssVo {

    private String touser;//用户openid

    private String template_id;//订阅消息模版id

    private String page = "pages/index/index";//默认跳到小程序首页

    private Map<String, TemplateData> data;//推送文字


}

 TemplateData定义消息内容

package com.scanapp.fangguanerscanapp.entity;

import lombok.Data;

/**
 * @author zxy
 * @date 2021/10/11
 * @description 定义消息内容
 */
@Data
public class TemplateData {


    private String value;

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

}

END。。。。。。。。。

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springboot实现小程序订阅消息推送 的相关文章

随机推荐

  • 洛谷T160512 G - 森林(并查集)

    题目思路 按照正常的并查集思路来想的话 对于操作一 分裂成两颗树后 比较难维护的是其中一颗子树的所有子节点的祖先节点 因为 在find找祖先节点的时候会找到分裂前的的那个祖先节点 如果给每个子节点都更改的话 复杂度不允许 但是 如果我们把删
  • 【Yarn】yarn源码阅读之AsyncDispatcher

    文章目录 1 概述 1 1 图示如下 2 源码解读 2 1 继承关系 2 2 构造方法 2 3 serviceInit方法 2 4 serviceStart 2 5 dispatch 2 6 注册类型方法 2 7 GenericEventH
  • (三)Qlabel显示图片

    在 一 QT学习中 我们说过label这个控件是可以显示图片的 那么这篇让我们看下如何显示图片 首先让我们创建一个项目picture 为项目布置上对应的控件label 让图片显示在label上 代码很简单 如下 QLabel abel ne
  • Unity+ECS框架(Entity Component System)学习(图文详细+源码)(一)——概念

    Unity ECS框架 Entity Component System 学习 图文详细 源码 一 概念 官方链接 一 ECS介绍 Entity 实体 Component 组件 System 系统 实例化系统 实例化系统 二 ECS概念 En
  • Java开发主流框架有哪些?

    SSM组合 SSM是一种Java Web开发的组合框架 是Spring Spring MVC和MyBatis的缩写 Spring是一个轻量级的Java应用框架 提供了一系列的模块 包括IoC容器 AOP MVC框架 数据访问和事务等 可以帮
  • react native xcode unable to open configuration settings file

    解决方案 pod install 然后重开 pod install可能会很久 pod install verbose 可以看进度
  • blender动画全面学习教程

    大小解压后 31 8G 时长28小时 包含项目文件 1920X1080 MP4 语言 英语 中英文字幕 根据原英文字幕机译更准确 Gumroad 活着 Blender中的动画课程 云桥网络 平台获取课程 信息 Alive 是迄今为止发布的最
  • Python import Queue ImportError: No module named 'Queue'

    python3 中引入Queue 会报出这个问题 python3 中这样引入 import queue python2 中这样引入 import Queue 为了兼容 可以这样 import sys if sys version gt 3
  • 机器学习-线性回归-多维度特征变量

    1 假设函数 之前的几篇文章里面 我们都只是介绍了单维特征变量的线性回归模型 比如预测房价的时候 我们只用了房子的面积这个维度 接下来我们会去研究多个维度的线性回归模型 还是从预测房价这个例子入手 假设我们现在不只是单纯的考虑房子的面积 还
  • verilog 简单分频程序

    偶数分频 最简单二分频 在输入时钟上升沿翻转即可 N分频 N为偶数 计数器计数到N 2 1翻转 如进行4分频 count 4 2 1 1时翻转 6分频计数器计到2 翻转 程序如下 经过实测验证 正确 时序如图 可以看出 从36到42是一个周
  • 西瓜书 第一章 绪论

    1 1 引言 理解机器学习 人类的 经验 对应计算机中的 数据 让计算机来学习这些经验数据 生成一个算法模型 在面对新的情况中 计算机便能作出有效的判断 这便是机器学习 1 2 基本术语 假设我们收集了一批西瓜的数据 例如 色泽 青绿 根蒂
  • linux下只读文件的修改方法

    命令前面加sudo 是以管理员方式打开
  • vue+flask实现视频目标检测yolov5

    开始做这个之前 了解一些vue的基础 然后对flask完全不知道 所以特别感谢很多博主的文章 主要参考的是这篇文章 在WEB端部署YOLOv5目标检测 Flask VUE 博主在GitHub上详细的代码给我一个很好的参考 他采用的是前后端分
  • latex公式自动换行与不自动换行的实现

    例如在双栏中 行内公式太长 就会溢出 很难看 公式中的元素 默认 有些是能自动换行 有些是不能的 例如 内的东西就不能自动换行了 如果是运算符 就能自动换行 可以参考下面这个博客讲的 Latex中行内公式如果在该行不能显示完整则会自动从下一
  • 安装了多个java 如何切换java版本

    安装了多个java 如何切换java版本 问题描述 平常用的是java8 最近在学习java的新特性 这就需要从java8往更高的java版本切换 由于还在使用java8 测试完新特性后我需要再切换回java8 如何切换 安装java的时候
  • JAVA,同级包下的类引用不需要import

    类ServiceResponse 的属性含有同级包下的属性类型为EServiceResPonseStatus类型的变量 此时并没有import引入 而只需要类EServiceResPonseStatus存在即可 如果EServiceResP
  • 连续整数检测法原理C语言,最大公约数的三种算法(欧几里得递归算法、连续整数检测算法、公共质因数相乘算法)...

    最大公约数的算法在编程中是比较典型的 常见的有三种 按效率高低分别为 欧几里得递归算法 连续整数检测算法 公共质因数相乘算法 如下 1 欧几里得递归算法 第一步 如果n 0 返回m值作为结果 同时过程结束 否则进入第二步 第二步 m除以n
  • Dubbo——快速启动(2)

    快速启动 Dubbo 采用全 Spring 配置方式 透明化接入应用 对应用没有任何 API 侵入 只需用 Spring 加载 Dubbo 的配置即可 Dubbo 基于 Spring 的 Schema 扩展 进行加载 mvn
  • Spring Boot创建定时任务(并实现动态参数传递执行)

    关于Spring Boot创建定时任务非常简单 有两种方式进行创建 第一种注解方式 静态参数 使用 Scheduled 进行创建定时任务 仅仅几行代码就可以完成 而且支持灵活的参数表达式cron 还有支持简单的延时操作 例如 fixedDe
  • springboot实现小程序订阅消息推送

    1 拿到用户的openid 2 获取access token 3 调用小程序消息推送的接口 一 获取用户的openid 关于openid的获取百度一大堆方法 有兴趣的可以去查看一下 此处不在赘述 二 获取access token 关于acc