微信小程序01: springboot获取accessToken方式 ,配合redis缓存使用

news2024/11/15 15:43:50

全文目录,一步到位

  • 1.前言简介
    • 1.1 专栏传送门
      • 1.1.1 上文小总结
      • 1.1.2 上文传送门
  • 2. springboot获取accessToken
    • 2.0 accessToken简介
    • 2.1 准备工作
    • 2.2 具体代码使用与注释如下
      • 2.2.1 代码解释(一)[无需复制]
      • 2.2.2 代码解释(二)[无需复制]
    • 2.3 最后一步 获取accessToken
      • 2.3.1 两行代码搞定
      • 2.3.2 微信小程序异常码(如图所示)
  • 3. 文章的总结与预告
    • 3.1 本文总结
    • 3.2 下文预告


1.前言简介

access_token是有次数限制一天2000次 超过了需要刷新accessToken限制次数,10次/月

1.1 专栏传送门

1.1.1 上文小总结

上文为核心文章, 请先复制上文的代码后再复制此篇代码
里面是对微信小程序大部分操作的总结与封装

1.1.2 上文传送门

===> 微信小程序00: 获取accessToken,手机号, 小程序二维码,openId与unionId 公共配置类(核心篇)

2. springboot获取accessToken

微信小程序官方文档: => 传送门 <=
在这里插入图片描述

2.0 accessToken简介

access token即访问令牌的概念。
微信公众平台注册微信公众号时,微信平台会分配你一个appid
appsecret

  • 用appid和appsecret用来产生access_token
  • 是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。
  • access_token的存储至少要保留512个字符空间。
  • access_token的有效期目前为2个小时,需定时刷新

2.1 准备工作

2.0简介中提到几个关键词

  • 公众号, appid appsecret
  • 字符空间: 512
  • 过期时间: 两小时

所以准备步骤如下:

  1. 注册公众号 获取appid与appsecret =>传送门: 小程序信息获取方式 <=
  2. 上文配置文件中填写这俩参数 名字对应
  3. 需要准备redis存储accessToken 过期时间小于两小时(建议不要等于) String类型即可
  4. 启动类执行时执行一次
  5. 定时器 每低于2小时内执行一次 我是一小时执行一次

整体执行思路

  1. 项目启动时 执行一次向微信请求获取accessToken,并将其存入redis中设置过期时间(大于60分钟, 小于120分钟)
  2. 定时器每小时整点执行获取一次, 重新赋值给redis
  3. 每次请求均请求redis的key, 定时任务执行失败, 支持直接请求微信接口获取

2.2 具体代码使用与注释如下


特别注意: 请先复制上篇: ===> 微信小程序00: 获取accessToken,手机号, 小程序二维码,openId与unionId 公共配置类(核心篇)

2.2.1 代码解释(一)[无需复制]

找到WechatServiceUtils类 的 getRedisCacheAccessToken()方法
这个是获取缓存中的accessToken

     * 2. 获取缓存中的AccessToken
     * <p>
     * 没有从微信拉取[可配合定时]
     *
     * @return accessToken
     */
    public String getRedisCacheAccessToken() {
        /*校验: 缓存中有accessToken的key*/
        if (redisCache.hasKey(CacheConstants.WX_ACCESS_TOKEN)) {

            log.info("二级缓存数据取出accessToken成功!");

            return redisCache.getCacheObject(CacheConstants.WX_ACCESS_TOKEN);
        }
        //这里不用三目(不好看~~)
        return getWxMiniAccessToken();
    }

2.2.2 代码解释(二)[无需复制]

找到WechatServiceUtils类 的 getWxMiniAccessToken()方法
访问微信官方获取两小时的 accessToken

  • JSONObject 需要引fastJson/fastJson2包
/**
     * 3. 访问微信官方获取两小时的 accessToken
     *
     * @return accessToken
     */
    public String getWxMiniAccessToken() {
        Map<String, String> query = new HashMap<>();
        query.put("grant_type", wechatConfigProperties.getGrantType());//client_credential
        query.put("secret", wechatConfigProperties.getAppSecret());
        query.put("appid", wechatConfigProperties.getAppId());
        try {
            String aTokenUrl = wechatConfigProperties.getATokenUrl();
//            ResponseEntity<JSONObject> responseEntity = restTemplate.postForEntity(aTokenUrl, query, JSONObject.class);
            ResponseEntity<JSONObject> responseEntity = restTemplate.getForEntity(aTokenUrl, JSONObject.class, query);
            HttpStatus statusCode = responseEntity.getStatusCode(); //状态码

//            System.out.println(responseEntity.getHeaders());//获取到头信息

            /*校验: 如果接口成功 200*/
            if (Objects.equals(statusCode.value(), 200)) {
                JSONObject responseJsonBody = responseEntity.getBody();//响应体


                log.info("[请求微信小程序官方接口] => 获取accessToken请求成功返回值:{}", responseJsonBody);

                if (responseJsonBody == null) {
                    log.info("微信小程序获取accessToken请求返回result是null!");
                    throw new ServiceException(ResponseEnum.A10005);
                }
                //获取accessToken
                String accessToken = responseJsonBody.getString("access_token");
                if (StringUtils.isBlank(accessToken)) {
                    log.info("微信小程序获取accessToken请求返回access_token是null!");
                    throw new ServiceException(ResponseEnum.A10005);
                }
                //放入缓存中
                redisCache.setCacheObject(CacheConstants.WX_ACCESS_TOKEN, accessToken, wechatConfigProperties.getExpiredTime(), TimeUnit.MINUTES);

                return accessToken;
            } else {
                log.error("微信HttpStatus的StatusCode不是200 {}", statusCode.value());
                throw new ServiceException(ResponseEnum.A10005);
            }
        } catch (Exception e) {
            e.printStackTrace();
            log.info("微信小程序获取accessToken请求异常信息 {}", e.getMessage());
            throw new ServiceException(ResponseEnum.A10005);
        }
    }

2.3 最后一步 获取accessToken

2.3.1 两行代码搞定

第一行代码 AutoWired注入一下 (我用的lombok注解@RequiredArgsConstructor)

解释一下:

  • @AutoWired可以加到构造方法上, 同时在构造方法上的注入会自动填充
  • 那么也就是全参构造 @AllArgsConstructor 注解, 替代了属性上的@AutoWired
  • 有一些属性不希望@AutoWired, 在希望的属性上加final, 在类上加@RequiredAllArgsConstructor 代码如下
 private final WechatServiceUtils wechatServiceUtils;

第二行代码 直接获取即可

 //1.获取access_token
String accessToken = wechatServiceUtils.getRedisCacheAccessToken();

执行结果如下:
在这里插入图片描述

2.3.2 微信小程序异常码(如图所示)

在这里插入图片描述
到此本文结束

3. 文章的总结与预告

3.1 本文总结

  1. redis使用
  2. 文档的查看与使用
  3. restTemplate的使用(httpUtils等等都行 自己写也行)
  4. 微信文档没有坑,说明也挺清晰

3.2 下文预告

  1. 获取openId与unionId
  2. 获取不限制小程序二维码
  3. 获取手机号(新版)


作者pingzhuyan 感谢观看

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

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

相关文章

kubernetes负载均衡部署

目录 1.新master节点的搭建 对master02进行初始化配置&#xff08;192.168.88.31&#xff09; 将master01的配置移植到master02 修改master02配置文件 2.负载均衡的部署 两台负载均衡器配置nginx 部署keepalived服务 所有node节点操作 总结 实验准备&#xff1a; k8s…

【区块链】智能交易模式下的数据安全流通模型

【区块链】智能交易模式下的数据安全流通模型 写在最前面**区块链智能交易模式概述****数据安全流通的挑战****数据安全流通模型的核心要素****实现数据安全流通的区块链技术****区块链智能交易模式下数据安全流通模型的设计原则****数据安全流通模型的应用案例分析****面临的挑…

海外媒体推广通过5个发稿平台开拓国际市场-华媒舍

随着全球化的进程&#xff0c;国际市场对于企业的吸引力日益增加。进入国际市场并获得成功并非易事。海外媒体推广发稿平台成为了一种重要的营销手段&#xff0c;能够帮助企业在国际市场中建立品牌形象、传递信息和吸引目标受众。本文介绍了五个海外媒体推广发稿平台&#xff0…

什么是去中心化云计算?

去中心化云计算是一种新型的云计算方式&#xff0c;它与传统的中心化云计算不同&#xff0c;将数据和计算任务分布到多个节点上&#xff0c;而不是将数据集中存储在中心服务器上。这种云计算方式具有许多优势&#xff0c;包括提高数据安全性、降低运营成本、增强可扩展性和灵活…

2_怎么看原理图之协议类接口之UART笔记

通信双方先约定通信速率&#xff0c;如波特率115200 一开始时&#xff0c;2440这边维持高电平 1> 开始发送时&#xff0c;由2440将&#xff08;RxD0&#xff09;高电平拉低&#xff0c;并持续一个T的时间&#xff08;为了让PC机可以反应过来&#xff09;&#xff0c;T1/波…

无公网IP情况下如何远程查看本地群晖NAS存储的文件资源

文章目录 前言本教程解决的问题是&#xff1a;按照本教程方法操作后&#xff0c;达到的效果是前排提醒&#xff1a; 1. 搭建群晖虚拟机1.1 下载黑群晖文件vmvare虚拟机安装包1.2 安装VMware虚拟机&#xff1a;1.3 解压黑群晖虚拟机文件1.4 虚拟机初始化1.5 没有搜索到黑群晖的解…

提示工程(Prompt Engineering)、微调(Fine-tuning) 和 嵌入(Embedding)

主要参考资料&#xff1a; 还没搞懂嵌入&#xff08;Embedding&#xff09;、微调&#xff08;Fine-tuning&#xff09;和提示工程&#xff08;Prompt Engineering&#xff09;&#xff1f;: https://blog.csdn.net/DynmicResource/article/details/133638079 B站Up主Nenly同学…

XUbuntu22.04之解决:systemd-journald占用cpu过高问题(二百一十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

2024如何恢复旧版的Chrome的主题样式

起因 chrome 更新版本之后的主题样式变成了浅紫色的页签卡样式&#xff0c;感觉很不习惯&#xff0c;也很不喜欢 如何换回旧版主题 通过主题商店&#xff0c;安装旧版本的主题 主题商店搜索下面&#xff0c;或着直接访问下面的地址 Chrome Original White Theme https://…

【原理图专题】OrCAD Capture原理图属性过滤器

在使用Orcad Capture CIS进行原理图设计时,在拷贝了其他器件或网络时,往往连同属性一起带入到自己的设计中。 如下所示其中很多属性是没有用到的。比如我们在导BOM或平时看的时候,根本不关注器件是哪个作者(author)画的。还有一些如Graphic等等。 原理图中属性太多,而想…

【力扣hot100】刷题笔记Day11

前言 科研不顺啊......又不想搞了&#xff0c;随便弄弄吧&#xff0c;多花点时间刷题&#xff0c;今天开启二叉树&#xff01; 94. 二叉树的中序遍历 - 力扣&#xff08;LeetCode&#xff09; 递归 # 最简单递归 class Solution:def inorderTraversal(self, root: TreeNode) …

DBAPI如何使用数组类型参数

DBAPI如何使用数组类型参数 需求 根据多个id去查询学生信息 API创建 在基本信息标签&#xff0c;创建参数ids &#xff0c;参数类型选择 Array<bigint> 在执行器标签&#xff0c;填写sql&#xff0c;使用in查询 select * from student where id in <foreach ope…

多种方法合并Python中的两个列表、字典

直接看例子 两个字典的合并&#xff1a;已知字典 a{a: 1, b: 2, c: 3} 和 b{d: 4, e: 5, f: 6} 合并方法1&#xff1a; dict(a, **b) 操作如下&#xff1a; >>> a{a:1,b:2,c:3} >>> b{d:4,e:5,f:6} >>> dict(a,**b) {a: 1, b: 2, c: 3, d: 4, e:…

ETA1061V50S2G 输出5V 钰泰 同步升压转换器 1MHZ

描述 ETA1061是一种高效率的同步升压转换器&#xff0c;具有超低静态电流小于1μA。如果从低电压源提供至少2W的功率&#xff0c;即在5V输出时提供0.4A的功率它还具有一个真正的切断功能&#xff0c;从输出断开输入&#xff0c;在关机和输出短路条件。这消除了对外部MOSFET及其…

【JavaEE Spring 项目】在线 OJ 系统

在线OJ系统 1. 需求2. 最终页面展示3. 需求分析4. 创建 Spring 项目5. 前后端交互接口约定6. 后端功能实现6.1 编译运行模块6.1.1 进程和线程的相关知识6.1.2 Java 中的多进程编程6.1.3 进程间通信 -- 文件6.1.4 Java中的 IO 知识6.1.5 封装创建进程执行命令工具类6.1.6 实现编…

35.搜索插入位置+825.山脉数组的峰顶索引(二分查找的应用)

一、搜索插入位置 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int searchInsert(vector<int>& nums, int target) {int left 0;int right nums.size()-1;int mid (leftright)/2;while(left<right){if(nums[mid]<target){left mid1…

Selenium浏览器自动化测试框架详解

selenium简介 介绍 Selenium [1] 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。支持的浏览器包括IE&#xff08;7, 8, 9, 10, 11&#xff09;&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Google C…

杰发科技AC7801——SRAM 错误检测纠正

0.概述 7801暂时无错误注入&#xff0c;无法直接进中断看错误情况&#xff0c;具体效果后续看7840的带错误注入的测试情况。 1.简介 2.特性 3.功能 4.调试 可以看到在库文件里面有ecc_sram的库。 在官方GPIO代码里面写了点测试代码 成功打开2bit中断 因为没有错误注入&#x…

猫头虎分享已解决Bug || 服务器过热(Server Overheating):OverheatingWarning, ThermalShutdown

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

文心一言4.0 VS ChatGPT4.0 图片生成能力大比拼!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…