From 721bd249ecfda100ed275c9e9688fdf72adafd4a Mon Sep 17 00:00:00 2001
From: 啊鑫 <t2856754968@163.com>
Date: 星期三, 20 八月 2025 15:09:40 +0800
Subject: [PATCH] 条码接口测试

---
 src/main/java/com/gs/xiaomi/config/DataAcquisitionConfiguration.java |   19 +++++-
 src/main/java/com/gs/xiaomi/service/BCS101ApiService.java            |   72 ++++++++++++++++++++++++
 src/main/java/com/gs/xiaomi/service/BCS101Service.java               |   16 +++++
 src/test/java/com/gs/xiaomi/XiaomiApplicationTests.java              |   35 ++++++++++-
 4 files changed, 135 insertions(+), 7 deletions(-)

diff --git a/src/main/java/com/gs/xiaomi/config/DataAcquisitionConfiguration.java b/src/main/java/com/gs/xiaomi/config/DataAcquisitionConfiguration.java
index 62dca9b..b6259fe 100644
--- a/src/main/java/com/gs/xiaomi/config/DataAcquisitionConfiguration.java
+++ b/src/main/java/com/gs/xiaomi/config/DataAcquisitionConfiguration.java
@@ -8,13 +8,26 @@
     public static final String IV_CODEXM103 = "VDATA.XM103";
     public static final String IV_CODEXM104 = "VDATA.XM104";
     public static final String IV_PASSKEY = "c5Kl}xN&i(";
-//    public static final String IV_PASSKEY = "QHTe%uvA*s";
+    //    public static final String IV_PASSKEY = "QHTe%uvA*s"; //娴嬭瘯
     public static final String USER_NAME = "RFCZJXIAOBU";
     public static final String PWD = "m9%qPEWK";
-//    public  static final String PWD = "ppB9R!He";
+    //    public  static final String PWD = "ppB9R!He"; //娴嬭瘯
     public static final String LIFNR = "177301";
     public static final String XM104_URL = "https://mipop.p.mi.com/XISOAPAdapter/MessageServlet?senderParty=&senderService=ZJ_XIAOBU_PRD&receiverParty=&receiverService=&interface=SI_ZFM_WS_API_OUT&interfaceNamespace=http://xiaomi.com/srm/b2b";
-    //public static final String XM104_URL = "https://mipoq.p.mi.com/XISOAPAdapter/MessageServlet?p=ic/9e8a118fb0b7379aa11c2a5c2860982a&senderParty=&senderService=ZJ_XIAOBU_QAS&receiverParty=&receiverService=&interface=SI_ZFM_WS_API_OUT&interfaceNamespace=http://xiaomi.com/srm/b2b";
+
+    //public static final String XM104_URL = "https://mipoq.p.mi.com/XISOAPAdapter/MessageServlet?p=ic/9e8a118fb0b7379aa11c2a5c2860982a&senderParty=&senderService=ZJ_XIAOBU_QAS&receiverParty=&receiverService=&interface=SI_ZFM_WS_API_OUT&interfaceNamespace=http://xiaomi.com/srm/b2b"; //娴嬭瘯
+
+    //=====================鏉$爜鑾峰彇
+    public static final String BCS_101_URL = "https://mipoq.p.mi.com/HttpAdapter/HttpMessageServlet?interfaceNamespace=http://xiaomi.com/bcs/dummy&interface=SI_MI_BCS_IF101_GET_SN_S_OUT&senderService=ZJ_XIAOBU_QAS&qos=BE"; //娴嬭瘯
+
+    public static final String BCS_USER_NAME = "RFCBCSXIAOBU"; //娴嬭瘯
+    public static final String BCS_PWD = "L5X8!pdL"; //娴嬭瘯
+
+    //X5鍗忚
+    public static final String BCS_APP_ID = "bcs_fty_177301"; //娴嬭瘯
+    public static final String BCS_APP_Key = "IJBVGMJXG4ZTAMLSMFXGI33NONQWY5DG"; //娴嬭瘯
+
+
     public static String getIvPass(String ivCode) {
         return DigestUtil.md5Hex(ivCode + "/" + IV_USER + "/" + IV_PASSKEY).toUpperCase();
     }
diff --git a/src/main/java/com/gs/xiaomi/service/BCS101ApiService.java b/src/main/java/com/gs/xiaomi/service/BCS101ApiService.java
new file mode 100644
index 0000000..8b16f88
--- /dev/null
+++ b/src/main/java/com/gs/xiaomi/service/BCS101ApiService.java
@@ -0,0 +1,72 @@
+package com.gs.xiaomi.service;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.gs.xiaomi.config.DataAcquisitionConfiguration;
+import com.gs.xiaomi.dto.BCS101Request;
+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
+public class BCS101ApiService {
+
+    private final OkHttpClient client;
+    private final ObjectMapper objectMapper;
+
+    public BCS101ApiService() {
+        this.client = new OkHttpClient.Builder()
+                .connectTimeout(3000, TimeUnit.SECONDS)
+                .readTimeout(90, TimeUnit.SECONDS)
+                .build();
+        this.objectMapper = new ObjectMapper();
+    }
+
+    /**
+     * 鑾峰彇BCS101鏁版嵁
+     *
+     * @param request BCS101璇锋眰鍙傛暟
+     * @return API鍝嶅簲
+     * @throws IOException 缃戠粶寮傚父
+     */
+    public String getBCS101Data(BCS101Request request) throws IOException {
+        // 鐩存帴灏嗚姹傚璞¤浆鎹负JSON瀛楃涓�
+        String jsonData = objectMapper.writeValueAsString(request);
+
+        // Base64缂栫爜
+        String base64Data = X5StringUtils.encodeBase64(jsonData);
+
+        // URL缂栫爜
+        String urlEncodedData = URLEncoder.encode(base64Data, String.valueOf(StandardCharsets.UTF_8));
+
+        // 鏋勫缓form琛ㄥ崟鏁版嵁
+        String formData = "data=" + urlEncodedData;
+
+        // 鏋勫缓Authorization header
+        String credentials = DataAcquisitionConfiguration.BCS_USER_NAME + ":" + DataAcquisitionConfiguration.BCS_PWD;
+        String auth = X5StringUtils.encodeBase64(credentials);
+
+        // 鏋勫缓璇锋眰浣�
+        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)
+                .build();
+
+        // 鎵ц璇锋眰
+        try (Response response = client.newCall(httpRequest).execute()) {
+            if (response.body() != null) {
+                return response.body().string();
+            }
+            throw new IOException("Empty response body");
+        }
+    }
+}
diff --git a/src/main/java/com/gs/xiaomi/service/BCS101Service.java b/src/main/java/com/gs/xiaomi/service/BCS101Service.java
new file mode 100644
index 0000000..d7e6eed
--- /dev/null
+++ b/src/main/java/com/gs/xiaomi/service/BCS101Service.java
@@ -0,0 +1,16 @@
+package com.gs.xiaomi.service;
+
+
+import lombok.RequiredArgsConstructor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@Transactional(rollbackFor = Exception.class)
+@RequiredArgsConstructor
+public class BCS101Service {
+
+    private static final Logger log = LoggerFactory.getLogger(XM104Service.class);
+}
diff --git a/src/test/java/com/gs/xiaomi/XiaomiApplicationTests.java b/src/test/java/com/gs/xiaomi/XiaomiApplicationTests.java
index 81ed733..b7a66c5 100644
--- a/src/test/java/com/gs/xiaomi/XiaomiApplicationTests.java
+++ b/src/test/java/com/gs/xiaomi/XiaomiApplicationTests.java
@@ -1,5 +1,8 @@
 package com.gs.xiaomi;
 
+import cn.hutool.crypto.digest.DigestUtil;
+import com.gs.xiaomi.dto.BCS101Request;
+import com.gs.xiaomi.service.BCS101ApiService;
 import com.gs.xiaomi.service.XM104Service;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -11,6 +14,9 @@
     @Autowired
     private XM104Service xm104Service;
 
+    @Autowired
+    private BCS101ApiService bcs101ApiService;
+
     @Test
     void contextLoads() throws Exception {
         xm104Service.getDb();
@@ -18,10 +24,31 @@
 
     @Test
     void test() {
-        String str = ",,";
-        String[] parts = str.split(",");
-        for (String part : parts) {
-            System.out.println(part);
+//        String str = ",,";
+//        String[] parts = str.split(",");
+//        for (String part : parts) {
+//            System.out.println(part);
+//        }
+        System.out.println(DigestUtil.md5Hex("VDATA.XM104/177301/c5Kl}xN&i(").toUpperCase());
+    }
+
+    @Test
+    void testBCS101ApiService() throws Exception {
+        // 鍒涘缓娴嬭瘯璇锋眰鍙傛暟
+        BCS101Request request = new BCS101Request();
+        request.setSupplierId("100071");
+        request.setDocNo("9311991542");
+        request.setDocType("ASNGR");
+        request.setPageNo(1);
+        request.setPageSize(1000);
+
+        try {
+            // 璋冪敤BCS101 API鏈嶅姟
+            String response = bcs101ApiService.getBCS101Data(request);
+            System.out.println("BCS101 API Response: " + response);
+        } catch (Exception e) {
+            System.out.println("BCS101 API璋冪敤寮傚父: " + e.getMessage());
+            e.printStackTrace();
         }
     }
 }

--
Gitblit v1.9.3