From dfca73284ec549bf83a2c7d59b37cdcdb44800e0 Mon Sep 17 00:00:00 2001
From: tjx <t2856754968@163.com>
Date: 星期五, 24 十月 2025 13:05:22 +0800
Subject: [PATCH] 111
---
src/main/java/com/gs/xiaomi/service/BCS101ApiService.java | 150 ++++++++++++++++++++++++++++++-------------------
1 files changed, 92 insertions(+), 58 deletions(-)
diff --git a/src/main/java/com/gs/xiaomi/service/BCS101ApiService.java b/src/main/java/com/gs/xiaomi/service/BCS101ApiService.java
index 7c157cc..e36db50 100644
--- a/src/main/java/com/gs/xiaomi/service/BCS101ApiService.java
+++ b/src/main/java/com/gs/xiaomi/service/BCS101ApiService.java
@@ -4,13 +4,15 @@
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
@@ -28,80 +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 缃戠粶寮傚父
- * 鎺ュ彛杩斿洖
- * Error: ERROR_IN_MODULECHAIN;ERROR_IN_MODULECHAIN, Sender Channel 'CC_MI_OEM_HTTP_OUT' (ID: a58369adbaa03aafb76d2c02c2ae7cd7): Catching exception calling messaging system
- * 鎴戞槸闇�瑕乆5鍗忚鐨勶紝 鎴戠湅浣犳病鏈変负鎴戞坊鍔�
- * APP ID锛歜cs_fty_177301
- * APP Key锛欼JBVGMJXG4ZTAMLSMFXGI33NONQWY5DG
*/
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);
- // 鐢熸垚鏃堕棿鎴�
- String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
+ // 4. 鏋勫缓X5Request
+ X5Request x5Request = new X5Request(header, bodyStr);
+ String x5RequestJson = objectMapper.writeValueAsString(x5Request);
+ System.out.println("4. X5Request JSON: " + x5RequestJson);
- // 鐢熸垚X5绛惧悕
- String signature = generateX5Signature(
- DataAcquisitionConfiguration.BCS_APP_ID,
- DataAcquisitionConfiguration.BCS_APP_Key,
- timestamp,
- formData
- );
+ // 5. Base64缂栫爜鏁翠釜X5Request
+ String base64Data = X5StringUtils.encodeBase64(x5RequestJson);
+ System.out.println("5. Base64缂栫爜: " + base64Data);
- // 鏋勫缓Authorization header
- String credentials = DataAcquisitionConfiguration.BCS_USER_NAME + ":" + DataAcquisitionConfiguration.BCS_PWD;
- String auth = X5StringUtils.encodeBase64(credentials);
+ // 6. URL缂栫爜
+ String urlEncodedData = URLEncoder.encode(base64Data, "UTF-8");
+ System.out.println("6. URL缂栫爜: " + urlEncodedData);
- // 鏋勫缓璇锋眰浣�
- RequestBody body = RequestBody.create(formData, MediaType.parse("application/x-www-form-urlencoded"));
+ // 7. 鏋勫缓form琛ㄥ崟鏁版嵁: data=url缂栫爜(base64缂栫爜)鐨勬暟鎹�
+ String formData = "data=" + urlEncodedData;
+ System.out.println("7. Form鏁版嵁: " + formData);
- // 鏋勫缓璇锋眰
- 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("X-App-Id", DataAcquisitionConfiguration.BCS_APP_ID)
- .addHeader("X-Timestamp", timestamp)
- .addHeader("X-Signature", signature)
- .build();
+ // 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);
- // 鎵ц璇锋眰
- try (Response response = client.newCall(httpRequest).execute()) {
- if (response.body() != null) {
- return response.body().string();
+ // 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);
}
}
- /**
- * 鐢熸垚X5鍗忚绛惧悕
- *
- * @param appId APP ID
- * @param appKey APP Key
- * @param timestamp 鏃堕棿鎴�
- * @param data 璇锋眰鏁版嵁
- * @return 绛惧悕瀛楃涓�
- */
- private String generateX5Signature(String appId, String appKey, String timestamp, String data) {
- // X5绛惧悕绠楁硶: MD5(appId + appKey + timestamp + data)
- String signString = appId + appKey + timestamp + data;
- return DigestUtil.md5Hex(signString).toUpperCase();
- }
}
--
Gitblit v1.9.3