|
|
@@ -66,8 +66,12 @@ public class RedeemCloudRechargeServiceImpl implements RedeemCloudRechargeServic
|
|
|
.setConnectionTimeout(10000)
|
|
|
.execute();
|
|
|
String body = response.body();
|
|
|
- log.info("redeemcloud validate card key response: {}", body);
|
|
|
- return Jsons.parseObject(body, RedeemCloudCdkQueryResponse.class);
|
|
|
+ RedeemCloudCdkQueryResponse result = Jsons.parseObject(body, RedeemCloudCdkQueryResponse.class);
|
|
|
+ log.info("redeemcloud validate card key response - code: {}, useStatus: {}, channelEnabled: {}",
|
|
|
+ result != null ? result.getCode() : null,
|
|
|
+ result != null && result.getData() != null ? result.getData().getUseStatus() : null,
|
|
|
+ result != null && result.getData() != null ? result.getData().getChannelEnabled() : null);
|
|
|
+ return result;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -193,21 +197,70 @@ public class RedeemCloudRechargeServiceImpl implements RedeemCloudRechargeServic
|
|
|
}
|
|
|
|
|
|
private JSONObject verifyAccount(String baseUrl, String cardKey, String content) {
|
|
|
- String url = baseUrl + "/account/verify?cdkCode=" + encode(cardKey) + "&content=" + encode(content);
|
|
|
- HttpResponse response = addBrowserHeaders(HttpRequest.post(url)
|
|
|
- .setConnectionTimeout(60000))
|
|
|
+ String verifyContent = buildChatGptVerifyContent(content);
|
|
|
+ String url = baseUrl + "/account/verify";
|
|
|
+ JSONObject requestBody = new JSONObject();
|
|
|
+ requestBody.putOpt("cdkCode", cardKey);
|
|
|
+ requestBody.putOpt("content", verifyContent);
|
|
|
+ log.info("redeemcloud account verify request - contentLength: {}", verifyContent.length());
|
|
|
+ HttpResponse response = HttpRequest.post(url)
|
|
|
+ .header("Accept-Language", "zh-CN")
|
|
|
+ .header("Content-Type", "application/json")
|
|
|
+ .header("X-Product-Code", "GPT")
|
|
|
+ .setConnectionTimeout(60000)
|
|
|
+ .body(requestBody.toString())
|
|
|
.execute();
|
|
|
String body = response.body();
|
|
|
- log.info("redeemcloud account verify response: {}", body);
|
|
|
|
|
|
JSONObject jsonResponse = parseResponseObject(body, "account verify");
|
|
|
Object data = jsonResponse.get("data");
|
|
|
+ log.info("redeemcloud account verify response - code: {}, message: {}, hasData: {}",
|
|
|
+ jsonResponse.getInt("code"), jsonResponse.getStr("message"), data instanceof JSONObject);
|
|
|
if (isSuccessResponse(jsonResponse) && data instanceof JSONObject) {
|
|
|
return (JSONObject) data;
|
|
|
}
|
|
|
throw BusinessRuntimeException.getInstance(getErrorMessage(data instanceof JSONObject ? (JSONObject) data : null, jsonResponse));
|
|
|
}
|
|
|
|
|
|
+ private String buildChatGptVerifyContent(String content) {
|
|
|
+ String verifyContent = unwrapJsonString(content);
|
|
|
+ if (StrUtil.isBlank(verifyContent)) {
|
|
|
+ return verifyContent;
|
|
|
+ }
|
|
|
+ if (!StrUtil.startWith(verifyContent.trim(), "{")) {
|
|
|
+ JSONObject session = new JSONObject();
|
|
|
+ session.putOpt("accessToken", verifyContent);
|
|
|
+ return session.toString();
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ JSONObject source = JSONUtil.parseObj(verifyContent);
|
|
|
+ String accessToken = source.getStr("accessToken");
|
|
|
+ if (StrUtil.isBlank(accessToken)) {
|
|
|
+ return verifyContent;
|
|
|
+ }
|
|
|
+ accessToken = unwrapJsonString(accessToken);
|
|
|
+ if (StrUtil.startWith(accessToken.trim(), "{")) {
|
|
|
+ return buildChatGptVerifyContent(accessToken);
|
|
|
+ }
|
|
|
+ if (isCompleteChatGptSession(source)) {
|
|
|
+ return verifyContent;
|
|
|
+ }
|
|
|
+ JSONObject session = new JSONObject();
|
|
|
+ session.putOpt("accessToken", accessToken);
|
|
|
+ return session.toString();
|
|
|
+ } catch (Exception e) {
|
|
|
+ return verifyContent;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean isCompleteChatGptSession(JSONObject source) {
|
|
|
+ return source.get("user") instanceof JSONObject
|
|
|
+ || source.get("account") instanceof JSONObject
|
|
|
+ || source.containsKey("expires")
|
|
|
+ || source.containsKey("authProvider")
|
|
|
+ || source.containsKey("sessionToken");
|
|
|
+ }
|
|
|
+
|
|
|
private HttpRequest addBrowserHeaders(HttpRequest request) {
|
|
|
return request
|
|
|
.header("accept", "*/*")
|