From 2c09b3c972c22a55351ed6e27fd8d1e7459967d2 Mon Sep 17 00:00:00 2001 From: 啊鑫 <t2856754968@163.com> Date: 星期四, 28 八月 2025 17:46:34 +0800 Subject: [PATCH] 条码接口测试 --- src/main/java/com/gs/xiaomi/service/BCS101ApiService.java | 451 +++++++------------------------------ src/test/java/com/gs/xiaomi/XiaomiApplicationTests.java | 260 --------------------- 2 files changed, 91 insertions(+), 620 deletions(-) diff --git a/src/main/java/com/gs/xiaomi/service/BCS101ApiService.java b/src/main/java/com/gs/xiaomi/service/BCS101ApiService.java index f1c36eb..e36db50 100644 --- a/src/main/java/com/gs/xiaomi/service/BCS101ApiService.java +++ b/src/main/java/com/gs/xiaomi/service/BCS101ApiService.java @@ -1,10 +1,12 @@ package com.gs.xiaomi.service; -import cn.hutool.crypto.SmUtil; 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; @@ -28,387 +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 缃戠粶寮傚父 - * <p> - * HTTP璁块棶闇�瑕丅aisc Auth(璇ヨ处鎴蜂负鏉$爜闆嗘垚涓撶敤璐︽埛锛屽瘑鐮佸垏鍕胯緭鍏ラ敊璇紒锛�: - * 璐︽埛: RFCBCSXIAOBU - * 瀵嗙爜: L5X8!pdL - * 濡備綍浣跨敤锛� - * 浣跨敤http 璋冪敤鏃堕渶瑕佹牴鎹处鎴峰瘑鐮佸鍔爃ttp headers鍙傛暟Authorization - * 瀵瑰簲鐨勫�间负Basic bas64(璐︽埛:瀵嗙爜) - * <p> - * X5鍗忚涓娇鐢ㄧ殑锛堝浗瀵嗙畻娉曪級 - * 瀵瑰簲appid鍜屽搴攁ppkey璇蜂娇鐢ㄥ皬绫虫潯鐮佸钩鍙板垎閰嶇殑瀵瑰簲鐨勬祴璇曟満淇℃伅锛� - * APP ID锛歜cs_fty_177301 - * APP Key锛欼JBVGMJXG4ZTAMLSMFXGI33NONQWY5DG - * <p> - * HTTP HEADER鍙傛暟: - * Authorization Basic XXXXX - * 鍚屾椂璇锋坊鍔燞TTP HEADER鍙傛暟锛� - * Content-Type application/x-www-form-urlencoded - * body閫夋嫨raw锛� - * 鏁版嵁鏍煎紡涓篸ata=url缂栫爜(base64缂栫爜)鐨勬暟鎹� - * </p> */ 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, "UTF-8"); - - // 鏋勫缓form琛ㄥ崟鏁版嵁 - 鎸夌収娉ㄩ噴瑕佹眰锛歞ata=url缂栫爜(base64缂栫爜)鐨勬暟鎹� - String formData = "data=" + urlEncodedData; - - // 鏋勫缓Basic Auth - 浣跨敤涓撶敤鏉$爜闆嗘垚璐︽埛 - String credentials = DataAcquisitionConfiguration.BCS_USER_NAME + ":" + DataAcquisitionConfiguration.BCS_PWD; - String auth = X5StringUtils.encodeBase64(credentials); - - // 鏋勫缓璇锋眰浣� - Content-Type: application/x-www-form-urlencoded - 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) { - String responseBody = response.body().string(); - // 璁板綍鍝嶅簲淇℃伅鐢ㄤ簬璋冭瘯 - System.out.println("BCS101 API鍝嶅簲鐘舵��: " + response.code()); - System.out.println("BCS101 API鍝嶅簲鍐呭: " + responseBody); - return responseBody; - } - throw new IOException("Empty response body"); - } - } - - /** - * 鑾峰彇BCS101鏁版嵁 - 甯5鍗忚鏀寔 - * - * @param request BCS101璇锋眰鍙傛暟 - * @param enableX5 鏄惁鍚敤X5鍗忚鍥藉瘑绛惧悕 - * @return API鍝嶅簲 - * @throws IOException 缃戠粶寮傚父 - */ - public String getBCS101DataWithX5(BCS101Request request, boolean enableX5) throws IOException { - // 鐩存帴灏嗚姹傚璞¤浆鎹负JSON瀛楃涓� - String jsonData = objectMapper.writeValueAsString(request); - - // Base64缂栫爜 - String base64Data = X5StringUtils.encodeBase64(jsonData); - - // URL缂栫爜 - String urlEncodedData = URLEncoder.encode(base64Data, "UTF-8"); - - // 鏋勫缓form琛ㄥ崟鏁版嵁 - String formData = "data=" + urlEncodedData; - - // 鏋勫缓Basic Auth - 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.Builder requestBuilder = new Request.Builder() - .url(DataAcquisitionConfiguration.BCS_101_URL) - .method("POST", body) - .addHeader("Content-Type", "application/x-www-form-urlencoded") - .addHeader("Authorization", "Basic " + auth); - - // 濡傛灉鍚敤X5鍗忚锛屾坊鍔犲浗瀵嗙鍚� - if (enableX5) { - String timestamp = String.valueOf(System.currentTimeMillis() / 1000); - String signature = generateX5Signature( - DataAcquisitionConfiguration.BCS_APP_ID, - DataAcquisitionConfiguration.BCS_APP_Key, - timestamp, - formData - ); - requestBuilder.addHeader("X-App-Id", DataAcquisitionConfiguration.BCS_APP_ID) - .addHeader("X-Timestamp", timestamp) - .addHeader("X-Signature", signature); - } - - Request httpRequest = requestBuilder.build(); - - // 鎵ц璇锋眰 - try (Response response = client.newCall(httpRequest).execute()) { - if (response.body() != null) { - String responseBody = response.body().string(); - System.out.println("BCS101 API鍝嶅簲鐘舵��: " + response.code()); - System.out.println("BCS101 API鍝嶅簲鍐呭: " + responseBody); - return responseBody; - } - throw new IOException("Empty response body"); - } - } - - /** - * 鐢熸垚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鍗忚鍥藉瘑绠楁硶绛惧悕: 灏濊瘯浣跨敤SM3锛屽鏋滀笉鏀寔鍒欎娇鐢∕D5 - String signString = appId + appKey + timestamp + data; try { - // 灏濊瘯浣跨敤鍥藉瘑SM3绠楁硶 - return SmUtil.sm3(signString).toUpperCase(); - } catch (Exception e) { - // 濡傛灉SM3涓嶅彲鐢紝fallback鍒癕D5 - System.out.println("SM3绠楁硶涓嶅彲鐢紝浣跨敤MD5鏇夸唬: " + e.getMessage()); - return DigestUtil.md5Hex(signString).toUpperCase(); - } - } + System.out.println("=== BCS101 X5鍗忚瀹炵幇 (鍩轰簬C#浠g爜) ==="); - /** - * 璋冭瘯鐗堟湰 - 璇︾粏杈撳嚭璇锋眰淇℃伅鏉ュ畾浣嶉棶棰� - */ - public String getBCS101DataDebug(BCS101Request request) throws IOException { - System.out.println("=== BCS101 API 璋冭瘯淇℃伅 ==="); + // 1. 搴忓垪鍖朆ody涓篔SON瀛楃涓� + String bodyStr = objectMapper.writeValueAsString(request); + System.out.println("1. Body JSON: " + bodyStr); - // 鐩存帴灏嗚姹傚璞¤浆鎹负JSON瀛楃涓� - String jsonData = objectMapper.writeValueAsString(request); - System.out.println("1. 鍘熷JSON鏁版嵁: " + jsonData); + // 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); - // Base64缂栫爜 - String base64Data = X5StringUtils.encodeBase64(jsonData); - System.out.println("2. Base64缂栫爜鍚�: " + base64Data); + // 3. 鏋勫缓X5Header + X5Header header = new X5Header(appId, sign); - // URL缂栫爜 - String urlEncodedData = URLEncoder.encode(base64Data, "UTF-8"); - System.out.println("3. URL缂栫爜鍚�: " + urlEncodedData); + // 4. 鏋勫缓X5Request + X5Request x5Request = new X5Request(header, bodyStr); + String x5RequestJson = objectMapper.writeValueAsString(x5Request); + System.out.println("4. X5Request JSON: " + x5RequestJson); - // 鏋勫缓form琛ㄥ崟鏁版嵁 - String formData = "data=" + urlEncodedData; - System.out.println("4. Form鏁版嵁: " + formData); + // 5. Base64缂栫爜鏁翠釜X5Request + String base64Data = X5StringUtils.encodeBase64(x5RequestJson); + System.out.println("5. Base64缂栫爜: " + base64Data); - // 鏋勫缓Basic Auth - String credentials = DataAcquisitionConfiguration.BCS_USER_NAME + ":" + DataAcquisitionConfiguration.BCS_PWD; - String auth = X5StringUtils.encodeBase64(credentials); - System.out.println("5. Auth缂栫爜: Basic " + auth); - System.out.println("6. 璇锋眰URL: " + DataAcquisitionConfiguration.BCS_101_URL); + // 6. URL缂栫爜 + String urlEncodedData = URLEncoder.encode(base64Data, "UTF-8"); + System.out.println("6. URL缂栫爜: " + urlEncodedData); - // 灏濊瘯涓嶅悓鐨凜ontent-Type - RequestBody body = RequestBody.create(formData, MediaType.parse("application/x-www-form-urlencoded; charset=utf-8")); + // 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; charset=utf-8") - .addHeader("Authorization", "Basic " + auth) - .addHeader("Accept", "application/xml, text/xml, */*") - .addHeader("User-Agent", "BCS101-Client/1.0") - .addHeader("Connection", "close") - .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); - System.out.println("7. 鍙戦�佽姹�..."); + // 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(); - // 鎵ц璇锋眰 - try (Response response = client.newCall(httpRequest).execute()) { - System.out.println("8. 鍝嶅簲鐘舵�佺爜: " + response.code()); - System.out.println("9. 鍝嶅簲澶�: " + response.headers().toString()); + System.out.println("9. 鍙戦�乆5鍗忚璇锋眰鍒�: " + DataAcquisitionConfiguration.BCS_101_URL); - if (response.body() != null) { - String responseBody = response.body().string(); - System.out.println("10. 鍝嶅簲鍐呭: " + responseBody); - return responseBody; + // 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); } } - /** - * 绠�鍖栫増鏈� - 灏濊瘯鐩存帴鍙戦�丣SON鏁版嵁 - */ - public String getBCS101DataSimple(BCS101Request request) throws IOException { - System.out.println("=== BCS101 API 绠�鍖栫増鏈祴璇� ==="); - - // 鐩存帴灏嗚姹傚璞¤浆鎹负JSON瀛楃涓� - String jsonData = objectMapper.writeValueAsString(request); - System.out.println("鍙戦�佺殑JSON鏁版嵁: " + jsonData); - - // 鏋勫缓Basic Auth - String credentials = DataAcquisitionConfiguration.BCS_USER_NAME + ":" + DataAcquisitionConfiguration.BCS_PWD; - String auth = X5StringUtils.encodeBase64(credentials); - - // 灏濊瘯鐩存帴鍙戦�丣SON鏁版嵁锛堜笉缁忚繃Base64鍜孶RL缂栫爜锛� - RequestBody body = RequestBody.create(jsonData, MediaType.parse("application/json; charset=utf-8")); - - Request httpRequest = new Request.Builder() - .url(DataAcquisitionConfiguration.BCS_101_URL) - .method("POST", body) - .addHeader("Content-Type", "application/json; charset=utf-8") - .addHeader("Authorization", "Basic " + auth) - .build(); - - // 鎵ц璇锋眰 - try (Response response = client.newCall(httpRequest).execute()) { - System.out.println("绠�鍖栫増鏈搷搴旂姸鎬�: " + response.code()); - if (response.body() != null) { - String responseBody = response.body().string(); - System.out.println("绠�鍖栫増鏈搷搴斿唴瀹�: " + responseBody); - return responseBody; - } - throw new IOException("Empty response body"); - } - } - - /** - * X5鍗忚鏍囧噯瀹炵幇鐗堟湰 - * 鍩轰簬娉ㄩ噴瑕佹眰锛歑5鍗忚涓娇鐢ㄧ殑锛堝浗瀵嗙畻娉曪級 - * APP ID锛歜cs_fty_177301, APP Key锛欼JBVGMJXG4ZTAMLSMFXGI33NONQWY5DG - */ - public String getBCS101DataX5Standard(BCS101Request request) throws IOException { - System.out.println("=== BCS101 API X5鍗忚鏍囧噯瀹炵幇 ==="); - - // 1. 鏋勫缓JSON鏁版嵁 - String jsonData = objectMapper.writeValueAsString(request); - System.out.println("1. 鍘熷JSON: " + jsonData); - - // 2. Base64缂栫爜 - String base64Data = X5StringUtils.encodeBase64(jsonData); - System.out.println("2. Base64缂栫爜: " + base64Data); - - // 3. URL缂栫爜 - String urlEncodedData = URLEncoder.encode(base64Data, "UTF-8"); - System.out.println("3. URL缂栫爜: " + urlEncodedData); - - // 4. 鏋勫缓form鏁版嵁 - String formData = "data=" + urlEncodedData; - System.out.println("4. Form鏁版嵁: " + formData); - - // 5. X5鍗忚鍙傛暟 - String appId = DataAcquisitionConfiguration.BCS_APP_ID; - String appKey = DataAcquisitionConfiguration.BCS_APP_Key; - String timestamp = String.valueOf(System.currentTimeMillis() / 1000); - String nonce = String.valueOf(System.currentTimeMillis()); // 浣跨敤鏃堕棿鎴充綔涓簄once - - // 6. X5鍗忚绛惧悕 - 鏍囧噯绠楁硶: hash(appId + timestamp + nonce + appKey + data) - String signString = appId + timestamp + nonce + appKey + formData; - String signature; - try { - signature = SmUtil.sm3(signString); - System.out.println("5. 浣跨敤SM3绛惧悕"); - } catch (Exception e) { - signature = DigestUtil.md5Hex(signString).toUpperCase(); - System.out.println("5. 浣跨敤MD5绛惧悕 (SM3涓嶅彲鐢�)"); - } - - System.out.println("6. 绛惧悕瀛楃涓�: " + signString); - System.out.println("7. 绛惧悕鍊�: " + signature); - - // 7. Basic Auth - String credentials = DataAcquisitionConfiguration.BCS_USER_NAME + ":" + DataAcquisitionConfiguration.BCS_PWD; - String auth = X5StringUtils.encodeBase64(credentials); - - // 8. 鏋勫缓璇锋眰浣� - RequestBody body = RequestBody.create(formData, MediaType.parse("application/x-www-form-urlencoded")); - - // 9. 鏋勫缓璇锋眰 - 娣诲姞X5鍗忚鏍囧噯澶撮儴 - 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", appId) - .addHeader("X-Timestamp", timestamp) - .addHeader("X-Nonce", nonce) - .addHeader("X-Signature", signature) - .build(); - - System.out.println("8. 鍙戦�乆5鏍囧噯璇锋眰..."); - - // 10. 鎵ц璇锋眰 - try (Response response = client.newCall(httpRequest).execute()) { - System.out.println("9. 鍝嶅簲鐘舵��: " + response.code()); - System.out.println("10. 鍝嶅簲澶�: " + response.headers()); - - if (response.body() != null) { - String responseBody = response.body().string(); - System.out.println("11. 鍝嶅簲鍐呭: " + responseBody); - return responseBody; - } - throw new IOException("Empty response body"); - } - } - - /** - * X5鍗忚鍙樹綋2 - 涓嶅悓鐨勭鍚嶇畻娉� - * 绛惧悕绠楁硶: hash(appKey + data + timestamp + appId) - */ - public String getBCS101DataX5Variant(BCS101Request request) throws IOException { - System.out.println("=== BCS101 API X5鍗忚鍙樹綋2 ==="); - - // 1. 鏋勫缓鏁版嵁 - String jsonData = objectMapper.writeValueAsString(request); - String base64Data = X5StringUtils.encodeBase64(jsonData); - String urlEncodedData = URLEncoder.encode(base64Data, "UTF-8"); - String formData = "data=" + urlEncodedData; - - // 2. X5鍗忚鍙傛暟 - String appId = DataAcquisitionConfiguration.BCS_APP_ID; - String appKey = DataAcquisitionConfiguration.BCS_APP_Key; - String timestamp = String.valueOf(System.currentTimeMillis() / 1000); - - // 3. 鍙樹綋绛惧悕绠楁硶: appKey + data + timestamp + appId - String signString = appKey + formData + timestamp + appId; - String signature; - try { - signature = SmUtil.sm3(signString); - System.out.println("浣跨敤SM3绛惧悕鍙樹綋"); - } catch (Exception e) { - signature = DigestUtil.md5Hex(signString).toUpperCase(); - System.out.println("浣跨敤MD5绛惧悕鍙樹綋"); - } - - System.out.println("绛惧悕瀛楃涓�(鍙樹綋): " + signString); - System.out.println("绛惧悕鍊�(鍙樹綋): " + signature); - - // 4. Basic Auth - String credentials = DataAcquisitionConfiguration.BCS_USER_NAME + ":" + DataAcquisitionConfiguration.BCS_PWD; - String auth = X5StringUtils.encodeBase64(credentials); - - // 5. 鏋勫缓璇锋眰 - 浣跨敤甯歌鐨刋5澶撮儴鍚嶇О - 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("appId", appId) - .addHeader("timestamp", timestamp) - .addHeader("signature", signature) - .build(); - - System.out.println("鍙戦�乆5鍙樹綋璇锋眰..."); - - try (Response response = client.newCall(httpRequest).execute()) { - System.out.println("鍙樹綋鍝嶅簲鐘舵��: " + response.code()); - if (response.body() != null) { - String responseBody = response.body().string(); - System.out.println("鍙樹綋鍝嶅簲鍐呭: " + responseBody); - return responseBody; - } - throw new IOException("Empty response body"); - } - } } diff --git a/src/test/java/com/gs/xiaomi/XiaomiApplicationTests.java b/src/test/java/com/gs/xiaomi/XiaomiApplicationTests.java index 297f9b1..d30c6a8 100644 --- a/src/test/java/com/gs/xiaomi/XiaomiApplicationTests.java +++ b/src/test/java/com/gs/xiaomi/XiaomiApplicationTests.java @@ -1,22 +1,12 @@ package com.gs.xiaomi; -import cn.hutool.core.date.DateUtil; -import cn.hutool.crypto.SmUtil; import cn.hutool.crypto.digest.DigestUtil; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.gs.xiaomi.config.DataAcquisitionConfiguration; 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; import org.springframework.boot.test.context.SpringBootTest; - -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.util.Base64; -import java.util.Date; @SpringBootTest class XiaomiApplicationTests { @@ -52,254 +42,8 @@ request.setPageNo(1); request.setPageSize(1000); - //Error: ERROR_IN_MODULECHAIN;ERROR_IN_MODULECHAIN, Sender Channel 'CC_MI_OEM_HTTP_OUT' (ID: a58369adbaa03aafb76d2c02c2ae7cd7): Catching exception calling messaging system - System.out.println("=== 娴嬭瘯BCS101 API鏈嶅姟锛圔asic Auth鐗堟湰锛� ==="); - try { - // 璋冪敤鏍囧噯BCS101 API鏈嶅姟锛堝彧浣跨敤Basic Auth锛� - String response = bcs101ApiService.getBCS101Data(request); - System.out.println("BCS101 API Response: " + response); - } catch (Exception e) { - System.out.println("BCS101 API璋冪敤寮傚父: " + e.getMessage()); - e.printStackTrace(); - } + String bcs101Data = bcs101ApiService.getBCS101Data(request); + System.out.println(bcs101Data); - //Error: ERROR_IN_MODULECHAIN;ERROR_IN_MODULECHAIN, Sender Channel 'CC_MI_OEM_HTTP_OUT' (ID: a58369adbaa03aafb76d2c02c2ae7cd7): Catching exception calling messaging system - System.out.println("\n=== 娴嬭瘯BCS101 API鏈嶅姟锛堝甫X5鍗忚鐗堟湰锛� ==="); - try { - // 璋冪敤甯5鍗忚鐨凚CS101 API鏈嶅姟 - String responseWithX5 = bcs101ApiService.getBCS101DataWithX5(request, true); - System.out.println("BCS101 API Response (X5): " + responseWithX5); - } catch (Exception e) { - System.out.println("BCS101 API X5璋冪敤寮傚父: " + e.getMessage()); - e.printStackTrace(); - } - - System.out.println("\n=== 娴嬭瘯BCS101 API鏈嶅姟锛堣皟璇曠増鏈級 ==="); - try { - // 璋冪敤璋冭瘯鐗堟湰API鏈嶅姟 - String debugResponse = bcs101ApiService.getBCS101DataDebug(request); - System.out.println("BCS101 API Debug Response: " + debugResponse); - } catch (Exception e) { - System.out.println("BCS101 API 璋冭瘯鐗堟湰璋冪敤寮傚父: " + e.getMessage()); - e.printStackTrace(); - } - - System.out.println("\n=== 娴嬭瘯BCS101 API鏈嶅姟锛堢畝鍖栫増鏈級 ==="); - try { - // 璋冪敤绠�鍖栫増鏈珹PI鏈嶅姟 - String simpleResponse = bcs101ApiService.getBCS101DataSimple(request); - System.out.println("BCS101 API Simple Response: " + simpleResponse); - } catch (Exception e) { - System.out.println("BCS101 API 绠�鍖栫増鏈皟鐢ㄥ紓甯�: " + e.getMessage()); - e.printStackTrace(); - } - - System.out.println("\n=== 娴嬭瘯BCS101 API鏈嶅姟锛圶5鍗忚鏍囧噯鐗堟湰锛� ==="); - try { - // 璋冪敤X5鍗忚鏍囧噯鐗堟湰 - String x5StandardResponse = bcs101ApiService.getBCS101DataX5Standard(request); - System.out.println("BCS101 API X5Standard Response: " + x5StandardResponse); - } catch (Exception e) { - System.out.println("BCS101 API X5鏍囧噯鐗堟湰璋冪敤寮傚父: " + e.getMessage()); - e.printStackTrace(); - } - - System.out.println("\n=== 娴嬭瘯BCS101 API鏈嶅姟锛圶5鍗忚鍙樹綋鐗堟湰锛� ==="); - try { - // 璋冪敤X5鍗忚鍙樹綋鐗堟湰 - String x5VariantResponse = bcs101ApiService.getBCS101DataX5Variant(request); - System.out.println("BCS101 API X5Variant Response: " + x5VariantResponse); - } catch (Exception e) { - System.out.println("BCS101 API X5鍙樹綋鐗堟湰璋冪敤寮傚父: " + e.getMessage()); - e.printStackTrace(); - } - } - - @Test - void test1() throws UnsupportedEncodingException, JsonProcessingException { - // 鍒涘缓娴嬭瘯璇锋眰瀵硅薄 - BCS101Request request = new BCS101Request(); - request.setSupplierId("177301"); - request.setDocNo("9311036039"); - request.setDocType("ASNGR"); - request.setPageNo(1); - request.setPageSize(1000); - - - ObjectMapper objectMapper = new ObjectMapper(); - - System.out.println("=== BCS101 API 瀹為檯璇锋眰鍙傛暟璇︽儏 ===\n"); - - //鏃堕棿 - String yyyyMMddHHmmss = DateUtil.format(new Date(), "yyyyMMddHHmmss"); - System.out.println(yyyyMMddHHmmss); - - // 1. 鍘熷JSON鏁版嵁 - String jsonData = objectMapper.writeValueAsString(request); - System.out.println("1. 鍘熷JSON鏁版嵁:"); - System.out.println(jsonData); - System.out.println(); - - // 2. Base64缂栫爜 - String base64Data = Base64.getEncoder().encodeToString(jsonData.getBytes("UTF-8")); - System.out.println("2. Base64缂栫爜鍚�:"); - System.out.println(base64Data); - System.out.println(); - - // 3. URL缂栫爜 - String urlEncodedData = URLEncoder.encode(base64Data, "UTF-8"); - System.out.println("3. URL缂栫爜鍚�:"); - System.out.println(urlEncodedData); - System.out.println(); - - // 4. Form鏁版嵁 - String formData = "data=" + urlEncodedData; - System.out.println("4. Form鏁版嵁 (璇锋眰Body):"); - System.out.println(formData); - System.out.println(); - - // 5. 璇锋眰URL - System.out.println("5. 璇锋眰URL:"); - System.out.println(DataAcquisitionConfiguration.BCS_101_URL); - System.out.println(); - - // 6. Basic Auth - String credentials = DataAcquisitionConfiguration.BCS_USER_NAME + ":" + DataAcquisitionConfiguration.BCS_PWD; - String auth = Base64.getEncoder().encodeToString(credentials.getBytes("UTF-8")); - System.out.println("6. Basic Auth淇℃伅:"); - System.out.println("鐢ㄦ埛鍚�: " + DataAcquisitionConfiguration.BCS_USER_NAME); - System.out.println("瀵嗙爜: " + DataAcquisitionConfiguration.BCS_PWD); - System.out.println("Base64缂栫爜: " + auth); - System.out.println(); - - // 7. X5鍗忚鍙傛暟 - String appId = DataAcquisitionConfiguration.BCS_APP_ID; - String appKey = DataAcquisitionConfiguration.BCS_APP_Key; - long timestamp = System.currentTimeMillis() / 1000; - - System.out.println("7. X5鍗忚鍙傛暟:"); - System.out.println("App ID: " + appId); - System.out.println("App Key: " + appKey); - System.out.println("Timestamp: " + timestamp); - System.out.println(); - - // 8. X5绛惧悕璁$畻 - String signString = appId + appKey + timestamp + formData; - String signature; - try { - signature = SmUtil.sm3(signString).toUpperCase(); - System.out.println("8. X5绛惧悕 (浣跨敤SM3):"); - } catch (Exception e) { - signature = DigestUtil.md5Hex(signString).toUpperCase(); - System.out.println("8. X5绛惧悕 (浣跨敤MD5):"); - } - System.out.println("绛惧悕瀛楃涓�: " + signString); - System.out.println("绛惧悕鍊�: " + signature); - System.out.println(); - - // 9. 瀹屾暣鐨凥TTP璇锋眰澶� - System.out.println("9. 瀹屾暣鐨凥TTP璇锋眰澶�:"); - System.out.println("Content-Type: application/x-www-form-urlencoded"); - System.out.println("Authorization: Basic " + auth); - System.out.println("X-App-Id: " + appId); - System.out.println("X-Timestamp: " + timestamp); - System.out.println("X-Signature: " + signature); - System.out.println(); - - // 10. 瀹屾暣鐨刢URL鍛戒护绀轰緥 - System.out.println("10. 瀹屾暣鐨刢URL鍛戒护绀轰緥:"); - System.out.println("curl -X POST \\"); - System.out.println(" '" + DataAcquisitionConfiguration.BCS_101_URL + "' \\"); - System.out.println(" -H 'Content-Type: application/x-www-form-urlencoded' \\"); - System.out.println(" -H 'Authorization: Basic " + auth + "' \\"); - System.out.println(" -H 'X-App-Id: " + appId + "' \\"); - System.out.println(" -H 'X-Timestamp: " + timestamp + "' \\"); - System.out.println(" -H 'X-Signature: " + signature + "' \\"); - System.out.println(" -d '" + formData + "'"); - System.out.println(); - - // 11. Postman鏍煎紡 - System.out.println("11. Postman娴嬭瘯鏍煎紡:"); - System.out.println("Method: POST"); - System.out.println("URL: " + DataAcquisitionConfiguration.BCS_101_URL); - System.out.println("Headers:"); - System.out.println(" Content-Type: application/x-www-form-urlencoded"); - System.out.println(" Authorization: Basic " + auth); - System.out.println(" X-App-Id: " + appId); - System.out.println(" X-Timestamp: " + timestamp); - System.out.println(" X-Signature: " + signature); - System.out.println("Body (x-www-form-urlencoded):"); - System.out.println(" data: " + urlEncodedData); - System.out.println(); - - // 12. 瀹為檯璋冪敤API骞惰幏鍙栧搷搴� - System.out.println("12. === 瀹為檯API璋冪敤鍜屽搷搴� ==="); - StringBuilder responseResult = new StringBuilder(); - - System.out.println("\n=== 娴嬭瘯BCS101 API鏈嶅姟锛圔asic Auth鐗堟湰锛� ==="); - try { - String response = bcs101ApiService.getBCS101Data(request); - System.out.println("BCS101 API Response: " + response); - responseResult.append("Basic Auth鍝嶅簲: ").append(response.length()).append("瀛楃; "); - } catch (Exception e) { - System.out.println("BCS101 API璋冪敤寮傚父: " + e.getMessage()); - responseResult.append("Basic Auth寮傚父: ").append(e.getMessage()).append("; "); - } - - System.out.println("\n=== 娴嬭瘯BCS101 API鏈嶅姟锛堝甫X5鍗忚鐗堟湰锛� ==="); - try { - String responseWithX5 = bcs101ApiService.getBCS101DataWithX5(request, true); - System.out.println("BCS101 API Response (X5): " + responseWithX5); - responseResult.append("X5鍗忚鍝嶅簲: ").append(responseWithX5.length()).append("瀛楃; "); - } catch (Exception e) { - System.out.println("BCS101 API X5璋冪敤寮傚父: " + e.getMessage()); - responseResult.append("X5鍗忚寮傚父: ").append(e.getMessage()).append("; "); - } - - System.out.println("\n=== 娴嬭瘯BCS101 API鏈嶅姟锛堣皟璇曠増鏈級 ==="); - try { - String debugResponse = bcs101ApiService.getBCS101DataDebug(request); - System.out.println("BCS101 API Debug Response: " + debugResponse); - responseResult.append("璋冭瘯鐗堟湰鍝嶅簲: ").append(debugResponse.length()).append("瀛楃; "); - } catch (Exception e) { - System.out.println("BCS101 API 璋冭瘯鐗堟湰璋冪敤寮傚父: " + e.getMessage()); - responseResult.append("璋冭瘯鐗堟湰寮傚父: ").append(e.getMessage()).append("; "); - } - - System.out.println("\n=== 娴嬭瘯BCS101 API鏈嶅姟锛堢畝鍖栫増鏈級 ==="); - try { - String simpleResponse = bcs101ApiService.getBCS101DataSimple(request); - System.out.println("BCS101 API Simple Response: " + simpleResponse); - responseResult.append("绠�鍖栫増鏈搷搴�: ").append(simpleResponse.length()).append("瀛楃; "); - } catch (Exception e) { - System.out.println("BCS101 API 绠�鍖栫増鏈皟鐢ㄥ紓甯�: " + e.getMessage()); - responseResult.append("绠�鍖栫増鏈紓甯�: ").append(e.getMessage()).append("; "); - } - - System.out.println("\n=== 娴嬭瘯BCS101 API鏈嶅姟锛圶5鍗忚鏍囧噯鐗堟湰锛� ==="); - try { - String x5StandardResponse = bcs101ApiService.getBCS101DataX5Standard(request); - System.out.println("BCS101 API X5Standard Response: " + x5StandardResponse); - responseResult.append("X5鏍囧噯鐗堟湰鍝嶅簲: ").append(x5StandardResponse.length()).append("瀛楃; "); - } catch (Exception e) { - System.out.println("BCS101 API X5鏍囧噯鐗堟湰璋冪敤寮傚父: " + e.getMessage()); - responseResult.append("X5鏍囧噯鐗堟湰寮傚父: ").append(e.getMessage()).append("; "); - } - - System.out.println("\n=== 娴嬭瘯BCS101 API鏈嶅姟锛圶5鍗忚鍙樹綋鐗堟湰锛� ==="); - try { - String x5VariantResponse = bcs101ApiService.getBCS101DataX5Variant(request); - System.out.println("BCS101 API X5Variant Response: " + x5VariantResponse); - responseResult.append("X5鍙樹綋鐗堟湰鍝嶅簲: ").append(x5VariantResponse.length()).append("瀛楃; "); - } catch (Exception e) { - System.out.println("BCS101 API X5鍙樹綋鐗堟湰璋冪敤寮傚父: " + e.getMessage()); - responseResult.append("X5鍙樹綋鐗堟湰寮傚父: ").append(e.getMessage()).append("; "); - } - - // 杩斿洖姹囨�讳俊鎭� - String summary = String.format("璇锋眰鍙傛暟[渚涘簲鍟咺D: %s, 鍗曟嵁鍙�: %s, 绛惧悕: %s, 鏃堕棿鎴�: %d] | 鍝嶅簲姹囨�籟%s]", - request.getSupplierId(), request.getDocNo(), signature, timestamp, responseResult.toString()); - System.out.println("\n=== 娴嬭瘯姹囨�� ==="); - System.out.println(summary); } } -- Gitblit v1.9.3