diff --git a/cash-sdk/aggregation-pay/src/main/java/com/czg/EntryManager.java b/cash-sdk/aggregation-pay/src/main/java/com/czg/EntryManager.java new file mode 100644 index 000000000..d57762c28 --- /dev/null +++ b/cash-sdk/aggregation-pay/src/main/java/com/czg/EntryManager.java @@ -0,0 +1,31 @@ +package com.czg; + +import com.czg.dto.resp.BankBranchDto; +import com.czg.third.alipay.AlipayEntryManager; + +import java.util.List; + +/** + * 进件管理 + * + * @author yjjie + * @date 2026/1/6 13:56 + */ +public class EntryManager { + + /** + * 查询银行支行列表 + * + * @param province 省份 陕西省 + * @param city 城市 西安市 + * @param instId 顶级机构ID CMB + */ + public static List queryBankBranchList(String province, String city, String instId) { + return AlipayEntryManager.queryBankBranchList(instId, province, city); + } + + public static void main(String[] args) { + List dtoList = queryBankBranchList("陕西省", "西安市", "CMB"); + System.out.println(dtoList); + } +} diff --git a/cash-sdk/aggregation-pay/src/main/java/com/czg/dto/AggregateMerchantDto.java b/cash-sdk/aggregation-pay/src/main/java/com/czg/dto/req/AggregateMerchantDto.java similarity index 96% rename from cash-sdk/aggregation-pay/src/main/java/com/czg/dto/AggregateMerchantDto.java rename to cash-sdk/aggregation-pay/src/main/java/com/czg/dto/req/AggregateMerchantDto.java index 1131c3cd8..bdc521828 100644 --- a/cash-sdk/aggregation-pay/src/main/java/com/czg/dto/AggregateMerchantDto.java +++ b/cash-sdk/aggregation-pay/src/main/java/com/czg/dto/req/AggregateMerchantDto.java @@ -1,4 +1,4 @@ -package com.czg.dto; +package com.czg.dto.req; import lombok.Data; diff --git a/cash-sdk/aggregation-pay/src/main/java/com/czg/dto/BusinessLicenceInfoDto.java b/cash-sdk/aggregation-pay/src/main/java/com/czg/dto/req/BusinessLicenceInfoDto.java similarity index 96% rename from cash-sdk/aggregation-pay/src/main/java/com/czg/dto/BusinessLicenceInfoDto.java rename to cash-sdk/aggregation-pay/src/main/java/com/czg/dto/req/BusinessLicenceInfoDto.java index 860175856..a4ac1c96c 100644 --- a/cash-sdk/aggregation-pay/src/main/java/com/czg/dto/BusinessLicenceInfoDto.java +++ b/cash-sdk/aggregation-pay/src/main/java/com/czg/dto/req/BusinessLicenceInfoDto.java @@ -1,4 +1,4 @@ -package com.czg.dto; +package com.czg.dto.req; import lombok.Data; diff --git a/cash-sdk/aggregation-pay/src/main/java/com/czg/dto/LegalPersonInfoDto.java b/cash-sdk/aggregation-pay/src/main/java/com/czg/dto/req/LegalPersonInfoDto.java similarity index 97% rename from cash-sdk/aggregation-pay/src/main/java/com/czg/dto/LegalPersonInfoDto.java rename to cash-sdk/aggregation-pay/src/main/java/com/czg/dto/req/LegalPersonInfoDto.java index f6d2c101e..5f152b459 100644 --- a/cash-sdk/aggregation-pay/src/main/java/com/czg/dto/LegalPersonInfoDto.java +++ b/cash-sdk/aggregation-pay/src/main/java/com/czg/dto/req/LegalPersonInfoDto.java @@ -1,4 +1,4 @@ -package com.czg.dto; +package com.czg.dto.req; import lombok.Data; diff --git a/cash-sdk/aggregation-pay/src/main/java/com/czg/dto/MerchantBaseInfoDto.java b/cash-sdk/aggregation-pay/src/main/java/com/czg/dto/req/MerchantBaseInfoDto.java similarity index 97% rename from cash-sdk/aggregation-pay/src/main/java/com/czg/dto/MerchantBaseInfoDto.java rename to cash-sdk/aggregation-pay/src/main/java/com/czg/dto/req/MerchantBaseInfoDto.java index ca57d4e04..9de2b790f 100644 --- a/cash-sdk/aggregation-pay/src/main/java/com/czg/dto/MerchantBaseInfoDto.java +++ b/cash-sdk/aggregation-pay/src/main/java/com/czg/dto/req/MerchantBaseInfoDto.java @@ -1,4 +1,4 @@ -package com.czg.dto; +package com.czg.dto.req; import lombok.Data; diff --git a/cash-sdk/aggregation-pay/src/main/java/com/czg/dto/SettlementInfoDto.java b/cash-sdk/aggregation-pay/src/main/java/com/czg/dto/req/SettlementInfoDto.java similarity index 98% rename from cash-sdk/aggregation-pay/src/main/java/com/czg/dto/SettlementInfoDto.java rename to cash-sdk/aggregation-pay/src/main/java/com/czg/dto/req/SettlementInfoDto.java index 152492d9d..7df35f646 100644 --- a/cash-sdk/aggregation-pay/src/main/java/com/czg/dto/SettlementInfoDto.java +++ b/cash-sdk/aggregation-pay/src/main/java/com/czg/dto/req/SettlementInfoDto.java @@ -1,4 +1,4 @@ -package com.czg.dto; +package com.czg.dto.req; import lombok.Data; diff --git a/cash-sdk/aggregation-pay/src/main/java/com/czg/dto/StoreInfoDto.java b/cash-sdk/aggregation-pay/src/main/java/com/czg/dto/req/StoreInfoDto.java similarity index 97% rename from cash-sdk/aggregation-pay/src/main/java/com/czg/dto/StoreInfoDto.java rename to cash-sdk/aggregation-pay/src/main/java/com/czg/dto/req/StoreInfoDto.java index 8e5e765cb..4d6111873 100644 --- a/cash-sdk/aggregation-pay/src/main/java/com/czg/dto/StoreInfoDto.java +++ b/cash-sdk/aggregation-pay/src/main/java/com/czg/dto/req/StoreInfoDto.java @@ -1,4 +1,4 @@ -package com.czg.dto; +package com.czg.dto.req; import lombok.Data; diff --git a/cash-sdk/aggregation-pay/src/main/java/com/czg/dto/resp/BankBranchDto.java b/cash-sdk/aggregation-pay/src/main/java/com/czg/dto/resp/BankBranchDto.java new file mode 100644 index 000000000..f3c473090 --- /dev/null +++ b/cash-sdk/aggregation-pay/src/main/java/com/czg/dto/resp/BankBranchDto.java @@ -0,0 +1,58 @@ +package com.czg.dto.resp; + +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.Data; + +/** + * 银行支行信息 + * @author yjjie + * @date 2026/1/6 15:37 + */ +@Data +public class BankBranchDto { + /** + * 机构ID + */ + private String instId; + + /** + * 银行代码 + */ + private String bankCode; + + /** + * 城市 + */ + private String city; + + /** + * 银行简称 + */ + private String simpleName; + + /** + * 省份 + */ + @JSONField(name = "provice") + private String province; + + /** + * IBPS代码 + */ + private String ibpsCode; + + /** + * 承担机构 + */ + private String undertakeInst; + + /** + * 分支机构名称 + */ + private String branchName; + + /** + * 机构全称 + */ + private String instName; +} diff --git a/cash-sdk/aggregation-pay/src/main/java/com/czg/third/alipay/AlipayClient.java b/cash-sdk/aggregation-pay/src/main/java/com/czg/third/alipay/AlipayClient.java index a247b64e6..c8a71033c 100644 --- a/cash-sdk/aggregation-pay/src/main/java/com/czg/third/alipay/AlipayClient.java +++ b/cash-sdk/aggregation-pay/src/main/java/com/czg/third/alipay/AlipayClient.java @@ -1,8 +1,8 @@ package com.czg.third.alipay; -import com.alipay.v3.ApiClient; -import com.alipay.v3.Configuration; -import com.alipay.v3.util.model.AlipayConfig; +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayConfig; +import com.alipay.api.DefaultAlipayClient; import com.czg.third.alipay.dto.config.AlipayConfigDto; import lombok.extern.slf4j.Slf4j; @@ -13,19 +13,29 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public class AlipayClient { - public static void setupAlipayConfig(AlipayConfigDto configDto) { + public static DefaultAlipayClient getDefaultClient(AlipayConfigDto configDto) { try { - ApiClient defaultClient = Configuration.getDefaultApiClient(); - // 初始化alipay参数(全局设置一次) - AlipayConfig alipayConfig = new AlipayConfig(); - alipayConfig.setServerUrl(configDto.getDomain()); - alipayConfig.setAppId(configDto.getAppId()); - alipayConfig.setAlipayPublicKey(configDto.getAlipayPublicKey()); - alipayConfig.setPrivateKey(configDto.getPrivateKey()); - defaultClient.setAlipayConfig(alipayConfig); - } catch (Exception e) { - log.error("初始化alipay参数异常", e); + return new DefaultAlipayClient(getAlipayConfig(configDto)); + } catch (AlipayApiException e) { + log.error("创建支付宝客户端失败", e); + return null; + } + } + + public static AlipayConfig getAlipayConfig(AlipayConfigDto configDto) { + if (configDto == null) { + configDto = AlipayConfigDto.getDefaultConfig(); } + AlipayConfig alipayConfig = new AlipayConfig(); + alipayConfig.setServerUrl(configDto.getDomain()); + alipayConfig.setAppId(configDto.getAppId()); + alipayConfig.setPrivateKey(configDto.getPrivateKey()); + alipayConfig.setFormat("json"); + alipayConfig.setAlipayPublicKey(configDto.getAlipayPublicKey()); + alipayConfig.setCharset("UTF-8"); + alipayConfig.setSignType("RSA2"); + + return alipayConfig; } } diff --git a/cash-sdk/aggregation-pay/src/main/java/com/czg/third/alipay/AlipayEntryManager.java b/cash-sdk/aggregation-pay/src/main/java/com/czg/third/alipay/AlipayEntryManager.java index 551d01a2d..190f777e9 100644 --- a/cash-sdk/aggregation-pay/src/main/java/com/czg/third/alipay/AlipayEntryManager.java +++ b/cash-sdk/aggregation-pay/src/main/java/com/czg/third/alipay/AlipayEntryManager.java @@ -1,9 +1,14 @@ package com.czg.third.alipay; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; import com.alipay.api.AlipayApiException; import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.domain.AlipayFinancialnetAuthPbcnameQueryModel; import com.alipay.api.domain.AntMerchantExpandIndirectZftSimplecreateModel; +import com.alipay.api.request.AlipayFinancialnetAuthPbcnameQueryRequest; import com.alipay.api.request.AntMerchantExpandIndirectZftSimplecreateRequest; +import com.alipay.api.response.AlipayFinancialnetAuthPbcnameQueryResponse; import com.alipay.api.response.AntMerchantExpandIndirectZftSimplecreateResponse; import com.alipay.v3.ApiClient; import com.alipay.v3.ApiException; @@ -12,9 +17,14 @@ import com.alipay.v3.api.AlipayOpenAgentApi; import com.alipay.v3.api.AntMerchantExpandIndirectImageApi; import com.alipay.v3.model.*; import com.alipay.v3.util.model.AlipayConfig; +import com.czg.dto.resp.BankBranchDto; import com.czg.utils.CommonUtil; import com.czg.third.alipay.dto.config.AlipayConfigDto; + +import java.util.ArrayList; +import java.util.List; import java.util.regex.Pattern; + import lombok.extern.slf4j.Slf4j; import java.io.File; @@ -58,6 +68,34 @@ public class AlipayEntryManager { } } + /** + * 查询支行 + * + * @param instId 顶级机构ID CMB + * @param province 省份 陕西省 + * @param city 城市 西安市 + */ + public static List queryBankBranchList(String instId, String province, String city) { + try { + AlipayFinancialnetAuthPbcnameQueryRequest request = new AlipayFinancialnetAuthPbcnameQueryRequest(); + + AlipayFinancialnetAuthPbcnameQueryModel model = new AlipayFinancialnetAuthPbcnameQueryModel(); + model.setInstId(instId); + model.setProvice(province); + model.setCity(city); + + request.setBizModel(model); + DefaultAlipayClient defaultAlipayClient = AlipayClient.getDefaultClient(null); + AlipayFinancialnetAuthPbcnameQueryResponse response = defaultAlipayClient.execute(request); + + String data = response.getPbcQueryResult(); + return JSONArray.parseArray(data, BankBranchDto.class); + } catch (Exception e) { + log.error("支付宝查询支行报错,错误信息:{}", e.getMessage(), e); + return new ArrayList<>(); + } + } + /** * 使用正则表达式提取图片后缀 */ @@ -73,39 +111,10 @@ public class AlipayEntryManager { return "png"; } - public static void main(String[] args) throws AlipayApiException { - AlipayConfigDto configDto = new AlipayConfigDto() - .setDomain("https://openapi.alipay.com") - .setAppId("2021004174605036") - .setPrivateKey("MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQD48HaUoV7OH7os+9L01kHgxzwIhJick4OkFq4aHsntsXEJ J3gedhuEZtV8oHKZ30DPW12IJ4S8NXtpr8OWaqrAPFonf4wVaRY1d0yIAea57kfLEn9oOEEy4FzARgMNDkyxC+/3OUdGbLHpTjfVX3gusXsEhUDy1/WewihAkoNYF37+W3W/uVLzeWoPq0EcUbRv/G/t/p6gL69ltsMAiVFG4Q/Yk24YAN6lYgBPNLXUEwQ1Q+T+1omjfavHgvarKOp33z3JOUH+aGOmDsJ5Y9gyGtJzOCipAd8Zcv+T1ygsEzZYO1/gzcbPnfO1ShqStCHzssuw8FBVx2JdfQKXKMMNAgMBAAECggEAVTrO/pg5Q00titU1Jspsh67u6OOs9H605Ws2dI7yB8VmtAGlaJh7V1t14FN2qSP8poHbhhAxq9aLyGV7C3a9u09udnN+3J28EtYjh7VO732bavWMVXxdJjQWzWWrCb9JlpxFrlkYBA6W4w/6ob0sAqCVQ7jzwbEa0R4cde8ztOa5nysKSfr4YTSs0gqvoiC6fmg8eiRJraEQBoYz9VkKFtOhhh/4w5FhVcYQ2gQvZ3kK3QVuD1eJIQKlCtz8qaox9lXKDiZT4SCmnKshdUL0u5TYIcYeBjZmhJz0Q50KHcpZrCs5y7I0+vRBH3hU+TKSQt7ureymwhbwWMHScLV2gQKBgQD+58SHXhr5M8NGagAmTdsgmCnNv2kOYMd4STyPMY10SVwCv1Bk808ZuP+7e558J1b5/OuDLI5dLq6xrZ/1wLv1G++XqxI00hlFuWS5mUGJVcXotT1mw20rVeUILc7Qe3mLvbMGgfyKf4A7Qa5SSZ4bDeDTJYaFxyiQ281hMzDuPQKBgQD6AiL/Na2/uPH4CG6juwpjYvYVUcjK+7gbRwf3wWsWMpk90Z4ju2iUiP5c1J/oK9P+1T3PIr6M4Xjza8JJj+r9KC/PVB0gBv6vVM96cDpKUEy/UMpcn/T81vqj/Z+WEOODU8Ms6NiTTm+u9ldvpCjbu0u8M+9c0JeIyadJvSTFEQKBgQCsxmFyM3nq8YfpgU2qqNjfBeRH3faSVUy+nj1a/YZYjKS+A/i1BCnYUImeBVNN6chNV342ggvY4xxruDiU9Vcw8wd58O09Oi8BEIFSP6upL6cebUI6Fjo3xlegLJRiwV6INkNTJOYM5hD/mSxUACwXQFfkJipBINXBIgraWD1RLQKBgQCj49axWq0F6+WjZVOyPaD3uh37p9trRUxRhWTxw3fB23WdktaKMgbCqHOmwzP4bRLSEVQtf2dOz1gMqu14b8HqJvgAf/F/11YJ9hz09LEhmjZVjE68HZfqT7uK2W5OX8/lfXmK7TFcj6SjG5YB96lZMhTZ0WnufEd6QkdKDZYXIQKBgQD9GDTcIMbFwbEaKHnfZaTD3f876EGRgsgrCxwdEk7LBCRPwWo7yI929M4psIlpNwNeiyjBkBunWIVkpznp6qPtJqagIPUYesU4f5v6/okq5wcpaNKSkWbIvWVLaLGOiA1aeGJtbpMpyClbSr52puHpRRdvAiIEQ74yYh0JX8q96g==") - .setAlipayPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiQkrz+emAuS1mB3KKDOMmAZRd/BlPbh7fAIHAqAj1+QCZNcV3o2BTLIIqnuKpSlFXDG3uDzp2VsBxcizXuBbFyPGylnD9CgCj5abyh3+FIHPAZ2IM3TtpqImZ0TSPGXrMli4Nir7MvZktgccCqQKCC4o6iaDGz+UwWwJUIPna8fm2tiTZ+KH150CZbKVj4ZGNpBh5XSV/1dRgyQIV9D/EwSbkZ0n6VgKQLJBi0C2UE3QB17aL1Ir6+gDXIDbknN8O7GUD3aMGdThYdSRUb5wp9CZ5qfV7vCS/CgaRo38nhH3NOzkTL+7v0m1ZDHPmqEkn9VzZN6sCQdL7PoAOjHOCwIDAQAB"); - AlipayClient.setupAlipayConfig(configDto); + public static void main(String[] args) { -// AlipayOpenAgentCreateModel data = new AlipayOpenAgentCreateModel(); -// -// AlipayOpenAgentFacetofaceApi api = new AlipayOpenAgentFacetofaceApi(); + queryBankBranchList("CMB", "西安市", "陕西省"); -// String imageId = uploadImage("https://czg-qr-order.oss-cn-beijing.aliyuncs.com/indexs/shuangbackground.png"); -// System.out.println("支付宝图片 ID = " + imageId); - - AntMerchantExpandIndirectZftSimplecreateRequest request = new AntMerchantExpandIndirectZftSimplecreateRequest(); - AntMerchantExpandIndirectZftSimplecreateModel model = new AntMerchantExpandIndirectZftSimplecreateModel(); - - // 设置商户编号 - model.setExternalId("105290059990194"); - - request.setBizModel(model); - - com.alipay.api.AlipayConfig alipayConfig = new com.alipay.api.AlipayConfig(); - alipayConfig.setServerUrl(configDto.getDomain()); - alipayConfig.setAppId(configDto.getAppId()); - alipayConfig.setAlipayPublicKey(configDto.getAlipayPublicKey()); - alipayConfig.setPrivateKey(configDto.getPrivateKey()); - // 初始化SDK - DefaultAlipayClient defaultAlipayClient = new DefaultAlipayClient(alipayConfig); -// AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig); - AntMerchantExpandIndirectZftSimplecreateResponse response = defaultAlipayClient.execute(request); - System.out.println(response.getBody()); } // https://opendocs.alipay.com/solution/0dec7x?pathHash=caec4753 直付通 diff --git a/cash-sdk/aggregation-pay/src/main/java/com/czg/third/alipay/AlipayReqUtils.java b/cash-sdk/aggregation-pay/src/main/java/com/czg/third/alipay/AlipayReqUtils.java index 733c48c49..0ab504b1e 100644 --- a/cash-sdk/aggregation-pay/src/main/java/com/czg/third/alipay/AlipayReqUtils.java +++ b/cash-sdk/aggregation-pay/src/main/java/com/czg/third/alipay/AlipayReqUtils.java @@ -7,6 +7,7 @@ import com.alipay.api.DefaultAlipayClient; import com.alipay.api.domain.*; import com.alipay.api.request.AntMerchantExpandIndirectZftSimplecreateRequest; import com.alipay.api.response.AntMerchantExpandIndirectZftSimplecreateResponse; + import java.util.ArrayList; import java.util.List; @@ -16,9 +17,7 @@ import java.util.List; */ public class AlipayReqUtils { public static void main(String[] args) throws AlipayApiException { - DefaultAlipayClient defaultAlipayClient = new DefaultAlipayClient(getAlipayConfig()); - // 初始化SDK -// AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig()); + DefaultAlipayClient defaultAlipayClient = AlipayClient.getDefaultClient(null); // 构造请求参数以调用接口 AntMerchantExpandIndirectZftSimplecreateRequest request = new AntMerchantExpandIndirectZftSimplecreateRequest(); @@ -206,18 +205,4 @@ public class AlipayReqUtils { } } - private static AlipayConfig getAlipayConfig() { - String privateKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQD48HaUoV7OH7os+9L01kHgxzwIhJick4OkFq4aHsntsXEJ J3gedhuEZtV8oHKZ30DPW12IJ4S8NXtpr8OWaqrAPFonf4wVaRY1d0yIAea57kfLEn9oOEEy4FzARgMNDkyxC+/3OUdGbLHpTjfVX3gusXsEhUDy1/WewihAkoNYF37+W3W/uVLzeWoPq0EcUbRv/G/t/p6gL69ltsMAiVFG4Q/Yk24YAN6lYgBPNLXUEwQ1Q+T+1omjfavHgvarKOp33z3JOUH+aGOmDsJ5Y9gyGtJzOCipAd8Zcv+T1ygsEzZYO1/gzcbPnfO1ShqStCHzssuw8FBVx2JdfQKXKMMNAgMBAAECggEAVTrO/pg5Q00titU1Jspsh67u6OOs9H605Ws2dI7yB8VmtAGlaJh7V1t14FN2qSP8poHbhhAxq9aLyGV7C3a9u09udnN+3J28EtYjh7VO732bavWMVXxdJjQWzWWrCb9JlpxFrlkYBA6W4w/6ob0sAqCVQ7jzwbEa0R4cde8ztOa5nysKSfr4YTSs0gqvoiC6fmg8eiRJraEQBoYz9VkKFtOhhh/4w5FhVcYQ2gQvZ3kK3QVuD1eJIQKlCtz8qaox9lXKDiZT4SCmnKshdUL0u5TYIcYeBjZmhJz0Q50KHcpZrCs5y7I0+vRBH3hU+TKSQt7ureymwhbwWMHScLV2gQKBgQD+58SHXhr5M8NGagAmTdsgmCnNv2kOYMd4STyPMY10SVwCv1Bk808ZuP+7e558J1b5/OuDLI5dLq6xrZ/1wLv1G++XqxI00hlFuWS5mUGJVcXotT1mw20rVeUILc7Qe3mLvbMGgfyKf4A7Qa5SSZ4bDeDTJYaFxyiQ281hMzDuPQKBgQD6AiL/Na2/uPH4CG6juwpjYvYVUcjK+7gbRwf3wWsWMpk90Z4ju2iUiP5c1J/oK9P+1T3PIr6M4Xjza8JJj+r9KC/PVB0gBv6vVM96cDpKUEy/UMpcn/T81vqj/Z+WEOODU8Ms6NiTTm+u9ldvpCjbu0u8M+9c0JeIyadJvSTFEQKBgQCsxmFyM3nq8YfpgU2qqNjfBeRH3faSVUy+nj1a/YZYjKS+A/i1BCnYUImeBVNN6chNV342ggvY4xxruDiU9Vcw8wd58O09Oi8BEIFSP6upL6cebUI6Fjo3xlegLJRiwV6INkNTJOYM5hD/mSxUACwXQFfkJipBINXBIgraWD1RLQKBgQCj49axWq0F6+WjZVOyPaD3uh37p9trRUxRhWTxw3fB23WdktaKMgbCqHOmwzP4bRLSEVQtf2dOz1gMqu14b8HqJvgAf/F/11YJ9hz09LEhmjZVjE68HZfqT7uK2W5OX8/lfXmK7TFcj6SjG5YB96lZMhTZ0WnufEd6QkdKDZYXIQKBgQD9GDTcIMbFwbEaKHnfZaTD3f876EGRgsgrCxwdEk7LBCRPwWo7yI929M4psIlpNwNeiyjBkBunWIVkpznp6qPtJqagIPUYesU4f5v6/okq5wcpaNKSkWbIvWVLaLGOiA1aeGJtbpMpyClbSr52puHpRRdvAiIEQ74yYh0JX8q96g=="; - String alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiQkrz+emAuS1mB3KKDOMmAZRd/BlPbh7fAIHAqAj1+QCZNcV3o2BTLIIqnuKpSlFXDG3uDzp2VsBxcizXuBbFyPGylnD9CgCj5abyh3+FIHPAZ2IM3TtpqImZ0TSPGXrMli4Nir7MvZktgccCqQKCC4o6iaDGz+UwWwJUIPna8fm2tiTZ+KH150CZbKVj4ZGNpBh5XSV/1dRgyQIV9D/EwSbkZ0n6VgKQLJBi0C2UE3QB17aL1Ir6+gDXIDbknN8O7GUD3aMGdThYdSRUb5wp9CZ5qfV7vCS/CgaRo38nhH3NOzkTL+7v0m1ZDHPmqEkn9VzZN6sCQdL7PoAOjHOCwIDAQAB"; - AlipayConfig alipayConfig = new AlipayConfig(); - alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do"); - alipayConfig.setAppId("2021004174605036"); - alipayConfig.setPrivateKey(privateKey); - alipayConfig.setFormat("json"); - alipayConfig.setAlipayPublicKey(alipayPublicKey); - alipayConfig.setCharset("UTF-8"); - alipayConfig.setSignType("RSA2"); - return alipayConfig; - } - } diff --git a/cash-sdk/aggregation-pay/src/main/java/com/czg/third/alipay/dto/config/AlipayConfigDto.java b/cash-sdk/aggregation-pay/src/main/java/com/czg/third/alipay/dto/config/AlipayConfigDto.java index b23fa57e1..f2838086f 100644 --- a/cash-sdk/aggregation-pay/src/main/java/com/czg/third/alipay/dto/config/AlipayConfigDto.java +++ b/cash-sdk/aggregation-pay/src/main/java/com/czg/third/alipay/dto/config/AlipayConfigDto.java @@ -28,7 +28,15 @@ public class AlipayConfigDto { /** * 支付宝支付域名 - * + * */ private String domain; + + public static AlipayConfigDto getDefaultConfig() { + return new AlipayConfigDto() + .setAppId("2021004174605036") + .setPrivateKey("MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQD48HaUoV7OH7os+9L01kHgxzwIhJick4OkFq4aHsntsXEJ J3gedhuEZtV8oHKZ30DPW12IJ4S8NXtpr8OWaqrAPFonf4wVaRY1d0yIAea57kfLEn9oOEEy4FzARgMNDkyxC+/3OUdGbLHpTjfVX3gusXsEhUDy1/WewihAkoNYF37+W3W/uVLzeWoPq0EcUbRv/G/t/p6gL69ltsMAiVFG4Q/Yk24YAN6lYgBPNLXUEwQ1Q+T+1omjfavHgvarKOp33z3JOUH+aGOmDsJ5Y9gyGtJzOCipAd8Zcv+T1ygsEzZYO1/gzcbPnfO1ShqStCHzssuw8FBVx2JdfQKXKMMNAgMBAAECggEAVTrO/pg5Q00titU1Jspsh67u6OOs9H605Ws2dI7yB8VmtAGlaJh7V1t14FN2qSP8poHbhhAxq9aLyGV7C3a9u09udnN+3J28EtYjh7VO732bavWMVXxdJjQWzWWrCb9JlpxFrlkYBA6W4w/6ob0sAqCVQ7jzwbEa0R4cde8ztOa5nysKSfr4YTSs0gqvoiC6fmg8eiRJraEQBoYz9VkKFtOhhh/4w5FhVcYQ2gQvZ3kK3QVuD1eJIQKlCtz8qaox9lXKDiZT4SCmnKshdUL0u5TYIcYeBjZmhJz0Q50KHcpZrCs5y7I0+vRBH3hU+TKSQt7ureymwhbwWMHScLV2gQKBgQD+58SHXhr5M8NGagAmTdsgmCnNv2kOYMd4STyPMY10SVwCv1Bk808ZuP+7e558J1b5/OuDLI5dLq6xrZ/1wLv1G++XqxI00hlFuWS5mUGJVcXotT1mw20rVeUILc7Qe3mLvbMGgfyKf4A7Qa5SSZ4bDeDTJYaFxyiQ281hMzDuPQKBgQD6AiL/Na2/uPH4CG6juwpjYvYVUcjK+7gbRwf3wWsWMpk90Z4ju2iUiP5c1J/oK9P+1T3PIr6M4Xjza8JJj+r9KC/PVB0gBv6vVM96cDpKUEy/UMpcn/T81vqj/Z+WEOODU8Ms6NiTTm+u9ldvpCjbu0u8M+9c0JeIyadJvSTFEQKBgQCsxmFyM3nq8YfpgU2qqNjfBeRH3faSVUy+nj1a/YZYjKS+A/i1BCnYUImeBVNN6chNV342ggvY4xxruDiU9Vcw8wd58O09Oi8BEIFSP6upL6cebUI6Fjo3xlegLJRiwV6INkNTJOYM5hD/mSxUACwXQFfkJipBINXBIgraWD1RLQKBgQCj49axWq0F6+WjZVOyPaD3uh37p9trRUxRhWTxw3fB23WdktaKMgbCqHOmwzP4bRLSEVQtf2dOz1gMqu14b8HqJvgAf/F/11YJ9hz09LEhmjZVjE68HZfqT7uK2W5OX8/lfXmK7TFcj6SjG5YB96lZMhTZ0WnufEd6QkdKDZYXIQKBgQD9GDTcIMbFwbEaKHnfZaTD3f876EGRgsgrCxwdEk7LBCRPwWo7yI929M4psIlpNwNeiyjBkBunWIVkpznp6qPtJqagIPUYesU4f5v6/okq5wcpaNKSkWbIvWVLaLGOiA1aeGJtbpMpyClbSr52puHpRRdvAiIEQ74yYh0JX8q96g==") + .setAlipayPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiQkrz+emAuS1mB3KKDOMmAZRd/BlPbh7fAIHAqAj1+QCZNcV3o2BTLIIqnuKpSlFXDG3uDzp2VsBxcizXuBbFyPGylnD9CgCj5abyh3+FIHPAZ2IM3TtpqImZ0TSPGXrMli4Nir7MvZktgccCqQKCC4o6iaDGz+UwWwJUIPna8fm2tiTZ+KH150CZbKVj4ZGNpBh5XSV/1dRgyQIV9D/EwSbkZ0n6VgKQLJBi0C2UE3QB17aL1Ir6+gDXIDbknN8O7GUD3aMGdThYdSRUb5wp9CZ5qfV7vCS/CgaRo38nhH3NOzkTL+7v0m1ZDHPmqEkn9VzZN6sCQdL7PoAOjHOCwIDAQAB") + .setDomain("https://openapi.alipay.com/gateway.do"); + } } diff --git a/cash-sdk/aggregation-pay/src/main/java/com/czg/third/wechat/WechatEntryManager.java b/cash-sdk/aggregation-pay/src/main/java/com/czg/third/wechat/WechatEntryManager.java index 625d2bbe3..a2ce8a410 100644 --- a/cash-sdk/aggregation-pay/src/main/java/com/czg/third/wechat/WechatEntryManager.java +++ b/cash-sdk/aggregation-pay/src/main/java/com/czg/third/wechat/WechatEntryManager.java @@ -1,5 +1,6 @@ package com.czg.third.wechat; +import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONWriter; import com.czg.third.wechat.dto.req.entry.WechatEntryReqDto; @@ -9,6 +10,11 @@ import com.wechat.pay.java.service.file.FileUploadService; import com.wechat.pay.java.service.file.model.FileUploadResponse; import lombok.extern.slf4j.Slf4j; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; import java.util.Map; /** @@ -20,8 +26,25 @@ import java.util.Map; @Slf4j public class WechatEntryManager { - public static void queryBankList(WechatPayConfigDto configDto, Integer offset, Integer limit) { - WechatReqUtils.getReq(configDto, "/v3/capital/capitallhh/banks/personal-banking", Map.of("offset", offset, "limit", limit)); + public static JSONObject queryBankList(WechatPayConfigDto configDto, Integer offset, Integer limit) { + String resp = WechatReqUtils.getReq(configDto, "/v3/capital/capitallhh/banks/corporate-banking", Map.of("offset", offset, "limit", limit)); + log.info("查询银行列表:{}", resp); + return JSONObject.parseObject(resp); + } + + public static JSONObject queryBankBranchList(WechatPayConfigDto configDto, String bankAliceCode, String cityCode, Integer offset, Integer limit) { + String resp = WechatReqUtils.getReq(configDto, "/v3/capital/capitallhh/banks/" + bankAliceCode + "/branches", Map.of("city_code", cityCode, "offset", offset, "limit", limit)); + return JSONObject.parseObject(resp); + } + + public static JSONObject queryProvinceList(WechatPayConfigDto configDto) { + String resp = WechatReqUtils.getReq(configDto, "/v3/capital/capitallhh/areas/provinces", Map.of()); + return JSONObject.parseObject(resp); + } + + public static JSONObject queryCityList(WechatPayConfigDto configDto, String provinceCode) { + String resp = WechatReqUtils.getReq(configDto, "/v3/capital/capitallhh/areas/provinces/" + provinceCode + "/cities", Map.of()); + return JSONObject.parseObject(resp); } /** @@ -113,7 +136,7 @@ public class WechatEntryManager { return "upload_" + System.currentTimeMillis() + ".png"; } - public static void main(String[] args) { + public static void main(String[] args) throws IOException { WechatPayConfigDto dto = new WechatPayConfigDto() .setMerchantId("1643779408") .setApiV3Key("a92baac5eb7a36ed8ec198113e769a03") @@ -160,10 +183,19 @@ public class WechatEntryManager { .setPublicKeyId("PUB_KEY_ID_0116437794082025111000382377001000") .setDomain("https://api.mch.weixin.qq.com"); -// queryBankList(dto, 0, 10); + int offset = 0; + Integer limit = 100; +// JSONObject resp = queryBankList(dto, offset, limit); - String string = uploadImage(dto, "https://czg-qr-order.oss-cn-beijing.aliyuncs.com/indexs/shuangbackground.png"); - log.info("图片上传成功:{}", string); +// queryBankBranchList(dto, "1000009561", "110000", offset, limit); + queryBankBranchList(dto, "1000009561", "29", offset, limit); + +// queryProvinceList(dto); +// queryCityList(dto, "28"); + + +// String string = uploadImage(dto, "https://czg-qr-order.oss-cn-beijing.aliyuncs.com/indexs/shuangbackground.png"); +// log.info("图片上传成功:{}", string); // Config config = WechatConfig.getRsaConfig(dto); // PrivacyEncryptor encryptor = config.createEncryptor(); diff --git a/cash-sdk/aggregation-pay/src/main/java/com/czg/third/wechat/WechatReqUtils.java b/cash-sdk/aggregation-pay/src/main/java/com/czg/third/wechat/WechatReqUtils.java index f15522400..57a831c80 100644 --- a/cash-sdk/aggregation-pay/src/main/java/com/czg/third/wechat/WechatReqUtils.java +++ b/cash-sdk/aggregation-pay/src/main/java/com/czg/third/wechat/WechatReqUtils.java @@ -32,6 +32,10 @@ public class WechatReqUtils { url = Arrays.stream(params.entrySet().toArray(new Map.Entry[0])) .map(entry -> entry.getKey() + "=" + URLEncoder.encode(entry.getValue().toString(), StandardCharsets.UTF_8)) .collect(Collectors.joining("&", url + "?", "")); + + // 如果最后没有参数,则去掉多余的 "?" + url = url.endsWith("?") ? url.substring(0, url.length() - 1) : url; + return req(configDto, url, "GET", ""); } diff --git a/cash-sdk/aggregation-pay/src/main/java/com/czg/third/wechat/dto/config/WechatPayConfigDto.java b/cash-sdk/aggregation-pay/src/main/java/com/czg/third/wechat/dto/config/WechatPayConfigDto.java index 262d32fbd..78e544e8b 100644 --- a/cash-sdk/aggregation-pay/src/main/java/com/czg/third/wechat/dto/config/WechatPayConfigDto.java +++ b/cash-sdk/aggregation-pay/src/main/java/com/czg/third/wechat/dto/config/WechatPayConfigDto.java @@ -46,4 +46,52 @@ public class WechatPayConfigDto { * */ private String domain; + + public static WechatPayConfigDto getDefaultConfig() { + return new WechatPayConfigDto() + .setMerchantId("1643779408") + .setApiV3Key("a92baac5eb7a36ed8ec198113e769a03") + .setSerialNumber("4DE9BAC2EA584C3F274F694C9753CA814C4E9BF4") + .setPublicKey(""" + -----BEGIN PUBLIC KEY----- + MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtbeWXEEjBaYtw2OyM+SC + aCEMbryRXi4duKxx3vYG4rUVix+d5/Jz7Khev4Upml9zC+Xxvv/G9bHWAUyolzqD + wefahGurIxr43r4GJVnQ4i5G6BbBVw5d4Vuz0y/9Zd14zmc/EmBpT0Ml26H7tOZl + n1LSbQ4xNFkrRKrNEcExBLxkCd+K5K2TREZznywIi0izbHImvuzM8IneuR51FiqK + pdFnAjTwb126EIj6ECkL6KLCl8RWqpfiX8SFiolSQLs1/w79O0sIUk96X2zWpnoW + rTDFatPif/VEKl3y2dTlxxDxoZtVi48yTDW00OMzVl5D67oX3FVK0KsjHJSCfGlZ + 6wIDAQAB + -----END PUBLIC KEY-----""") + .setPrivateKey(""" + -----BEGIN PRIVATE KEY----- + MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQDqnAZhTxT572fo + 6wvSr8Rt0vRXg+EFKC6UvUiNE24oocQU5fjedX9KL/+fmoqay/xqIxvxvCNFTs4J + zlMqavSl6bMWCpjvf/Ry82JmN1v2kJEO4lgP8BsEiqlUpObCH8BMAVUOn1j+9q4Q + uZJJcbtRvec2fNweDM8EJp4B7RlUdDbHm86lfcDVp8iini7VjDp6D7aHT+C8A8OT + ugxQIquDec778wVd9r2Sv3+t6rAzFs+n+Zu++2xtFEPhO5N0wjrLHaukl+9crU+1 + lktjDzcPd07SwGZ+A+3BTmW3UCramI3506e/3MWBECB7ge+gM4URAV0nJJCLH/Im + WgEvPMr5AgMBAAECggEBAKv+wraoMWqiVv1tA/froAgbtcJLDranJK8qrXuvmPz0 + yzm+91qvrSgIVFEADUk67swo/R2Vng37nhWWS2Y3jy/rSr2H+2Lp3Z5ATA0/3I3A + onfU/FaC4mvL9CP32KzMdj/CYkccDzSsSCQ+x75MQNXGcTGDDCSDo2kZnpEu73j3 + aqvO1jbqTGWigRfjOIaIhStjQIT8nEm/3mJ4f5dM9M6FMz33mhax8EahSgvdahYB + t45iaGOWw81OJhmry47EvpwjXBl7jtO2HX3LiLbq5Ebcwu1zqDz5NM7ttnnGAqWC + 6y7JN5Vt4wPYrCydiUDe7dj0looffr2yw6MkNfYjLGECgYEA+FAvbEInQEi9YguS + CQtLHngqvYeai66tvyykog9o38KHnPGx2Myf+rn/Hcp7KNRfjd5G34CCNg7KLnrx + YIYh6+2bY3jirzdYUxuNKGbvM4gky/6M/P9zHF/uALKOE02yArdqemf4UxUvrYCc + JdXsAMqvbpdvW1aGgNRB32YCkG0CgYEA8d89vawsCjNCEUh0VWTMoBLFoex3qBMZ + rfzYQeBo6bDCRlAlUVzl+ouBUxSYxP/U8rzeNaRzGUwRLmlGMjyIr58FBlHsg2cR + DlsX3HVCUjpS6sgPXOqakdiLfhMcHZAspislSyVfeS3TbUWiA45+5PuNUq+EZYwl + ESsB1+yfRT0CgYEA0Ct49ksnWM8iZbXJgeeD3FFlk2rBd2TDqEem5W4Bv8T3p+0/ + 6b7yR2HyrGj5gys3yFmWFP1JLESN3xWWkhMhEQcrg+LuN3Iwi8vHNR3GXu892f7W + 96q4OAt8Hf2S+j/igkB99YyANDbIt63gOh/zMF67X/14j5wkOpC3gK+maqkCgYEA + s7nIrPoUt3ejLiiCmTmPe5q3VDzcJP4cZNau8zSHgK6hjZHcSPsYwPWMoWl6o1fe + qoiBLacHB9MoKS58xLOKdcVZ/Ho/ntylJd+2eVCAeY1xM5h5IfgJ5znbXVFh4O3S + 357L1Wzt5qOQqW/GlZH65LevKbPWU4axvHISqpnfN5kCgYEAqiqLuAPu84VSsqsE + GFh25t+1f0JY1sNfilE3/t9AdQeeCFv/5z9KB1kMt3a5ZFeVonsFIvCyaOJjhSkj + 4HCB94vWS7NuN5G9r874lMaPbZYQGwrcVaf265tN7cYYr3gUx1qB6+u+fh/kcft1 + BBmTzhb0zp5k8ngwAkA1g/LK204= + -----END PRIVATE KEY-----""") + .setPublicKeyId("PUB_KEY_ID_0116437794082025111000382377001000") + .setDomain("https://api.mch.weixin.qq.com"); + } }