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