微信 获取token

This commit is contained in:
2026-01-27 17:03:08 +08:00
parent 52e8a209fb
commit ae67fb6f8e
5 changed files with 69 additions and 102 deletions

View File

@@ -1,17 +1,13 @@
package com.czg.service.account.util;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import com.czg.constants.ParamCodeCst;
import com.czg.service.RedisService;
import com.czg.system.service.SysParamsService;
import jakarta.annotation.Resource;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import java.util.LinkedHashMap;
@@ -26,9 +22,7 @@ import java.util.Map;
@Slf4j
@Component
public class AcAccountUtil {
@Resource
@Lazy
private RedisService redisService;
@DubboReference
private SysParamsService paramsService;
@@ -54,7 +48,7 @@ public class AcAccountUtil {
String accessToken = getAccessToken();
// String accessToken = "97_HZVThQrtvOiCZGrr23ZHN0cVpHBJHc18RSFHU6dvkQDMAme4GsG0NU-Dax1HP5Wx-aGa1l35KaqiMVv61TCj0Qk8DK1LC6kQ8uKLDfgRYVJjX3QjcelmIjp4PCkERBeABAUHR";
if (StrUtil.isBlank(accessToken)) {
log.error("获取 access_token 失败");
log.error("银收客czg 公众号获取 access_token 失败");
return "";
}
String bodyJson = "{\"action_info\":{\"scene\":{\"scene_str\":\"" + userId + "\"}},\"action_name\":\"QR_STR_SCENE\",\"expire_seconds\":\"2592000\"}";
@@ -87,23 +81,24 @@ public class AcAccountUtil {
public String getAccessToken() {
String accessToken = Convert.toStr(redisService.get("wx:ac:AccessToken"));
if (StrUtil.isNotEmpty(accessToken)) {
return accessToken;
}
Map<String, String> userAc = paramsService.getParamsByMap("user_ac_key_set", ParamCodeCst.USER_AC_KEY_SET);
// 用户小程序参数
String acAppId = userAc.get(ParamCodeCst.Wechat.Ac.USER_WX_AC_APP_ID);
String acSecrete = userAc.get(ParamCodeCst.Wechat.Ac.USER_WX_AC_SECRETE);
String resp = HttpUtil.get(StrUtil.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={}&secret={}", acAppId, acSecrete));
JSONObject respInfo = JSONObject.parseObject(resp);
if (!respInfo.containsKey("access_token")) {
log.warn("公众号获取token失败, 响应内容: {}", resp);
return "";
String resp = HttpUtil.get(StrUtil.format("https://access-token.sxczgkj.com/accessToken?appId={}&appSecret={}", acAppId, acSecrete));
// 响应 {"accessToken":"100_6C_jltHANT1y2Fot5PXKFDzPXTyWumCsao0oMoNRvJUTuxS0IOVO4nBmjdmx5dZfYItShFVSAKYzNDf7ZGLPlx52ii1Y1qerrbbSmIiLWCrec5qjBY4gV5Tfv8YKKTdABAEEN","appId":"wx212769170d2c6b2a"}
if (StrUtil.isNotBlank(resp)) {
JSONObject respInfo = JSONObject.parseObject(resp);
return respInfo.getString("accessToken");
} else {
String resp2 = HttpUtil.get(StrUtil.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={}&secret={}", acAppId, acSecrete));
JSONObject respInfo = JSONObject.parseObject(resp2);
if (!respInfo.containsKey("access_token")) {
log.warn("银收客czg 公众号获取token失败, 响应内容: {}", resp2);
return "";
}
return respInfo.getString("access_token");
}
accessToken = respInfo.getString("access_token");
int expiresIn = respInfo.getInteger("expires_in");
redisService.set("wx:ac:AccessToken", accessToken, expiresIn - 10);
return accessToken;
}
}

View File

@@ -1,7 +1,6 @@
package com.czg.service.account.util;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.symmetric.AES;
@@ -11,6 +10,7 @@ import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.czg.config.RedisCst;
import com.czg.constants.ParamCodeCst;
import com.czg.exception.CzgException;
import com.czg.resp.CzgResult;
import com.czg.service.RedisService;
import com.czg.system.dto.SysParamsDTO;
@@ -140,7 +140,7 @@ public class WechatMiniMsgUtil {
public String getAccountOpenId(String code) {
Map<String, String> shopAc = sysParamsService.getParamsByMap("shop_ac_key_set", ParamCodeCst.SHOP_AC_KEY_SET);
String accountAppId = shopAc.get(ParamCodeCst.Wechat.Ac.SHOP_WX_AC_APP_ID);
String accountAppId = shopAc.get(ParamCodeCst.Wechat.Ac.SHOP_WX_AC_APP_ID);
String accountSecrete = shopAc.get(ParamCodeCst.Wechat.Ac.SHOP_WX_AC_SECRETE);
String requestUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?";
Map<String, Object> requestUrlParam = new HashMap<>();
@@ -162,25 +162,23 @@ public class WechatMiniMsgUtil {
//获取小程序token
private String getAccessToken() {
String accessToken = Convert.toStr(redisService.get("wx:mini:AccessToken"));
if (StrUtil.isNotEmpty(accessToken)) {
return accessToken;
}
// 商户小程序参数
Map<String, String> shopMiniKeyMap = sysParamsService.getParamsByMap("shop_mini_key_set", ParamCodeCst.SHOP_MINI_KEY_SET);
String appId = shopMiniKeyMap.get(ParamCodeCst.Wechat.Mini.SHOP_WX_APP_ID);
String secrete = shopMiniKeyMap.get(ParamCodeCst.Wechat.Mini.SHOP_WX_SECRETE);
String url = String.format("%s?grant_type=client_credential&appid=%s&secret=%s", TOKEN_URL, appId, secrete);
String response = HttpUtil.get(url);
JSONObject jsonResponse = JSONObject.parseObject(response);
if (!jsonResponse.containsKey("access_token")) {
throw new RuntimeException("Failed to retrieve access token: " + response);
String resp = HttpUtil.get(StrUtil.format("https://access-token.sxczgkj.com/accessToken?appId={}&appSecret={}", appId, secrete));
if (StrUtil.isNotBlank(resp)) {
JSONObject respInfo = JSONObject.parseObject(resp);
return respInfo.getString("accessToken");
} else {
String response = HttpUtil.get(String.format("%s?grant_type=client_credential&appid=%s&secret=%s", TOKEN_URL, appId, secrete));
JSONObject jsonResponse = JSONObject.parseObject(response);
if (!jsonResponse.containsKey("access_token")) {
throw new CzgException("零点八零商户端 获取access_token失败: " + response);
}
return jsonResponse.getString("access_token");
}
accessToken = jsonResponse.getString("access_token");
int expiresIn = jsonResponse.getInteger("expires_in");
redisService.set("wx:mini:AccessToken", accessToken, expiresIn - 10);
return accessToken;
}
/**