今日代码分享 | 中控服务器统一获取和刷新微信 Access Token

本文主要是介绍今日代码分享 | 中控服务器统一获取和刷新微信 Access Token,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        在开发基于微信公众号或小程序的应用时,微信 Access Token 是调用微信 API 接口的必要凭证。为了避免在多个服务中频繁地请求微信服务器,造成不必要的资源浪费和性能瓶颈,通常会采用中控服务器统一获取和刷新微信 Access Token 的方式。本文将介绍如何在中控服务器中实现统一获取和刷新微信 Access Token 的方案。

先上代码:

//ip鉴权,只有指定的ip才可以进行获取token  
String remoteAddr = request.getHeader("X-Forwarded-For");if (StrUtil.isBlank(remoteAddr)) {remoteAddr = request.getRemoteAddr();
}else {remoteAddr = remoteAddr.split(SymbolConstant.COMMA)[0];
}log.info("访问地址 ====> {}", remoteAddr);String passUrl = commonProperties.getPassUrl();
if (StrUtil.isBlank(passUrl)) {log.info("没有配置允许访问的ip!!!!!");return "";
}
if (!passUrl.contains(remoteAddr)) {log.info("该ip: {} 不允许访问,运行访问的ip为 {}", remoteAddr, passUrl);return "";
}
//============================================//token已经存在,直接返回
if (redisUtil.hasKey(RedisConstant.WX_TOKEN)) {//计算该token的实时过期时间,实现逻辑是:缓存获取token的时间,然后与现在的时间进行对比Date now = new Date();Object obj = redisUtil.get(RedisConstant.WX_TOKEN);JSONObject res = JSONUtil.parseObj(obj);String createTime = res.getStr("createTime");DateTime createDate = DateUtil.parse(createTime, "yyyy-MM-dd HH:mm:ss");res.put("expires_in",  Long.valueOf(res.getStr("expires_in")) - (Math.abs(now.getTime() - createDate.getTime()) / 1000));res.remove("createTime");return res.toString();
}
//请求微信的接口
String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + commonProperties.getDsAppId() + "&secret=" + commonProperties.getDsSecret();
String body = HttpUtil.createGet(url).execute().body();
if (StrUtil.isBlank(body)) {log.info("response body is null");return null;
}
try {//解析token,并缓存JSONObject res = JSONUtil.parseObj(body);log.info("微信返回的结果: {}", res.toString());String accessToken = res.getStr("access_token");String expiresIn = res.getStr("expires_in");if (!StrUtil.isAllNotBlank(accessToken, expiresIn)) {log.info("返回的参数有误~   {}", res.toString());return null;}//缓存获取token的时间res.put("createTime", DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss"));redisUtil.set(RedisConstant.WX_TOKEN, res, Long.valueOf(expiresIn) - (5 * 60));res.remove("createTime");return res.toString();
} catch (Exception e) {log.error("获取token失败", e);
}return null;

1. 中控服务器的角色

中控服务器通常是一个独立的服务,负责管理微信 Access Token 的获取和刷新。其他业务服务需要调用微信 API 时,可以向中控服务器请求 Access Token,而无需直接与微信服务器通信。这样一来,可以避免多个业务服务频繁请求微信服务器,降低对微信服务器的压力。

2. 获取和缓存微信 Access Token

在中控服务器中,可以通过向微信服务器发送 HTTP 请求获取 Access Token,并将其缓存起来,以备后续使用。为了确保 Access Token 的有效性,需要定时刷新缓存中的 Access Token。以下是获取和缓存微信 Access Token 的基本流程:

  • 中控服务器接收请求,检查缓存中是否存在有效的 Access Token。
  • 如果存在有效的 Access Token,则直接返回给客户端。
  • 如果缓存中不存在有效的 Access Token,或者 Access Token 已过期,则向微信服务器请求新的 Access Token。
  • 获取到新的 Access Token 后,更新缓存,并返回给客户端。
  • 返回的token还可以动态的更新expires_in,让第三方服务器准确的知道token的有效时间。

3. Access Token 的定时刷新

由于微信 Access Token 的有效期较短(通常为两小时),需要定时刷新缓存中的 Access Token,以确保业务服务始终能够获取到有效的 Access Token。可以通过定时任务或者定时触发器实现 Access Token 的定时刷新,例如每隔一段时间(如1小时55分钟)自动向微信服务器请求新的 Access Token,并更新缓存中的值。

4. 安全性考虑

在中控服务器中管理微信 Access Token 时,需要考虑安全性问题。建议采用 HTTPS 协议进行通信,确保数据传输的安全性。另外,可以通过限制访问来源 IP 或者添加访问权限验证等方式,保障中控服务器的安全性。

5. 总结

通过中控服务器统一获取和刷新微信 Access Token,可以有效地降低对微信服务器的请求次数,提高应用的性能和稳定性。同时,合理的缓存策略和定时刷新机制能够确保业务服务始终能够获取到有效的 Access Token,从而保障应用的正常运行。在实际应用中,可以根据业务需求和安全考虑,灵活地调整和优化中控服务器的实现方案。

这篇关于今日代码分享 | 中控服务器统一获取和刷新微信 Access Token的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/824003

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

2024网安周今日开幕,亚信安全亮相30城

2024年国家网络安全宣传周今天在广州拉开帷幕。今年网安周继续以“网络安全为人民,网络安全靠人民”为主题。2024年国家网络安全宣传周涵盖了1场开幕式、1场高峰论坛、5个重要活动、15场分论坛/座谈会/闭门会、6个主题日活动和网络安全“六进”活动。亚信安全出席2024年国家网络安全宣传周开幕式和主论坛,并将通过线下宣讲、创意科普、成果展示等多种形式,让广大民众看得懂、记得住安全知识,同时还

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d