From f5933260b2c77de8f32e36c42e92039b96ae2003 Mon Sep 17 00:00:00 2001 From: zoujiangtao Date: Wed, 18 Dec 2024 10:51:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=86=85=E5=AE=B9=EF=BC=9A?= =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=20=E5=A4=87=E6=B3=A8?= =?UTF-8?q?=EF=BC=9A=E5=AE=9A=E6=97=B6=E6=8E=A8=E9=80=81=E5=8D=95=E6=8D=AE?= =?UTF-8?q?=E8=87=B3BIP=20=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A=E9=82=B9?= =?UTF-8?q?=E6=B1=9F=E6=B6=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shkd/sys/sys/mservice/ApiService.java | 176 ++++++++---------- .../sys/plugin/form/ApiTestBillPlugin.java | 2 - .../sys/sys/plugin/task/PushTaskPlugin.java | 9 +- 3 files changed, 79 insertions(+), 108 deletions(-) diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java index 3bc1c76..a9816c8 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java @@ -10,16 +10,12 @@ import kd.bos.logging.LogFactory; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; -import kd.bos.servicehelper.operation.SaveServiceHelper; import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import javax.net.ssl.*; import java.io.BufferedReader; -import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.math.BigDecimal; @@ -30,7 +26,6 @@ import java.nio.charset.StandardCharsets; import java.security.cert.X509Certificate; import java.text.SimpleDateFormat; import java.util.*; -import java.util.logging.Level; /** * @Description @@ -47,97 +42,61 @@ public class ApiService { public static String getBIPToken(String domainName) { String token = null; try { - // 自定义 TrustManager - TrustManager[] trustAllCerts = new TrustManager[]{ - new X509TrustManager() { - public X509Certificate[] getAcceptedIssuers() { - return null; - } - - public void checkClientTrusted(X509Certificate[] certs, String authType) { - } - - public void checkServerTrusted(X509Certificate[] certs, String authType) { - } - } - }; - - // 安装所有信任的管理器 - SSLContext sc = SSLContext.getInstance("SSL"); - sc.init(null, trustAllCerts, new java.security.SecureRandom()); - HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); - - // 自定义 HostnameVerifier - HostnameVerifier hostnameVerifier = new HostnameVerifier() { - @Override - public boolean verify(String hostname, SSLSession session) { - logger.info("Verifying hostname: " + hostname); - return true; // 始终返回 true,绕过验证 - } - }; - - // 设置自定义 HostnameVerifier - HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier); - - long currentTimeMillis = System.currentTimeMillis(); - String signature = generateSignature("appKey" + APP_KEY + "timestamp" + currentTimeMillis); + String timestamp = Long.toString(System.currentTimeMillis()); + String signature = generateSignature("appKey" + APP_KEY + "timestamp" + timestamp); logger.info("getBIPToken → 签名: {}", signature); + // URL with parameters + String urlString = String.format( + domainName + API_ENDPOINT + "?appKey=%s×tamp=%s&signature=%s", + APP_KEY, timestamp, signature + ); + URL url = new URL(urlString); + HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); // 禁用 SSL 证书验证 - disableSSLCertificateChecking(); - // 构建URL - String urlString = domainName + API_ENDPOINT + - "?appKey=" + APP_KEY + - "×tamp=" + currentTimeMillis + - "&signature=" + signature; + disableSSLCertificateValidation(); + + // 禁用 SSL 证书验证 +// disableSSLCertificateChecking(); + // return urlString; - logger.info("getBIPToken → 构建URL: {}", urlString); - try { - // 发送请求 - Request request = buildRequest(urlString); - Response response = client.newCall(request).execute(); - logger.info("getBIPToken → 获取返回数据:{}", response); - token = handleResponse(response); - } catch (Exception e) { - logger.error("getBIPToken → 请求失败: ", e); - token = null; + // 设置自定义主机名 + connection.setHostnameVerifier((hostname, session) -> { + logger.info("获取验证主机名: " + hostname); + return true; // Always return true to bypass verification + }); + + // 设置请求方法 + connection.setRequestMethod("GET"); + + // 发送请求并获取响应 + int responseCode = connection.getResponseCode(); + logger.info("响应code: " + responseCode); + + BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8)); + String inputLine; + StringBuilder response = new StringBuilder(); + + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); } - // 处理响应 - logger.info("getBIPToken method completed successfully"); + in.close(); + + logger.info("响应结果: " + response); } catch (Exception e) { - logger.info("Error in getBIPToken", e); + logger.info("getBIPToken错误: " + e); } return token; } - private static Request buildRequest(String urlString) { - return new Request.Builder() - .url(urlString) - .get() - .build(); - } - - private static String handleResponse(Response response) throws IOException { - if (response.isSuccessful()) { - String responseBody = response.body().string(); - logger.info("handleResponse → 响应内容: {}", responseBody); - JSONObject jsonObject = JSONObject.parseObject(responseBody); - JSONObject data = jsonObject.getJSONObject("data"); - return data.getString("access_token"); - } else { - logger.error("handleResponse → 请求失败,响应码: {}", response.code()); - return null; - } - } - - public static SSLContext createInsecureSSLContext() throws Exception { - // 创建一个信任所有证书的 TrustManager + private static void disableSSLCertificateValidation() throws Exception { + // Create a trust manager that does not validate certificate chains TrustManager[] trustAllCerts = new TrustManager[]{ new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { - return new X509Certificate[0]; + return null; } public void checkClientTrusted(X509Certificate[] certs, String authType) { @@ -148,28 +107,19 @@ public class ApiService { } }; - // 安装信任所有证书的 TrustManager - SSLContext sslContext = SSLContext.getInstance("TLS"); - sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); - return sslContext; - } + // Install the all-trusting trust manager + SSLContext sc = SSLContext.getInstance("SSL"); + sc.init(null, trustAllCerts, new java.security.SecureRandom()); + HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); - public static void disableSSLCertificateChecking() { - try { - // 创建一个信任所有证书的 SSLContext - SSLContext sslContext = createInsecureSSLContext(); + // Create all-trusting host name verifier + HostnameVerifier allHostsValid = (hostname, session) -> { + logger.info("HostnameVerifier called for: " + hostname); + return true; + }; - // 设置 HttpsURLConnection 使用这个 SSLContext - HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory()); - - // 创建一个 HostnameVerifier,信任所有主机名 - HostnameVerifier allHostsValid = (hostname, session) -> true; - - // 安装这个 HostnameVerifier - HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); - } catch (Exception e) { - e.printStackTrace(); - } + // Install the all-trusting host verifier + HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); } private static String generateSignature(String toSign) { @@ -261,6 +211,30 @@ public class ApiService { break; // 收款处理 case "https://biptestctny.invest.com.cn:8002/iuap-api-auth/yonbip/fi/fundcollection/save": + saveResponseBody = pushBill(objects[0], saveUrl, saveRequestBody); + logger.info("收款处理 → BIP保存接口 → 返回结果:{}", saveResponseBody); + jsonObject = JSON.parseObject(saveResponseBody); + code = jsonObject.getString("code"); + if ("200".equals(code)) { + logger.info("收款处理 → BIP保存接口 → 成功\n失败单据编号:{}\n推送失败接口返回数据:{}", dynamic.getString("billno"), saveResponseBody); + data = jsonObject.getJSONObject("data"); + dynamic.set("shkd_businessnumber", data.getString("code")); + dynamic.set("shkd_businessid", data.getString("id")); + dynamic.set("shkd_businessname", "BIP"); + dynamic.set("shkd_pushstatus", "已结算"); + dynamicObjects.add(dynamic); + + submitUrl = objects[0].getString("shkd_submiturl"); + submitRequestBody = getSubmitRequestBody("cmp.fundcollection.FundCollection", "cmp_fundcollection", data.getString("id")); + // 提交 + submitResponseBody = pushBill(objects[0], submitUrl, JSON.toJSONString(submitRequestBody)); + logger.info("收款处理 → BIP提交接口 → 返回结果:{}", submitResponseBody); + result = "推送 → 收款处理 → 成功"; + } else { + logger.info("收款处理 → BIP保存接口 → 成功\n失败单据编号:{}\n推送失败接口返回数据:{}", dynamic.getString("billno"), saveResponseBody); + result = "推送 → 收款处理 → 失败"; + } + break; // 银行收付处理 case "https://biptestctny.invest.com.cn:8002/iuap-api-auth/yonbip/ctm/cmp/bankReconciliationBatchSave": diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiTestBillPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiTestBillPlugin.java index 6795d49..0b8e7a9 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiTestBillPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiTestBillPlugin.java @@ -1,6 +1,5 @@ package shkd.sys.sys.plugin.form; -import com.alibaba.fastjson.JSONObject; import kd.bos.bill.AbstractBillPlugIn; import kd.bos.form.control.Toolbar; import kd.bos.form.control.events.ItemClickEvent; @@ -8,7 +7,6 @@ import kd.sdk.plugin.Plugin; import shkd.sys.sys.mservice.ApiService; import java.util.EventObject; -import java.util.Map; /** * 单据界面插件 diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java index fd4842f..f4a68f3 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java @@ -63,13 +63,10 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { "shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname,billstatus,bankpaystatus" , new QFilter("bizdate", QCP.large_equals, date) .and("shkd_pushstatus", QCP.not_equals, "已结算") - .and("shkd_pushstatus", QCP.not_equals, "未结算") .and("shkd_pushstatus", QCP.not_equals, "结算失败") .and("billstatus", QCP.equals, "D").toArray()); dynamicObjects = Arrays.asList(objects1); - dynamicObjects.forEach(dynamicObject -> { - ApiService.paymentSlipsJson(dynamicObject, "BIP", dynamicObjectList); - }); + dynamicObjects.forEach(dynamicObject -> ApiService.paymentSlipsJson(dynamicObject, "BIP", dynamicObjectList)); SaveServiceHelper.save(dynamicObjectList.toArray(new DynamicObject[0])); break; // 收款处理 @@ -79,8 +76,10 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { "payertype,org,bizdate,accountbank,payernumber,actrecamt,txt_description,shkd_pushstatus," + "shkd_businessnumber,shkd_businessid,shkd_businessname,billstatus" , new QFilter("bizdate", QCP.large_equals, date) - .and("shkd_pushstatus", QCP.not_equals, "已推送").toArray()); + .and("shkd_pushstatus", QCP.not_equals, "已结算") + .and("billstatus", QCP.equals, "D").toArray()); dynamicObjects = Arrays.asList(objects2); + dynamicObjects.forEach(dynamicObject -> ApiService.paymentSlipsJson(dynamicObject, "BIP", dynamicObjectList)); billName = "收款处理"; break; // 银行收付处理