微信 获取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,15 +1,14 @@
package com.czg.service.market.service.impl;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson2.JSONObject;
import com.czg.constants.ParamCodeCst;
import com.czg.exception.CzgException;
import com.czg.service.RedisService;
import com.czg.system.service.SysParamsService;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
@@ -17,6 +16,7 @@ import java.util.Map;
/**
* 微信支付service
*
* @author Administrator
*/
@Component
@@ -27,35 +27,26 @@ public class AppWxServiceImpl extends BaseWx {
@DubboReference
private SysParamsService paramsService;
public AppWxServiceImpl(@Autowired RedisService autoRedisService) {
this.redisService = autoRedisService;
public AppWxServiceImpl() {
config = new Config();
}
@Override
public String getAccessToken(boolean refresh) {
init();
Object token = redisService.get("wx:user:access_token");
if (!refresh && token instanceof String) {
return (String) token;
}
String response = HttpUtil.get(WX_ACCESS_TOKEN_URL,
Map.of("grant_type", "client_credential", "appid", config.appId, "secret", config.appSecret)
);
log.info("获取access_token响应: {}", response);
JSONObject jsonObject = JSONObject.parseObject(response);
String accessToken = jsonObject.getString("access_token");
if (accessToken == null) {
throw new RuntimeException("获取access_token失败");
String resp = HttpUtil.get(StrUtil.format("https://access-token.sxczgkj.com/accessToken?appId={}&appSecret={}", config.appId, config.appSecret));
// 响应 {"accessToken":"100_6C_jltHANT1y2Fot5PXKFDzPXTyWumCsao0oMoNRvJUTuxS0IOVO4nBmjdmx5dZfYItShFVSAKYzNDf7ZGLPlx52ii1Y1qerrbbSmIiLWCrec5qjBY4gV5Tfv8YKKTdABAEEN","appId":"wx212769170d2c6b2a"}
if (StrUtil.isNotBlank(resp)) {
JSONObject respInfo = JSONObject.parseObject(resp);
return respInfo.getString("accessToken");
} else {
String response = HttpUtil.get(WX_ACCESS_TOKEN_URL,
Map.of("grant_type", "client_credential", "appid", config.appId, "secret", config.appSecret)
);
JSONObject jsonObject = JSONObject.parseObject(response);
return jsonObject.getString("access_token");
}
Long expiresIn = jsonObject.getLong("expires_in");
if (expiresIn == null) {
expiresIn = DEFAULT_EXPIRES_IN;
}
redisService.set("wx:user:access_token", accessToken, expiresIn - EXPIRES_OFFSET);
return accessToken;
}
@Override
@@ -65,7 +56,7 @@ public class AppWxServiceImpl extends BaseWx {
// 微信支付参数
Map<String, String> payKeyMap = paramsService.getParamsByMap("pay_key_set", ParamCodeCst.PAY_KEY_SET);
// 小程序id
config.appId = userMiniKeyMap.get(ParamCodeCst.Wechat.Mini.USER_WX_APP_ID);
// 小程序secrete

View File

@@ -1,18 +1,16 @@
package com.czg.service.market.service.impl;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson2.JSONObject;
import com.czg.constants.ParamCodeCst;
import com.czg.service.RedisService;
import com.czg.system.service.SysParamsService;
import com.ijpay.core.kit.RsaKit;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Map;
import java.util.Set;
/**
@@ -27,38 +25,25 @@ public class WxServiceImpl extends BaseWx {
@DubboReference
private SysParamsService paramsService;
private final Set<String> shopMiniKeys = Set.of(ParamCodeCst.Wechat.Mini.SHOP_WX_APP_ID, ParamCodeCst.Wechat.Mini.SHOP_WX_SECRETE);
public WxServiceImpl(@Autowired RedisService redisService) {
this.redisService = redisService;
public WxServiceImpl() {
config = new Config();
}
@Override
public String getAccessToken(boolean refresh) {
init();
Object token = redisService.get("wx:shop:access_token");
if (!refresh && token instanceof String) {
return (String) token;
}
String response = HttpUtil.get(WX_ACCESS_TOKEN_URL,
Map.of("grant_type", "client_credential", "appid", config.appId, "secret", config.appSecret)
);
log.info("获取access_token响应: {}", response);
JSONObject jsonObject = JSONObject.parseObject(response);
String accessToken = jsonObject.getString("access_token");
if (accessToken == null) {
throw new RuntimeException("获取access_token失败");
String resp = HttpUtil.get(StrUtil.format("https://access-token.sxczgkj.com/accessToken?appId={}&appSecret={}", config.appId, config.appSecret));
if (StrUtil.isNotBlank(resp)) {
JSONObject respInfo = JSONObject.parseObject(resp);
return respInfo.getString("accessToken");
} else {
String response = HttpUtil.get(WX_ACCESS_TOKEN_URL,
Map.of("grant_type", "client_credential", "appid", config.appId, "secret", config.appSecret)
);
JSONObject jsonObject = JSONObject.parseObject(response);
return jsonObject.getString("access_token");
}
Long expiresIn = jsonObject.getLong("expires_in");
if (expiresIn == null) {
expiresIn = DEFAULT_EXPIRES_IN;
}
redisService.set("wx:shop:access_token", accessToken, expiresIn - EXPIRES_OFFSET);
return accessToken;
}
@Override