From 1385843c8a9d39bc6835b9845ea1092b3e8f2bb3 Mon Sep 17 00:00:00 2001
From: tjx <t2856754968@163.com>
Date: 星期三, 29 十月 2025 09:48:25 +0800
Subject: [PATCH] 更新为正式环境配置

---
 src/main/java/com/gs/xiaomi/service/BCS101ApiService.java |  123 ++++++++++++++++++++++++++++++++---------
 1 files changed, 96 insertions(+), 27 deletions(-)

diff --git a/src/main/java/com/gs/xiaomi/service/BCS101ApiService.java b/src/main/java/com/gs/xiaomi/service/BCS101ApiService.java
index 8b16f88..ba97e81 100644
--- a/src/main/java/com/gs/xiaomi/service/BCS101ApiService.java
+++ b/src/main/java/com/gs/xiaomi/service/BCS101ApiService.java
@@ -1,15 +1,18 @@
 package com.gs.xiaomi.service;
 
+import cn.hutool.crypto.digest.DigestUtil;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.gs.xiaomi.config.DataAcquisitionConfiguration;
 import com.gs.xiaomi.dto.BCS101Request;
+import com.gs.xiaomi.dto.X5Header;
+import com.gs.xiaomi.dto.X5Request;
+import com.gs.xiaomi.dto.X5Response;
 import com.gs.xiaomi.util.X5StringUtils;
 import okhttp3.*;
 import org.springframework.stereotype.Service;
 
 import java.io.IOException;
 import java.net.URLEncoder;
-import java.nio.charset.StandardCharsets;
 import java.util.concurrent.TimeUnit;
 
 @Service
@@ -27,46 +30,112 @@
     }
 
     /**
-     * 鑾峰彇BCS101鏁版嵁
+     * 鑾峰彇BCS101鏁版嵁 - 涓ユ牸鎸夌収C# X5鍗忚瀹炵幇
+     * <p>
+     * 鍩轰簬C# Helper102.POSTResponseData鏂规硶鐨凧ava瀹炵幇
+     * X5鍗忚娴佺▼:
+     * 1. 搴忓垪鍖朆ody涓篔SON瀛楃涓�
+     * 2. MD5绛惧悕: MD5(appid+bodyStr+appkey)
+     * 3. 鏋勫缓X5Request {header: {appid, sign}, body: bodyStr}
+     * 4. Base64缂栫爜鏁翠釜X5Request
+     * 5. URL缂栫爜
+     * 6. 鍙戦�� data=url缂栫爜(base64缂栫爜)鐨勬暟鎹�
      *
      * @param request BCS101璇锋眰鍙傛暟
      * @return API鍝嶅簲
      * @throws IOException 缃戠粶寮傚父
      */
     public String getBCS101Data(BCS101Request request) throws IOException {
-        // 鐩存帴灏嗚姹傚璞¤浆鎹负JSON瀛楃涓�
-        String jsonData = objectMapper.writeValueAsString(request);
+        try {
+            System.out.println("=== BCS101 X5鍗忚瀹炵幇 (鍩轰簬C#浠g爜) ===");
 
-        // Base64缂栫爜
-        String base64Data = X5StringUtils.encodeBase64(jsonData);
+            // 1. 搴忓垪鍖朆ody涓篔SON瀛楃涓�
+            String bodyStr = objectMapper.writeValueAsString(request);
+            //System.out.println("1. Body JSON: " + bodyStr);
 
-        // URL缂栫爜
-        String urlEncodedData = URLEncoder.encode(base64Data, String.valueOf(StandardCharsets.UTF_8));
+            // 2. MD5绛惧悕: sign = MD5(appid + bodyStr + appkey)
+            String appId = DataAcquisitionConfiguration.BCS_APP_ID;
+            String appKey = DataAcquisitionConfiguration.BCS_APP_Key;
+            String signString = appId + bodyStr + appKey;
+            String sign = DigestUtil.md5Hex(signString).toUpperCase();
+            //System.out.println("2. 绛惧悕瀛楃涓�: " + signString);
+            //System.out.println("3. MD5绛惧悕: " + sign);
 
-        // 鏋勫缓form琛ㄥ崟鏁版嵁
-        String formData = "data=" + urlEncodedData;
+            // 3. 鏋勫缓X5Header
+            X5Header header = new X5Header(appId, sign);
 
-        // 鏋勫缓Authorization header
-        String credentials = DataAcquisitionConfiguration.BCS_USER_NAME + ":" + DataAcquisitionConfiguration.BCS_PWD;
-        String auth = X5StringUtils.encodeBase64(credentials);
+            // 4. 鏋勫缓X5Request
+            X5Request x5Request = new X5Request(header, bodyStr);
+            String x5RequestJson = objectMapper.writeValueAsString(x5Request);
+            //System.out.println("4. X5Request JSON: " + x5RequestJson);
 
-        // 鏋勫缓璇锋眰浣�
-        RequestBody body = RequestBody.create(formData, MediaType.parse("application/x-www-form-urlencoded"));
+            // 5. Base64缂栫爜鏁翠釜X5Request
+            String base64Data = X5StringUtils.encodeBase64(x5RequestJson);
+            //System.out.println("5. Base64缂栫爜: " + base64Data);
 
-        // 鏋勫缓璇锋眰
-        Request httpRequest = new Request.Builder()
-                .url(DataAcquisitionConfiguration.BCS_101_URL)
-                .method("POST", body)
-                .addHeader("Content-Type", "application/x-www-form-urlencoded")
-                .addHeader("Authorization", "Basic " + auth)
-                .build();
+            // 6. URL缂栫爜
+            String urlEncodedData = URLEncoder.encode(base64Data, "UTF-8");
+           // System.out.println("6. URL缂栫爜: " + urlEncodedData);
 
-        // 鎵ц璇锋眰
-        try (Response response = client.newCall(httpRequest).execute()) {
-            if (response.body() != null) {
-                return response.body().string();
+            // 7. 鏋勫缓form琛ㄥ崟鏁版嵁: data=url缂栫爜(base64缂栫爜)鐨勬暟鎹�
+            String formData = "data=" + urlEncodedData;
+            //System.out.println("7. Form鏁版嵁: " + formData);
+
+            // 8. Basic Auth璁よ瘉
+            String credentials = DataAcquisitionConfiguration.BCS_USER_NAME + ":" + DataAcquisitionConfiguration.BCS_PWD;
+            String auth = X5StringUtils.encodeBase64(credentials);
+           // System.out.println("8. Basic Auth: Basic " + auth);
+
+            // 9. 鏋勫缓HTTP璇锋眰 - 涓ユ牸鎸夌収C#浠g爜鐨勮姹傛牸寮�
+            RequestBody body = RequestBody.create(formData, MediaType.parse("application/x-www-form-urlencoded"));
+            Request httpRequest = new Request.Builder()
+                    .url(DataAcquisitionConfiguration.BCS_101_URL)
+                    .method("POST", body)
+                    .addHeader("Content-Type", "application/x-www-form-urlencoded")
+                    .addHeader("Authorization", "Basic " + auth)
+                    .addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
+                    .addHeader("Cache-Control", "no-cache")
+                    .addHeader("Pragma", "no-cache")
+                    .build();
+
+            //System.out.println("9. 鍙戦�乆5鍗忚璇锋眰鍒�: " + DataAcquisitionConfiguration.BCS_101_URL);
+
+            // 10. 鎵ц璇锋眰
+            try (Response response = client.newCall(httpRequest).execute()) {
+                System.out.println("10. HTTP鐘舵�佺爜: " + response.code());
+                System.out.println("11. 鍝嶅簲澶�: " + response.headers());
+
+                if (response.body() != null) {
+                    String responseBody = response.body().string();
+                    System.out.println("12. 鍘熷鍝嶅簲: " + responseBody);
+
+                    // 11. 灏濊瘯瑙f瀽涓篨5Response鏍煎紡
+                    try {
+                        X5Response x5Response = objectMapper.readValue(responseBody, X5Response.class);
+                        System.out.println("13. X5鍝嶅簲瑙f瀽鎴愬姛: " + x5Response);
+
+                        // 妫�鏌ュ搷搴旂姸鎬�
+                        if (x5Response.getHeader() != null && "200".equals(x5Response.getHeader().getCode())) {
+                            System.out.println("14. X5鍗忚璋冪敤鎴愬姛");
+                        } else {
+                            System.out.println("14. X5鍗忚璋冪敤澶辫触: " +
+                                    (x5Response.getHeader() != null ? x5Response.getHeader().getDesc() : "鏈煡閿欒"));
+                        }
+                    } catch (Exception e) {
+                        System.out.println("13. 闈瀀5鏍煎紡鍝嶅簲锛岀洿鎺ヨ繑鍥炲師濮嬪唴瀹�");
+                    }
+
+                    return responseBody;
+                }
+
+                throw new IOException("Empty response body");
             }
-            throw new IOException("Empty response body");
+
+        } catch (Exception ex) {
+            System.err.println("BCS101 X5鍗忚璋冪敤寮傚父: " + ex.getMessage());
+            ex.printStackTrace();
+            throw new IOException("BCS101 X5鍗忚璋冪敤澶辫触", ex);
         }
     }
+
 }

--
Gitblit v1.9.3