|
|
@@ -149,35 +149,65 @@ public class ElectricTokenManager {
|
|
|
* 调用第三方接口获取新Token
|
|
|
*/
|
|
|
private ApiToken fetchNewTokenFromRemote() {
|
|
|
+ log.info("========== 开始调用第三方接口获取Token ==========");
|
|
|
try {
|
|
|
//调用第三方API获取Token
|
|
|
QueryTokenParms queryTokenParms = new QueryTokenParms();
|
|
|
queryTokenParms
|
|
|
.setOperatorID(ConnectivityConstants.OPERATOR_ID)
|
|
|
- .setOperatorSecret(ConnectivityConstants.OPERATOR_SECRET);
|
|
|
+ .setOperatorSecret(ConnectivityConstants.PLATFORM_OPERATOR_SECRET);
|
|
|
+ log.info("构造请求参数: OperatorID={}, OperatorSecret={}",
|
|
|
+ ConnectivityConstants.OPERATOR_ID, ConnectivityConstants.PLATFORM_OPERATOR_SECRET);
|
|
|
|
|
|
RequestParmsEntity requestParms = new RequestParmsEntity();
|
|
|
SequenceGenUtil.SequenceResult result = SequenceGenUtil.generate();
|
|
|
+ log.info("生成序列号: TimeStamp={}, Seq={}", result.getTimestamp(), result.getSequence());
|
|
|
|
|
|
requestParms
|
|
|
.setOperatorID(ConnectivityConstants.OPERATOR_ID);
|
|
|
- requestParms.setData(AESCryptoUtils.encrypt(new Gson().toJson(queryTokenParms), ConnectivityConstants.PLATFORM_DATA_SECRET,
|
|
|
- ConnectivityConstants.PLATFORM_DATA_SECRET_IV));
|
|
|
+
|
|
|
+ // 加密Data字段
|
|
|
+ String dataToEncrypt = new Gson().toJson(queryTokenParms);
|
|
|
+ log.info("待加密的Data: {}", dataToEncrypt);
|
|
|
+ String encryptedData = AESCryptoUtils.encrypt(dataToEncrypt, ConnectivityConstants.PLATFORM_DATA_SECRET,
|
|
|
+ ConnectivityConstants.PLATFORM_DATA_SECRET_IV);
|
|
|
+ log.info("加密后的Data: {}", encryptedData);
|
|
|
+ requestParms.setData(encryptedData);
|
|
|
+
|
|
|
requestParms.setTimeStamp(result.getTimestamp());
|
|
|
requestParms.setSeq(result.getSequence());
|
|
|
- requestParms.setSig(HmacMD5Util.genSign(requestParms.getOperatorID(), requestParms.getData(), requestParms.getTimeStamp(),
|
|
|
- requestParms.getSeq(), ConnectivityConstants.PLATFORM_SIG_SECRET));
|
|
|
-
|
|
|
- JsonObject response = okHttpUtil.doPostForm(ConnectivityConstants.TEST_DOMAIN + ConnectivityConstants.QUERY_TOKEN, BeanUtil.beanToMap(requestParms), null);
|
|
|
+
|
|
|
+ // 生成签名
|
|
|
+ String sig = HmacMD5Util.genSign(requestParms.getOperatorID(), requestParms.getData(), requestParms.getTimeStamp(),
|
|
|
+ requestParms.getSeq(), ConnectivityConstants.PLATFORM_SIG_SECRET);
|
|
|
+ log.info("生成的签名: {}", sig);
|
|
|
+ requestParms.setSig(sig);
|
|
|
+
|
|
|
+ String requestUrl = ConnectivityConstants.TEST_DOMAIN + ConnectivityConstants.QUERY_TOKEN;
|
|
|
+ log.info("调用第三方接口获取Token,URL: {}", requestUrl);
|
|
|
+
|
|
|
+ // 直接将请求对象序列化为JSON字符串,确保大驼峰命名
|
|
|
+ String requestJson = new Gson().toJson(requestParms);
|
|
|
+ log.info("请求参数JSON: {}", requestJson);
|
|
|
+
|
|
|
+ JsonObject response = okHttpUtil.doPostForm(requestUrl, requestJson, null);
|
|
|
|
|
|
if (Objects.isNull(response)) {
|
|
|
- log.error("调用第三方接口获取Token失败");
|
|
|
+ log.error("调用第三方接口获取Token失败,响应为空");
|
|
|
return null;
|
|
|
}
|
|
|
-
|
|
|
+ log.info("第三方接口响应: {}", response);
|
|
|
|
|
|
Gson gson = new Gson();
|
|
|
ResponseParmsEntity responseParms = gson.fromJson(response, ResponseParmsEntity.class);
|
|
|
+
|
|
|
+ if (Objects.isNull(responseParms)) {
|
|
|
+ log.error("解析响应失败,responseParms为null,原始响应: {}", response);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ log.info("解析响应成功,ret: {}, msg: {}, data: {}", responseParms.getRet(), responseParms.getMsg(), responseParms.getData());
|
|
|
+
|
|
|
String data = responseParms.getRet() + responseParms.getMsg() + responseParms.getData();
|
|
|
boolean verify = HmacMD5Util.verify(data, ConnectivityConstants.PLATFORM_SIG_SECRET, responseParms.getSig());
|
|
|
if (!verify) {
|
|
|
@@ -204,11 +234,23 @@ public class ElectricTokenManager {
|
|
|
case 500:
|
|
|
log.error("系统错误");
|
|
|
break;
|
|
|
+ default:
|
|
|
+ log.error("未知错误码: {}", responseParms.getRet());
|
|
|
+ break;
|
|
|
}
|
|
|
+ return null;
|
|
|
}
|
|
|
+
|
|
|
String decodeData = AESCryptoUtils.decrypt(responseParms.getData(), ConnectivityConstants.PLATFORM_DATA_SECRET,
|
|
|
ConnectivityConstants.PLATFORM_DATA_SECRET_IV);
|
|
|
+ log.info("解密后的数据: {}", decodeData);
|
|
|
+
|
|
|
QueryTokenResponseData responseData = gson.fromJson(decodeData, QueryTokenResponseData.class);
|
|
|
+
|
|
|
+ if (Objects.isNull(responseData)) {
|
|
|
+ log.error("解析解密数据失败,responseData为null,解密数据: {}", decodeData);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
|
|
|
if (responseData.getSuccStat() == 1) {
|
|
|
//0-无,1-OperatorID无效
|
|
|
@@ -228,11 +270,15 @@ public class ElectricTokenManager {
|
|
|
apiToken.setTokenAvailableTime(responseData.getTokenAvailableTime());
|
|
|
apiToken.setObtainTime(LocalDateTime.now());
|
|
|
apiToken.setExpireTime(apiToken.getObtainTime().plusSeconds(apiToken.getTokenAvailableTime()));
|
|
|
+
|
|
|
+ log.info("成功获取Token: AccessToken={}, 有效期={}s, 过期时间={}",
|
|
|
+ apiToken.getAccessToken(), apiToken.getTokenAvailableTime(), apiToken.getExpireTime());
|
|
|
+ log.info("========== 第三方接口调用成功 ==========");
|
|
|
|
|
|
return apiToken;
|
|
|
} catch (Exception e) {
|
|
|
- log.error("获取新Token时发生异常,tokenKey: {}", TOKEN_KEY, e);
|
|
|
- throw new RuntimeException("调用第三方接口失败", e);
|
|
|
+ log.error("获取新Token时发生异常,tokenKey: {}, 异常信息: {}", TOKEN_KEY, e.getMessage(), e);
|
|
|
+ throw new RuntimeException("调用第三方接口失败: " + e.getMessage(), e);
|
|
|
}
|
|
|
}
|
|
|
|