From 0d2e9a763a3bdd561b9da53d3b600123c8b67467 Mon Sep 17 00:00:00 2001 From: Owen <595466820@qq.com> Date: Sat, 28 Dec 2024 21:28:35 +0800 Subject: [PATCH] =?UTF-8?q?Feat:=20=E6=B9=96=E5=8D=97ApiFix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/haoka/api/hunan/HunanDXApi.java | 42 ------- .../haoka/api/hunandianxin/HaiNanDxInfo.java | 50 ++++++++ .../haoka/api/hunandianxin/HuNanDXApi.java | 110 ++++++++++++++++++ .../api/{hunan => hunandianxin}/MD5Utils.java | 2 +- 4 files changed, 161 insertions(+), 43 deletions(-) delete mode 100644 yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/api/hunan/HunanDXApi.java create mode 100644 yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/api/hunandianxin/HaiNanDxInfo.java create mode 100644 yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/api/hunandianxin/HuNanDXApi.java rename yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/api/{hunan => hunandianxin}/MD5Utils.java (96%) diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/api/hunan/HunanDXApi.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/api/hunan/HunanDXApi.java deleted file mode 100644 index ca1bcd3a48..0000000000 --- a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/api/hunan/HunanDXApi.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.iocoder.yudao.module.haoka.api.hunan; - -import com.alibaba.fastjson.JSONObject; -import com.fasterxml.jackson.databind.ObjectMapper; - -import java.util.Map; -import java.util.TreeMap; - -public class HunanDXApi { - public static String genSignFromMap(JSONObject data, String seckey) throws Exception { - - ObjectMapper mapper = new ObjectMapper(); - Map mapBody = mapper.readValue(data.toString(), Map.class); - Map params = (Map) mapBody.get("data"); - - Map map = new TreeMap(); - for (Map.Entry entry : params.entrySet()) { - if(entry.getValue()==null||entry.getValue().equals("")){ - continue; - } - if (!entry.getKey().equals("sign")) { - map.put(entry.getKey(), entry.getValue()); - } - } - - StringBuffer sb = new StringBuffer(); - int index = 0; - for(String _key:map.keySet()){ - if(index!=0){ - sb.append("&"); - } - sb.append(_key); - sb.append("="); - sb.append(map.get(_key)); - index++; - } - - sb.append("&key=" + seckey); - String md5 = MD5Utils.md5Digest(sb.toString()).toLowerCase(); - return md5; - } -} diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/api/hunandianxin/HaiNanDxInfo.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/api/hunandianxin/HaiNanDxInfo.java new file mode 100644 index 0000000000..1cf58511be --- /dev/null +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/api/hunandianxin/HaiNanDxInfo.java @@ -0,0 +1,50 @@ +package cn.iocoder.yudao.module.haoka.api.hunandianxin; + +import com.alibaba.fastjson.JSONObject; +import lombok.Data; + +@Data +public class HaiNanDxInfo { + @Data + public static class ConfigInfo { + private String accessToken; // access_token + private String secret; // 密钥 + private String channel; // 渠道ID + private String baseUrl; + } + + @Data + public static class ResponseInfo { + private String res_code; + private String res_message; + private JSONObject result; + private T data; + } + + /** + * 接口1、校验互联网卡下单资格_新(BPS):chk.ordercheck.InternetCardQualifica + */ + @Data + public static class InternetCardQualificationParam { + private String cartNo; // 入网身份证 + private String serviceOrderSource; // 渠道ID + private String serviceOrderSalesNumber; // 产品ID + private String buyerName; // 入网姓名 + private String mobilePhone; // 联系电话 + private String receiverName; // 收货人姓名 + private String receiverProv; // 收货人所在省 + private String receiverCity; // 收货人所在市 + private String receiverDistrict; // 收货人所在区 + private String receiverAdress; // 收货人详细地址 Adress} + } + + /** + * 接口1、校验互联网卡下单资格_新(BPS):chk.ordercheck.InternetCardQualifica + * 响应类 + */ + @Data + public static class InternetCardQualificationResp { + private String code; + private String message; + } +} diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/api/hunandianxin/HuNanDXApi.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/api/hunandianxin/HuNanDXApi.java new file mode 100644 index 0000000000..3c247c5c38 --- /dev/null +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/api/hunandianxin/HuNanDXApi.java @@ -0,0 +1,110 @@ +package cn.iocoder.yudao.module.haoka.api.hunandianxin; + +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; + +import java.util.Map; +import java.util.TreeMap; + +public class HuNanDXApi { + + + // 校验互联网卡下单资格接口 + public HaiNanDxInfo.ResponseInfo + checkInternetCardQualification(HaiNanDxInfo.ConfigInfo config, + HaiNanDxInfo.InternetCardQualificationParam param) throws Exception { + String method = "chk.ordercheck.InternetCardQualifica"; + String apiName = null; + return HuNanDXApi.doExecute(config, + method, + apiName, + param, + HaiNanDxInfo.InternetCardQualificationResp.class); + } + + private static HaiNanDxInfo.ResponseInfo + doExecute(HaiNanDxInfo.ConfigInfo config, + String method, + String apiName, + T data, Class rClass) throws Exception { + JSONObject jsonObject = (JSONObject) JSON.toJSON(data); + String calledApi = callApi(config, method, apiName, jsonObject); + HaiNanDxInfo.ResponseInfo responseInfo = JSON.parseObject(calledApi, HaiNanDxInfo.ResponseInfo.class); + + JSONObject result = responseInfo.getResult(); + HaiNanDxInfo.ResponseInfo objectResponseInfo = new HaiNanDxInfo.ResponseInfo<>(); + + if (result != null) { + R dataInfo = result.toJavaObject(rClass); + objectResponseInfo.setData(dataInfo); + } + return objectResponseInfo; + } + + + // 通用 API 调用方法 + private static String callApi(HaiNanDxInfo.ConfigInfo config, String method, String apiName, JSONObject data) throws Exception { + // 生成签名 + String sign = genSignFromMap(data, config.getSecret()); + + // 构建请求体 + Map requestBody = new TreeMap<>(); + requestBody.put("access_token", config.getAccessToken()); + requestBody.put("method", method); + requestBody.put("version", "1.0"); + requestBody.put("content", data); + requestBody.put("sign", sign); + if (apiName != null) { + requestBody.put("apiName", apiName); + } + + // 发送 HTTP 请求 + try (CloseableHttpClient httpClient = HttpClients.createDefault()) { + HttpPost httpPost = new HttpPost(config.getBaseUrl()); + httpPost.setHeader("Content-Type", "application/json; charset=UTF-8"); + httpPost.setEntity(new StringEntity(new ObjectMapper().writeValueAsString(requestBody))); + return EntityUtils.toString(httpClient.execute(httpPost).getEntity()); + } + } + + + private static String genSignFromMap(JSONObject data, String seckey) throws Exception { + + ObjectMapper mapper = new ObjectMapper(); + Map mapBody = mapper.readValue(data.toString(), Map.class); + Map params = (Map) mapBody.get("data"); + + Map map = new TreeMap(); + for (Map.Entry entry : params.entrySet()) { + if (entry.getValue() == null || entry.getValue().equals("")) { + continue; + } + if (!entry.getKey().equals("sign")) { + map.put(entry.getKey(), entry.getValue()); + } + } + + StringBuffer sb = new StringBuffer(); + int index = 0; + for (String _key : map.keySet()) { + if (index != 0) { + sb.append("&"); + } + sb.append(_key); + sb.append("="); + sb.append(map.get(_key)); + index++; + } + + sb.append("&key=" + seckey); + String md5 = MD5Utils.md5Digest(sb.toString()).toLowerCase(); + return md5; + } +} diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/api/hunan/MD5Utils.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/api/hunandianxin/MD5Utils.java similarity index 96% rename from yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/api/hunan/MD5Utils.java rename to yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/api/hunandianxin/MD5Utils.java index 1d8d5dabba..8e6cfa3d64 100644 --- a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/api/hunan/MD5Utils.java +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/api/hunandianxin/MD5Utils.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.haoka.api.hunan; +package cn.iocoder.yudao.module.haoka.api.hunandianxin; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException;