zoujiajian vor 1 Monat
Ursprung
Commit
21eab549fc

+ 59 - 6
netflix-service/src/main/java/com/cyksj/service/recharge/impl/RedeemCloudRechargeServiceImpl.java

@@ -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", "*/*")