package com.ruoyi.system.service; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.security.cert.X509Certificate; import java.util.HashMap; import java.util.Map; /** * 旧系统HTTPS接口测试 * 测试admin_save_19.gds接口调用 * * @author ruoyi * @date 2025-11-09 */ public class LegacySystemHttpsTest { private static final Logger log = LoggerFactory.getLogger(LegacySystemHttpsTest.class); /** * 测试调用admin_save_19.gds接口(创建服务单) */ @Test public void testCreateServiceOrder() { try { String url = "https://sys.966120.com.cn/admin_save_19.gds"; // 构建请求参数 Map params = buildTestParams(); // 发送请求 String response = sendHttpsPost(url, params); // 输出响应 log.info("接口响应:{}", response); System.out.println("接口响应:" + response); // 解析响应 if (response != null && response.startsWith("OK:")) { String serviceOrdId = response.substring(3).trim(); log.info("服务单创建成功,ServiceOrdID: {}", serviceOrdId); System.out.println("✅ 服务单创建成功,ServiceOrdID: " + serviceOrdId); } else { log.error("服务单创建失败,响应: {}", response); System.out.println("❌ 服务单创建失败,响应: " + response); } } catch (Exception e) { log.error("测试异常", e); e.printStackTrace(); } } /** * 构建测试参数 */ private Map buildTestParams() { Map params = new HashMap<>(); // 基础信息 params.put("adminID", "1312"); params.put("ServiceOrdClass", "BF"); params.put("ServiceOrdAreaType", "1"); params.put("ServiceOrdType", "20"); params.put("ServiceOrdState", "2"); params.put("ServiceOrdStartDate", "2025-11-09"); // 预约时间 params.put("ServiceOrdApptDate", "2025-11-09 16:56:31"); // 联系人信息 params.put("ServiceOrdCoName", "李测试11"); params.put("ServiceOrdCoPhone", "13602220102"); params.put("ServiceOrdCoTies", ""); // 患者信息 params.put("ServiceOrdPtName", "李测试21"); params.put("ServiceOrdPtAge", ""); params.put("ServiceOrdPtKG", ""); params.put("ServiceOrdPtSex", ""); params.put("ServiceOrdPtNat", ""); params.put("ServiceOrdPtIDCard", ""); // 医院信息 params.put("ServiceOrdPtOutHosp", "广东省第二人民医院天河医院(广东燕岭医院)"); params.put("ServiceOrdPtOutHospID", "310"); params.put("ServiceOrdPtInHosp", "家中"); params.put("ServiceOrdPtInHospID", "153"); // 科室信息 params.put("ServiceOrdPtServices", "其他"); params.put("ServiceOrdPtServicesID", "22"); params.put("ServiceOrdPtInServices", "其他"); params.put("ServiceOrdPtInServicesID", "0"); // 病情信息 params.put("ServiceOrdPtDiagnosis", ""); params.put("ServiceOrdPtCondition", ""); params.put("ServiceOrdTaskRemarks", ""); params.put("ServiceOrdPtDoctor", ""); params.put("ServiceOrdPtDoctorPhone", ""); // 地址信息 params.put("province", ""); params.put("city", ""); params.put("ServiceOrdTraStreet", "广东省广州市天河区棠安路533号"); params.put("ServiceOrdTraStreetCoo", ""); params.put("ServiceOrdTraEnd", "天河区广州市-天河区-柏德路101号"); params.put("ServiceOrdTraEndCoo", ""); params.put("ServiceOrdTraVia", ""); // 距离和价格信息 params.put("ServiceOrdViaDistance", "0"); params.put("ServiceOrdTraDistance", "10.70"); params.put("ServiceOrdTraDuration", ""); params.put("ServiceOrdTraUnitPrice", "0"); params.put("ServiceOrdTraOfferPrice", "154.00"); params.put("ServiceOrdTraTxnPrice", "154.00"); params.put("ServiceOrdTraPrePayment", "0"); params.put("SettlementPrice", "0"); params.put("ServiceOrdTraPriceReason", ""); // 其他信息 params.put("Phone", "13602220102"); params.put("TEL_Time", "2025-11-09 16:58:21"); params.put("TEL_Remarks", "新系统同步"); params.put("TransferModeID", ""); params.put("ServiceOrdVIP", "0"); params.put("ServiceOrd_CC_ID", ""); params.put("ServiceOrd_Sale_ID", ""); params.put("ServiceOrdIntroducer", ""); params.put("ServiceOrd_work_ID", ""); params.put("ServiceOrd_work_IDs", ""); params.put("ServiceOrd_work_is", "0"); params.put("CommissionScenarioID", "0"); params.put("ServiceOrdOperationRemarks", "新系统同步创建"); params.put("ServiceOrdEstimatedOrderDate", ""); params.put("ServiceOrdSource", "10"); params.put("OrderLevel", "0"); params.put("ServiceOrdDepartureType", "1"); params.put("ConditionLevel", "0"); params.put("DirectionType", "0"); params.put("ServiceOrd_m", "1"); params.put("FromHQ2_is", "0"); params.put("OrderPrice_Auto", "0"); return params; } /** * 发送HTTPS POST请求(忽略SSL证书验证) */ private String sendHttpsPost(String urlString, Map params) throws Exception { URL url = new URL(urlString); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 如果是HTTPS请求,配置SSL信任所有证书 if (conn instanceof HttpsURLConnection) { HttpsURLConnection httpsConn = (HttpsURLConnection) conn; httpsConn.setSSLSocketFactory(createTrustAllSSLContext().getSocketFactory()); httpsConn.setHostnameVerifier((hostname, session) -> true); log.info("配置HTTPS连接,信任所有SSL证书"); } try { // 设置连接属性 conn.setRequestMethod("POST"); conn.setConnectTimeout(30000); conn.setReadTimeout(60000); conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=GBK"); conn.setRequestProperty("Accept-Charset", "GBK"); conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"); // 构建POST数据 StringBuilder postData = new StringBuilder(); for (Map.Entry entry : params.entrySet()) { if (postData.length() > 0) { postData.append("&"); } postData.append(URLEncoder.encode(entry.getKey(), "GBK")); postData.append("="); postData.append(URLEncoder.encode(entry.getValue(), "GBK")); } log.info("请求URL: {}", urlString); log.info("请求参数长度: {}", postData.length()); // 发送POST数据 try (OutputStream os = conn.getOutputStream()) { os.write(postData.toString().getBytes("GBK")); os.flush(); } // 读取响应 int responseCode = conn.getResponseCode(); log.info("响应码: {}", responseCode); if (responseCode == HttpURLConnection.HTTP_OK) { try (BufferedReader reader = new BufferedReader( new InputStreamReader(conn.getInputStream(), "GBK"))) { StringBuilder response = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response.append(line); } return response.toString().trim(); } } else { log.error("请求失败,响应码: {}", responseCode); throw new Exception("HTTPS请求失败,响应码: " + responseCode); } } finally { conn.disconnect(); } } /** * 创建信任所有SSL证书的SSLContext */ private SSLContext createTrustAllSSLContext() throws Exception { TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { @Override public X509Certificate[] getAcceptedIssuers() { return null; } @Override public void checkClientTrusted(X509Certificate[] certs, String authType) { // 信任所有客户端证书 } @Override public void checkServerTrusted(X509Certificate[] certs, String authType) { // 信任所有服务器证书 } } }; SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); return sslContext; } }