From 2835346447260e6c8264cb1fa478a3f6d6958bbd Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Tue, 8 Apr 2025 15:26:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=9A=E4=B8=AAwxMpConfig=E5=85=BC=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ycwl/basic/utils/WxMpUtil.java | 30 ++++++++++++------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/ycwl/basic/utils/WxMpUtil.java b/src/main/java/com/ycwl/basic/utils/WxMpUtil.java index 9fe2f7d..8b58d7f 100644 --- a/src/main/java/com/ycwl/basic/utils/WxMpUtil.java +++ b/src/main/java/com/ycwl/basic/utils/WxMpUtil.java @@ -6,26 +6,34 @@ import com.alibaba.fastjson.JSONObject; import java.io.FileOutputStream; import java.io.InputStream; import java.util.Date; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; public class WxMpUtil { private static final String GET_WXA_CODE_URL = "https://api.weixin.qq.com/wxa/getwxacode?access_token=%s"; private static final String GET_URL_LICK_URL = "https://api.weixin.qq.com/wxa/generate_urllink?access_token=%s"; private static final String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s"; - private static String ACCESS_TOKEN = ""; - private static Date expireTime = new Date(); + private static final Map tokens = new ConcurrentHashMap<>(); + private static final Map expireTimes = new ConcurrentHashMap<>(); private static String getAccessToken(String appId, String appSecret) { - if (ACCESS_TOKEN != null && !ACCESS_TOKEN.isEmpty()) { - if (expireTime.getTime() > System.currentTimeMillis()) { - return ACCESS_TOKEN; + if (expireTimes.containsKey(appId)) { + Date expireTime = expireTimes.get(appId); + if (expireTime.getTime() < System.currentTimeMillis()) { + tokens.remove(appId); } + } else { + tokens.remove(appId); } - String url = String.format(ACCESS_TOKEN_URL, appId, appSecret); - String response = HttpUtil.get(url); - JSONObject jsonObject = JSONObject.parseObject(response); - ACCESS_TOKEN = jsonObject.getString("access_token"); - expireTime = new Date(System.currentTimeMillis() + jsonObject.getInteger("expires_in") * 1000 / 2); - return ACCESS_TOKEN; + return tokens.computeIfAbsent(appId, (k) -> { + String url = String.format(ACCESS_TOKEN_URL, appId, appSecret); + String response = HttpUtil.get(url); + JSONObject jsonObject = JSONObject.parseObject(response); + String token = jsonObject.getString("access_token"); + Date expireTime = new Date(System.currentTimeMillis() + jsonObject.getInteger("expires_in") * 1000 / 2); + expireTimes.put(appId, expireTime); + return token; + }); } public static void generateWXAQRCode(String appId, String appSecret, String envVersion, String path, String filePath) throws Exception {