springboot整合微信公众号实现模版消息推送

news2024/11/14 18:27:18

欢迎来到我的博客,代码的世界里,每一行都是一个故事


在这里插入图片描述

🎏:你只管努力,剩下的交给时间

🏠 :小破站

springboot整合微信公众号实现模版消息推送

    • 前言
    • 前提工作
    • 整合springboot
      • 配置
      • 实现逻辑
        • 基础
        • 1、要获取access_token
        • 2、推送模版信息给用户
        • 3、用户在公众号点击跳转到小程序

前言

在如今的互联网时代,微信已成为人们日常生活中不可或缺的一部分。微信公众号作为企业与用户互动的重要渠道,模版消息推送功能更是提升用户体验的关键之一。然而,对于很多开发者来说,如何将这一功能集成到现有的Spring Boot项目中,可能是一大挑战。本文将带你一步步实现这一目标,让你在实际开发中得心应手。

前提工作

1 、首先保证你的公众号认证为服务号,而非订阅号

image-20240704144921293

2、白名单中加入了自己平台的ip

image-20240704145012860

3 、已经设置了模版消息

image-20240704145108614

整合springboot

配置

对于公众号的相关信息,可以存到数据库中的相关配置表中,也可以放到yaml中

# application.yml
wechat:
  app-id: 你的微信公众号appid
  app-secret: 你的微信公众号secret
  token-url: https://api.weixin.qq.com/cgi-bin/token
  token-grant-type: client_credential
  xcx-app-id: 你的小程序appid
  template_id: 模版id
  template_url: https://api.weixin.qq.com/cgi-bin/message/template/send

实现逻辑

基础

因为项目实现属于gs项目,所以没法贴代码,这里给大家提供一个基本的思路

这里我们仅仅使用了http工具进行调用,简单的例子说明

/**
* description: 获取公众号access_token
*
* @return java.lang.String
*/
public static String getWechatAccessToken() {
		// 这里参数代码省略
  try {
    // 如果redis中有,那么直接从redis拿
    if (haveToken) {
      accessToken = JedisUtil.getJson(tokenKey);
    } else {
      // 获取access_token
      HttpResponse execute = HttpRequest.get(tokenRequestUrl).form(map).execute();
      JSONObject jsonObject = JSON.parseObject(execute.body());
      String returnAccessToken = jsonObject.getString("access_token");

      if (StrUtil.isBlank(returnAccessToken)) {
        throw new CustomException("获取微信公众号access_token失败");
      }
      JedisUtil.setJson(tokenKey, returnAccessToken, 7100);
      accessToken = returnAccessToken;
    }
  } catch (Exception e) {
    throw new CustomException("获取微信公众号access_token失败");
  }
  return accessToken;
}

上面的获取access_token使用了hutool工具类中的HttpRequest,对于get类型,最后的form中我们只需要加入参数map即可

1、要获取access_token

获取access_token官方文档
image-20240704150723758

代码中实现注意点

1、对于获取access_token来说因为它的返回是有过期时间的,所以我们没必要每次都去调用,比如可以把他放到redis中,可以少去频繁的调用

2、好多操作的前置操作都是获取这个token,所以可以把它作为一个通用方法

3、在本地环境调用的时候,会出现白名单问题,所以日志的输出还是很有必要性(本地ip会频繁变化)

2、推送模版信息给用户

推送模版信息给用户官方文档

入参说明:

{
  "touser":"OPENID",
  "template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
  "url":"http://weixin.qq.com/download",  
  "miniprogram":{
    "appid":"xiaochengxuappid12345",
    "pagepath":"index?foo=bar"
  },
  "client_msg_id":"MSG_000001",
  "data":{

    "keyword1":{
      "value":"巧克力"
    },
    "keyword2": {
      "value":"39.8元"
    },
    "keyword3": {
      "value":"2014年9月22日"
    }
  }
}

image-20240704154556997

注意点📢:

1、当前版本不可以再设置字体颜色

2、当前版本不可以自定变量名称,也就是在当时设置模版的时候会自动生成参数。

3、对于data中的参数要注意,每一种参数都会有一定的标签,所谓的标签比如字符限制,时间类型

4、pagepath为跳转到的小程序页面。后端在推送的时候可以拼接路由+id

5、常见报错为47003==》errmsg:argument invalid! data.thing11.value is empty,参数问题,首先看类型,其次看值。

6、涉及到日期的时候,可以直接用阿里的json转JSON.toJSONStringWithDateFormat(pullMap, "yyyy-MM-dd HH:mm:ss");

3、用户在公众号点击跳转到小程序

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

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

相关文章

【C++】———— 继承

作者主页: 作者主页 本篇博客专栏:C 创作时间 :2024年7月5日 一、什么是继承? 继承的概念 定义: 继承机制就是面向对象设计中使代码可以复用的重要手段,它允许在程序员保持原有类特性的基础上进行扩展…

[工具教程]-31-解决mac扣盖后电池耗电快(谁在偷偷的用电池)

查看耗电模式 $ pmset -g查看 hibernatemode 这一行,如果 hibernatemode 后面的数字是 0 ,那这种休眠模式下,掉电程度就是非常严重,如果 hibernatemode 后面的数字是 3 (大部分人的电脑应该是这个休眠模式&#xff09…

STM32智能电网监控系统教程

目录 引言环境准备智能电网监控系统基础代码实现:实现智能电网监控系统 4.1 数据采集模块 4.2 数据处理与分析 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:电网监控与优化问题解决方案与优化收尾与总结 1. 引言 智能电网监控系统通过S…

3款自己电脑就可以运行AI LLM的项目

AnythingLLM、LocalGPT和PrivateGPT都是与大语言模型(LLM)相关的项目,它们允许用户在本地环境中与文档进行交互,但它们在实现方式和特点上存在一些差异。AnythingLLM使用Pinecone和ChromaDB来处理矢量嵌入,并使用OpenA…

供应RTL8366SC-CG瑞昱芯片

标17566722766题 长期供应各品牌原装芯片: RTL8366SC-CG RTL8382L-VB-CG RTL8218D-CG RTL8192EU-VP-CG RTL8821CU-CG RTL8811CU-CG RTL8723DU-CG RTL8723DS-CG RTL8711AM-VB1-CG RTL8111H-VB-CG RTL8111H-CG RTL8211F-CG RTL8211E-VB-CG RTL8733BS…

codeforces 1633A

文章目录 1. 题目链接2. 题目代码正确代码错误代码 3. 题目总结 1. 题目链接 Div. 7 2. 题目代码 正确代码 #include<iostream> using namespace std; int main(){int testCase;cin >> testCase;while(testCase --){int ingeter;cin >> ingeter;if(!(inget…

c#类型转换和常见集合类型

目录 1. 整数转换&#xff0c;整数和字符串&#xff0c;字符串和整数之间的转换怎么实现&#xff1f; 2. 日期转换&#xff0c;获取当前日期&#xff0c;字符串转日期&#xff0c;日期转字符串怎么实现&#xff1f; 3. 举例一维、二维、三维数组 4. 需求&#xff1a;有个88…

git 文件没有修改,但一直提示有0行改动,还原也不行

查看文件修改内容 原来是文件的模式(读写可执行权限)发生了变化,内容本是没有变化. 怎么解决 git config --add core.filemode false忽略文件模式

力扣-贪心算法4

406.根据身高重建队列 406. 根据身高重建队列 题目 假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &#xff0c;前面 正好 有 ki 个身高大于或…

基于全国产复旦微JFM7K325T+ARM人工智能数据处理平台

复旦微可以配合的ARM平台有&#xff1a;RK3588/TI AM62X/ NXP IMX.8P/飞腾FT2000等。 产品概述 基于PCIE总线架构的高性能数据预处理FMC载板&#xff0c;板卡采用复旦微的JFM7K325T FPGA作为实时处理器&#xff0c;实现各个接口之间的互联。该板卡可以实现100%国产化。 板卡具…

LangChain(四)工具调用的底层原理!给大模型按上双手吧!(新手向)

背景 经过前面三篇的内容&#xff0c;我想大家对于大模型的构建、Langchain的优势、Chain的构建有了相当程度的理解&#xff08;虽然只是最简单的示例&#xff0c;但是足够有代表性&#xff09;。 后续Chain的使用将会更加丰富多彩&#xff0c;您会了解Langchain开发的大模型…

《向量数据库指南》——Milvus Cloud生成器增强:优化RAG Pipeline的深入探索

在信息检索与生成(Retrieval-Augmented Generation, RAG)的框架下,大型语言模型(Large Language Models, LLMs)如GPT系列、T5等,通过结合外部知识库的能力,极大地扩展了它们的应用场景与准确性。然而,在实际应用中,RAG系统仍面临诸多挑战,如检索到的信息中包含噪声、…

Linux 命令历史、补全和正则表达式

1.命令历史就和windows的ctrlz一个概念&#xff0c;就是返回上一次的命令。 按下小键盘上下切换 ctrlc可以终止本次输入&#xff0c;进行下一次输入。 2.tab键可以自动补全&#xff08;有点鸡肋&#xff09; 3.正则表达式 类似于word的快速搜索&#xff0c;Linux也是用*和…

SpringSecurity中文文档(Servlet Authorize HttpServletRequests)

Authorize HttpServletRequests SpringSecurity 允许您在请求级别对授权进行建模。例如&#xff0c;对于 Spring Security&#xff0c;可以说/admin 下的所有页面都需要一个权限&#xff0c;而其他所有页面只需要身份验证。 默认情况下&#xff0c;SpringSecurity 要求对每个…

Java套红:指定位置合并文档-NiceXWPFDocument

需求&#xff1a;做个公文系统&#xff0c;需要将正文文档在某个节点点击套红按钮&#xff0c;实现文档套红 试了很多方法&#xff0c;大多数网上能查到但是实际代码不能找到关键方法&#xff0c;可能是跟包的版本有关系&#xff0c;下面记录能用的这个。 一&#xff1a;添加依…

《C++20设计模式》命令模式思考

文章目录 一、前言二、分析 拆解1、经典命令模式2、撤销操作3、关于Invoker类 三、实现 一、前言 哎&#xff01;只要是书上写的和经典设计模式不同&#xff0c;我就会很伤脑筋。&#x1f629; 命令模式到底是干什么的&#xff1f; 答&#xff1a;命令的发送者和接收者完全解…

“一稿多投”是学术不端,还是作者的合法权利?

【SciencePub学术】“一稿多投”一直被认为是不端的行为&#xff0c;但这个“规矩”是在纸质时代信息沟通不畅的情况下制定的&#xff0c;近年来有关取消这一观念的声音已振聋发聩&#xff01; 詹启智的《一稿多投是著作权人依法享有的合法权利一一兼论一稿多发后果的规制》一文…

SpringBoot项目——送水管理系统

1、导入坐标 坐标作用pagehelper-spring-boot-startermybatis分页插件spring-boot-starter-thymeleafJSP模板引擎mybatis-spring-boot-startermybatisspring-boot-starter-webwebspring-boot-starter-testtestlombok不需要再写getter、setter或equals方法&#xff0c;只要有一…

建立有效的DNS性能检测机制

今天来分享如何建立有效的DNS性能监测机制&#xff0c;实时或定期监测关键指标。 一、建立DNS性能监测机制 &#xff08;一&#xff09;选择合适的监测工具 市场上有多种DNS性能监测工具可供选择&#xff0c;如IP数据云DNS检测功能。其具备强大的功能&#xff0c;能够针对多种…

简过网:快来看看你的专业能考哪个类型的事业单位?

你的专业能考哪个类型的事业单位&#xff0c;你知道吗&#xff1f;想考事业单位的姐妹&#xff0c;一定要在备考之前&#xff0c;查清楚你的专业适不适合考事业单位、考哪类事业编以及能报考哪些岗位&#xff1f;这个才能上岸的几率更高一些&#xff01; 事业单位有5类岗位&am…