From 17843919fb902a32dd939815abf006451743ac67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E8=89=AF=28004796=29?= Date: Fri, 12 Apr 2024 19:13:18 +0800 Subject: [PATCH] 123 --- pom.xml | 7 + .../com/ijpay/alipay/AliPayApiConfig.java | 400 +++ ruoyi-alipay/pom.xml | 53 + .../main/java/com/ijpay/alipay/AliPayApi.java | 2790 +++++++++++++++++ .../com/ijpay/alipay/AliPayApiConfig.java | 402 +++ .../com/ijpay/alipay/AliPayApiConfigKit.java | 128 + .../java/com/ijpay/alipay/AliPayCore.java | 139 + .../src/main/java/enums/SignType.java | 39 + ruoyi-cai/lib/IJPay-AliPay-2.9.10.jar | Bin 0 -> 24445 bytes ruoyi-cai/pom.xml | 6 +- .../com/ruoyi/cai/pay/PayConfigManager.java | 30 +- 11 files changed, 3985 insertions(+), 9 deletions(-) create mode 100644 ruoyi-admin/src/main/java/com/ijpay/alipay/AliPayApiConfig.java create mode 100644 ruoyi-alipay/pom.xml create mode 100644 ruoyi-alipay/src/main/java/com/ijpay/alipay/AliPayApi.java create mode 100644 ruoyi-alipay/src/main/java/com/ijpay/alipay/AliPayApiConfig.java create mode 100644 ruoyi-alipay/src/main/java/com/ijpay/alipay/AliPayApiConfigKit.java create mode 100644 ruoyi-alipay/src/main/java/com/ijpay/alipay/AliPayCore.java create mode 100644 ruoyi-alipay/src/main/java/enums/SignType.java create mode 100644 ruoyi-cai/lib/IJPay-AliPay-2.9.10.jar diff --git a/pom.xml b/pom.xml index 96a16d5f..f9228393 100644 --- a/pom.xml +++ b/pom.xml @@ -317,6 +317,12 @@ ${ruoyi-vue-plus.version} + + com.ruoyi + ruoyi-alipay + ${ruoyi-vue-plus.version} + + com.ruoyi @@ -339,6 +345,7 @@ ruoyi-yunxin ruoyi-websocket-boot ruoyi-sensitive-word + ruoyi-alipay pom diff --git a/ruoyi-admin/src/main/java/com/ijpay/alipay/AliPayApiConfig.java b/ruoyi-admin/src/main/java/com/ijpay/alipay/AliPayApiConfig.java new file mode 100644 index 00000000..3ceb8e68 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ijpay/alipay/AliPayApiConfig.java @@ -0,0 +1,400 @@ +package com.ijpay.alipay; + +import cn.hutool.core.util.StrUtil; +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; +import com.alipay.api.CertAlipayRequest; +import com.alipay.api.DefaultAlipayClient; + +import java.io.Serializable; + +/** + *

IJPay 让支付触手可及,封装了微信支付、支付宝支付、银联支付常用的支付方式以及各种常用的接口。

+ * + *

不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。

+ * + *

IJPay 交流群: 723992875、864988890

+ * + *

Node.js 版: https://gitee.com/javen205/TNWXX

+ * + *

支付宝支付配置

+ * + * @author Javen + */ +public class AliPayApiConfig implements Serializable { + private static final long serialVersionUID = -4736760736935998953L; + + /** + * 应用私钥 + */ + private String privateKey; + + /** + * 支付宝公钥 + */ + private String aliPayPublicKey; + + /** + * 应用编号 + */ + private String appId; + + /** + * 支付宝支付网关 + */ + private String serviceUrl; + + /** + * 字符集,为空默认为 UTF-8 + */ + private String charset; + + /** + * 为空默认为 RSA2 + */ + private String signType; + + /** + * 为空默认为 JSON + */ + private String format; + + /** + * 是否为证书模式 + */ + private boolean certModel; + + /** + * 应用公钥证书 (证书模式必须) + */ + private String appCertPath; + + /** + * 应用公钥证书文本内容 + */ + private String appCertContent; + + /** + * 支付宝公钥证书 (证书模式必须) + */ + private String aliPayCertPath; + + /** + * 支付宝公钥证书文本内容 + */ + private String aliPayCertContent; + + /** + * 支付宝根证书 (证书模式必须) + */ + private String aliPayRootCertPath; + + /** + * 支付宝根证书文本内容 + */ + private String aliPayRootCertContent; + + /** + * 支付宝客户端 + */ + private AlipayClient alipayClient; + + /** + * 其他附加参数 + */ + private Object exParams; + + /** + * 域名 + */ + private String domain; + + private Integer proxyPort; + private String proxyIp; + + private AliPayApiConfig() { + } + + public static AliPayApiConfig builder() { + return new AliPayApiConfig(); + } + + /** + * 普通公钥方式 + * + * @return AliPayApiConfig 支付宝配置 + */ + public AliPayApiConfig build() { + this.alipayClient = new DefaultAlipayClient(getServiceUrl(), getAppId(), getPrivateKey(), getFormat(), + getCharset(), getAliPayPublicKey(), getSignType()); + return this; + } + + public AliPayApiConfig buildProxy() { + this.alipayClient = new DefaultAlipayClient(getServiceUrl(), getAppId(), getPrivateKey(), getFormat(), + getCharset(), getAliPayPublicKey(), getSignType(), getProxyIp(),getProxyPort()); + return this; + } + + /** + * 证书模式 + * + * @return AliPayApiConfig 支付宝配置 + * @throws AlipayApiException 支付宝 Api 异常 + */ + public AliPayApiConfig buildByCert() throws AlipayApiException { + return build(getAppCertPath(), getAliPayCertPath(), getAliPayRootCertPath()); + } + + /** + * 证书模式 + * + * @return AliPayApiConfig 支付宝配置 + * @throws AlipayApiException 支付宝 Api 异常 + */ + public AliPayApiConfig buildByCertContent() throws AlipayApiException { + return buildByCertContent(getAppCertContent(), getAliPayCertContent(), getAliPayRootCertContent()); + } + + /** + * @param appCertPath 应用公钥证书路径 + * @param aliPayCertPath 支付宝公钥证书文件路径 + * @param aliPayRootCertPath 支付宝CA根证书文件路径 + * @return {@link AliPayApiConfig} 支付宝支付配置 + * @throws AlipayApiException 支付宝 Api 异常 + */ + public AliPayApiConfig build(String appCertPath, String aliPayCertPath, String aliPayRootCertPath) throws AlipayApiException { + CertAlipayRequest certAlipayRequest = new CertAlipayRequest(); + certAlipayRequest.setServerUrl(getServiceUrl()); + certAlipayRequest.setAppId(getAppId()); + certAlipayRequest.setPrivateKey(getPrivateKey()); + certAlipayRequest.setFormat(getFormat()); + certAlipayRequest.setCharset(getCharset()); + certAlipayRequest.setSignType(getSignType()); + certAlipayRequest.setCertPath(appCertPath); + certAlipayRequest.setAlipayPublicCertPath(aliPayCertPath); + certAlipayRequest.setRootCertPath(aliPayRootCertPath); + this.alipayClient = new DefaultAlipayClient(certAlipayRequest); + this.certModel = true; + return this; + } + + /** + * @param appCertContent 应用公钥证书 + * @param aliPayCertContent 支付宝公钥证书 + * @param aliPayRootCertContent 支付宝CA根证书 + * @return {@link AliPayApiConfig} 支付宝支付配置 + * @throws AlipayApiException 支付宝 Api 异常 + */ + public AliPayApiConfig buildByCertContent(String appCertContent, String aliPayCertContent, String aliPayRootCertContent) throws AlipayApiException { + CertAlipayRequest certAlipayRequest = new CertAlipayRequest(); + certAlipayRequest.setServerUrl(getServiceUrl()); + certAlipayRequest.setAppId(getAppId()); + certAlipayRequest.setPrivateKey(getPrivateKey()); + certAlipayRequest.setFormat(getFormat()); + certAlipayRequest.setCharset(getCharset()); + certAlipayRequest.setSignType(getSignType()); + certAlipayRequest.setCertContent(appCertContent); + certAlipayRequest.setAlipayPublicCertContent(aliPayCertContent); + certAlipayRequest.setRootCertContent(aliPayRootCertContent); + this.alipayClient = new DefaultAlipayClient(certAlipayRequest); + this.certModel = true; + return this; + } + + public String getPrivateKey() { + if (StrUtil.isBlank(privateKey)) { + throw new IllegalStateException("privateKey 未被赋值"); + } + return privateKey; + } + + public AliPayApiConfig setPrivateKey(String privateKey) { + if (StrUtil.isEmpty(privateKey)) { + throw new IllegalArgumentException("privateKey 值不能为 null"); + } + this.privateKey = privateKey; + return this; + } + + public String getAliPayPublicKey() { + return aliPayPublicKey; + } + + public AliPayApiConfig setAliPayPublicKey(String aliPayPublicKey) { + this.aliPayPublicKey = aliPayPublicKey; + return this; + } + + public String getAppId() { + if (StrUtil.isEmpty(appId)) { + throw new IllegalStateException("appId 未被赋值"); + } + return appId; + } + + public AliPayApiConfig setAppId(String appId) { + if (StrUtil.isEmpty(appId)) { + throw new IllegalArgumentException("appId 值不能为 null"); + } + this.appId = appId; + return this; + } + + public String getServiceUrl() { + if (StrUtil.isEmpty(serviceUrl)) { + throw new IllegalStateException("serviceUrl 未被赋值"); + } + return serviceUrl; + } + + public AliPayApiConfig setServiceUrl(String serviceUrl) { + if (StrUtil.isEmpty(serviceUrl)) { + serviceUrl = "https://openapi.alipay.com/gateway.do"; + } + this.serviceUrl = serviceUrl; + return this; + } + + public String getCharset() { + if (StrUtil.isEmpty(charset)) { + charset = "UTF-8"; + } + return charset; + } + + public AliPayApiConfig setCharset(String charset) { + if (StrUtil.isEmpty(charset)) { + charset = "UTF-8"; + } + this.charset = charset; + return this; + } + + public String getSignType() { + if (StrUtil.isEmpty(signType)) { + signType = "RSA2"; + } + return signType; + } + + public AliPayApiConfig setSignType(String signType) { + if (StrUtil.isEmpty(signType)) { + signType = "RSA2"; + } + this.signType = signType; + return this; + } + + public String getFormat() { + if (StrUtil.isEmpty(format)) { + format = "json"; + } + return format; + } + + public String getAppCertPath() { + return appCertPath; + } + + public AliPayApiConfig setAppCertPath(String appCertPath) { + this.appCertPath = appCertPath; + return this; + } + + public String getAppCertContent() { + return appCertContent; + } + + public AliPayApiConfig setAppCertContent(String appCertContent) { + this.appCertContent = appCertContent; + return this; + } + + public String getAliPayCertPath() { + return aliPayCertPath; + } + + public AliPayApiConfig setAliPayCertPath(String aliPayCertPath) { + this.aliPayCertPath = aliPayCertPath; + return this; + } + + public String getAliPayCertContent() { + return aliPayCertContent; + } + + public AliPayApiConfig setAliPayCertContent(String aliPayCertContent) { + this.aliPayCertContent = aliPayCertContent; + return this; + } + + public String getAliPayRootCertPath() { + return aliPayRootCertPath; + } + + public AliPayApiConfig setAliPayRootCertPath(String aliPayRootCertPath) { + this.aliPayRootCertPath = aliPayRootCertPath; + return this; + } + + public String getAliPayRootCertContent() { + return aliPayRootCertContent; + } + + public AliPayApiConfig setAliPayRootCertContent(String aliPayRootCertContent) { + this.aliPayRootCertContent = aliPayRootCertContent; + return this; + } + + public boolean isCertModel() { + return certModel; + } + + public AliPayApiConfig setCertModel(boolean certModel) { + this.certModel = certModel; + return this; + } + + public AlipayClient getAliPayClient() { + if (alipayClient == null) { + throw new IllegalStateException("aliPayClient 未被初始化"); + } + return alipayClient; + } + + public Object getExParams() { + return exParams; + } + + public AliPayApiConfig setExParams(Object exParams) { + this.exParams = exParams; + return this; + } + + public String getDomain() { + return domain; + } + + public AliPayApiConfig setDomain(String domain) { + this.domain = domain; + return this; + } + + + public Integer getProxyPort() { + return proxyPort; + } + + public void setProxyPort(Integer proxyPort) { + this.proxyPort = proxyPort; + } + + public String getProxyIp() { + return proxyIp; + } + + public void setProxyIp(String proxyIp) { + this.proxyIp = proxyIp; + } +} diff --git a/ruoyi-alipay/pom.xml b/ruoyi-alipay/pom.xml new file mode 100644 index 00000000..8c9e4750 --- /dev/null +++ b/ruoyi-alipay/pom.xml @@ -0,0 +1,53 @@ + + + 4.0.0 + + com.ruoyi + ruoyi-vue-plus + 4.8.2 + + + ruoyi-alipay + + + 8 + 8 + UTF-8 + 4.38.149.ALL + 2.0.42 + 5.8.23 + + + + + com.alipay.sdk + alipay-sdk-java + ${alipay.version} + + + fastjson + com.alibaba + + + + + javax.servlet + javax.servlet-api + 4.0.1 + provided + + + com.alibaba + fastjson + ${fastjson.version} + + + cn.hutool + hutool-crypto + ${hutool.version} + + + + diff --git a/ruoyi-alipay/src/main/java/com/ijpay/alipay/AliPayApi.java b/ruoyi-alipay/src/main/java/com/ijpay/alipay/AliPayApi.java new file mode 100644 index 00000000..2e1ae87e --- /dev/null +++ b/ruoyi-alipay/src/main/java/com/ijpay/alipay/AliPayApi.java @@ -0,0 +1,2790 @@ +package com.ijpay.alipay; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONObject; +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; +import com.alipay.api.AlipayRequest; +import com.alipay.api.AlipayResponse; +import com.alipay.api.BatchAlipayRequest; +import com.alipay.api.BatchAlipayResponse; +import com.alipay.api.domain.AlipayCommerceCityfacilitatorStationQueryModel; +import com.alipay.api.domain.AlipayCommerceCityfacilitatorVoucherBatchqueryModel; +import com.alipay.api.domain.AlipayCommerceCityfacilitatorVoucherGenerateModel; +import com.alipay.api.domain.AlipayCommerceCityfacilitatorVoucherRefundModel; +import com.alipay.api.domain.AlipayDataDataserviceBillDownloadurlQueryModel; +import com.alipay.api.domain.AlipayFundAccountQueryModel; +import com.alipay.api.domain.AlipayFundAuthOperationCancelModel; +import com.alipay.api.domain.AlipayFundAuthOperationDetailQueryModel; +import com.alipay.api.domain.AlipayFundAuthOrderFreezeModel; +import com.alipay.api.domain.AlipayFundAuthOrderUnfreezeModel; +import com.alipay.api.domain.AlipayFundAuthOrderVoucherCreateModel; +import com.alipay.api.domain.AlipayFundCouponOperationQueryModel; +import com.alipay.api.domain.AlipayFundCouponOrderAgreementPayModel; +import com.alipay.api.domain.AlipayFundCouponOrderAppPayModel; +import com.alipay.api.domain.AlipayFundCouponOrderDisburseModel; +import com.alipay.api.domain.AlipayFundCouponOrderPagePayModel; +import com.alipay.api.domain.AlipayFundCouponOrderRefundModel; +import com.alipay.api.domain.AlipayFundTransCommonQueryModel; +import com.alipay.api.domain.AlipayFundTransOrderQueryModel; +import com.alipay.api.domain.AlipayFundTransToaccountTransferModel; +import com.alipay.api.domain.AlipayFundTransUniTransferModel; +import com.alipay.api.domain.AlipayOpenAuthTokenAppModel; +import com.alipay.api.domain.AlipayOpenAuthTokenAppQueryModel; +import com.alipay.api.domain.AlipayTradeAppPayModel; +import com.alipay.api.domain.AlipayTradeCancelModel; +import com.alipay.api.domain.AlipayTradeCloseModel; +import com.alipay.api.domain.AlipayTradeCreateModel; +import com.alipay.api.domain.AlipayTradeFastpayRefundQueryModel; +import com.alipay.api.domain.AlipayTradeOrderSettleModel; +import com.alipay.api.domain.AlipayTradePagePayModel; +import com.alipay.api.domain.AlipayTradePageRefundModel; +import com.alipay.api.domain.AlipayTradePayModel; +import com.alipay.api.domain.AlipayTradePrecreateModel; +import com.alipay.api.domain.AlipayTradeQueryModel; +import com.alipay.api.domain.AlipayTradeRefundModel; +import com.alipay.api.domain.AlipayTradeRoyaltyRelationBatchqueryModel; +import com.alipay.api.domain.AlipayTradeRoyaltyRelationBindModel; +import com.alipay.api.domain.AlipayTradeRoyaltyRelationUnbindModel; +import com.alipay.api.domain.AlipayTradeWapPayModel; +import com.alipay.api.domain.ZolozAuthenticationCustomerFacemanageCreateModel; +import com.alipay.api.domain.ZolozAuthenticationCustomerFacemanageDeleteModel; +import com.alipay.api.domain.ZolozAuthenticationCustomerFtokenQueryModel; +import com.alipay.api.domain.ZolozAuthenticationCustomerSmilepayInitializeModel; +import com.alipay.api.domain.ZolozAuthenticationSmilepayInitializeModel; +import com.alipay.api.domain.ZolozIdentificationUserWebInitializeModel; +import com.alipay.api.domain.ZolozIdentificationUserWebQueryModel; +import com.alipay.api.internal.util.StringUtils; +import com.alipay.api.request.AlipayCommerceAdContractSignRequest; +import com.alipay.api.request.AlipayCommerceCityfacilitatorStationQueryRequest; +import com.alipay.api.request.AlipayCommerceCityfacilitatorVoucherBatchqueryRequest; +import com.alipay.api.request.AlipayCommerceCityfacilitatorVoucherGenerateRequest; +import com.alipay.api.request.AlipayCommerceCityfacilitatorVoucherRefundRequest; +import com.alipay.api.request.AlipayDataDataserviceBillDownloadurlQueryRequest; +import com.alipay.api.request.AlipayEbppBillGetRequest; +import com.alipay.api.request.AlipayFundAccountQueryRequest; +import com.alipay.api.request.AlipayFundAuthOperationCancelRequest; +import com.alipay.api.request.AlipayFundAuthOperationDetailQueryRequest; +import com.alipay.api.request.AlipayFundAuthOrderFreezeRequest; +import com.alipay.api.request.AlipayFundAuthOrderUnfreezeRequest; +import com.alipay.api.request.AlipayFundAuthOrderVoucherCreateRequest; +import com.alipay.api.request.AlipayFundCouponOperationQueryRequest; +import com.alipay.api.request.AlipayFundCouponOrderAgreementPayRequest; +import com.alipay.api.request.AlipayFundCouponOrderAppPayRequest; +import com.alipay.api.request.AlipayFundCouponOrderDisburseRequest; +import com.alipay.api.request.AlipayFundCouponOrderPagePayRequest; +import com.alipay.api.request.AlipayFundCouponOrderRefundRequest; +import com.alipay.api.request.AlipayFundTransCommonQueryRequest; +import com.alipay.api.request.AlipayFundTransOrderQueryRequest; +import com.alipay.api.request.AlipayFundTransToaccountTransferRequest; +import com.alipay.api.request.AlipayFundTransUniTransferRequest; +import com.alipay.api.request.AlipayOpenAuthTokenAppQueryRequest; +import com.alipay.api.request.AlipayOpenAuthTokenAppRequest; +import com.alipay.api.request.AlipayTradeAppPayRequest; +import com.alipay.api.request.AlipayTradeCancelRequest; +import com.alipay.api.request.AlipayTradeCloseRequest; +import com.alipay.api.request.AlipayTradeCreateRequest; +import com.alipay.api.request.AlipayTradeFastpayRefundQueryRequest; +import com.alipay.api.request.AlipayTradeOrderSettleRequest; +import com.alipay.api.request.AlipayTradePagePayRequest; +import com.alipay.api.request.AlipayTradePageRefundRequest; +import com.alipay.api.request.AlipayTradePayRequest; +import com.alipay.api.request.AlipayTradePrecreateRequest; +import com.alipay.api.request.AlipayTradeQueryRequest; +import com.alipay.api.request.AlipayTradeRefundRequest; +import com.alipay.api.request.AlipayTradeRoyaltyRelationBatchqueryRequest; +import com.alipay.api.request.AlipayTradeRoyaltyRelationBindRequest; +import com.alipay.api.request.AlipayTradeRoyaltyRelationUnbindRequest; +import com.alipay.api.request.AlipayTradeWapPayRequest; +import com.alipay.api.request.ZolozAuthenticationCustomerFacemanageCreateRequest; +import com.alipay.api.request.ZolozAuthenticationCustomerFacemanageDeleteRequest; +import com.alipay.api.request.ZolozAuthenticationCustomerFtokenQueryRequest; +import com.alipay.api.request.ZolozAuthenticationCustomerSmilepayInitializeRequest; +import com.alipay.api.request.ZolozAuthenticationSmilepayInitializeRequest; +import com.alipay.api.request.ZolozIdentificationUserWebInitializeRequest; +import com.alipay.api.request.ZolozIdentificationUserWebQueryRequest; +import com.alipay.api.response.AlipayCommerceAdContractSignResponse; +import com.alipay.api.response.AlipayCommerceCityfacilitatorStationQueryResponse; +import com.alipay.api.response.AlipayCommerceCityfacilitatorVoucherBatchqueryResponse; +import com.alipay.api.response.AlipayCommerceCityfacilitatorVoucherGenerateResponse; +import com.alipay.api.response.AlipayCommerceCityfacilitatorVoucherRefundResponse; +import com.alipay.api.response.AlipayDataDataserviceBillDownloadurlQueryResponse; +import com.alipay.api.response.AlipayEbppBillGetResponse; +import com.alipay.api.response.AlipayFundAccountQueryResponse; +import com.alipay.api.response.AlipayFundAuthOperationCancelResponse; +import com.alipay.api.response.AlipayFundAuthOperationDetailQueryResponse; +import com.alipay.api.response.AlipayFundAuthOrderFreezeResponse; +import com.alipay.api.response.AlipayFundAuthOrderUnfreezeResponse; +import com.alipay.api.response.AlipayFundAuthOrderVoucherCreateResponse; +import com.alipay.api.response.AlipayFundCouponOperationQueryResponse; +import com.alipay.api.response.AlipayFundCouponOrderAgreementPayResponse; +import com.alipay.api.response.AlipayFundCouponOrderAppPayResponse; +import com.alipay.api.response.AlipayFundCouponOrderDisburseResponse; +import com.alipay.api.response.AlipayFundCouponOrderPagePayResponse; +import com.alipay.api.response.AlipayFundCouponOrderRefundResponse; +import com.alipay.api.response.AlipayFundTransCommonQueryResponse; +import com.alipay.api.response.AlipayFundTransOrderQueryResponse; +import com.alipay.api.response.AlipayFundTransToaccountTransferResponse; +import com.alipay.api.response.AlipayFundTransUniTransferResponse; +import com.alipay.api.response.AlipayOpenAuthTokenAppQueryResponse; +import com.alipay.api.response.AlipayOpenAuthTokenAppResponse; +import com.alipay.api.response.AlipayTradeAppPayResponse; +import com.alipay.api.response.AlipayTradeCancelResponse; +import com.alipay.api.response.AlipayTradeCloseResponse; +import com.alipay.api.response.AlipayTradeCreateResponse; +import com.alipay.api.response.AlipayTradeFastpayRefundQueryResponse; +import com.alipay.api.response.AlipayTradeOrderSettleResponse; +import com.alipay.api.response.AlipayTradePageRefundResponse; +import com.alipay.api.response.AlipayTradePayResponse; +import com.alipay.api.response.AlipayTradePrecreateResponse; +import com.alipay.api.response.AlipayTradeQueryResponse; +import com.alipay.api.response.AlipayTradeRefundResponse; +import com.alipay.api.response.AlipayTradeRoyaltyRelationBatchqueryResponse; +import com.alipay.api.response.AlipayTradeRoyaltyRelationBindResponse; +import com.alipay.api.response.AlipayTradeRoyaltyRelationUnbindResponse; +import com.alipay.api.response.ZolozAuthenticationCustomerFacemanageCreateResponse; +import com.alipay.api.response.ZolozAuthenticationCustomerFacemanageDeleteResponse; +import com.alipay.api.response.ZolozAuthenticationCustomerFtokenQueryResponse; +import com.alipay.api.response.ZolozAuthenticationCustomerSmilepayInitializeResponse; +import com.alipay.api.response.ZolozAuthenticationSmilepayInitializeResponse; +import com.alipay.api.response.ZolozIdentificationUserWebInitializeResponse; +import com.alipay.api.response.ZolozIdentificationUserWebQueryResponse; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.Date; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +/** + *

+ * IJPay 让支付触手可及,封装了微信支付、支付宝支付、银联支付常用的支付方式以及各种常用的接口。 + *

+ * + *

+ * 不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。 + *

+ * + *

+ * IJPay 交流群: 723992875、864988890 + *

+ * + *

+ * Node.js 版: https://gitee.com/javen205/TNWX + *

+ * + *

+ * 支付宝支付相关接口 + *

+ * + * @author Javen + */ +public class AliPayApi { + + /** + * 支付宝提供给商户的服务接入网关URL(新) + */ + private static final String GATEWAY_NEW = "https://mapi.alipay.com/gateway.do?"; + + public static T doExecute(AlipayRequest request) throws AlipayApiException { + if (AliPayApiConfigKit.getAliPayApiConfig().isCertModel()) { + return certificateExecute(request); + } else { + return execute(request); + } + } + + public static T doExecute(AlipayClient alipayClient, Boolean certModel, AlipayRequest request) throws AlipayApiException { + if (alipayClient == null) { + throw new IllegalStateException("aliPayClient 未被初始化"); + } + if (certModel) { + return certificateExecute(alipayClient, request); + } else { + return execute(alipayClient, request); + } + } + + + public static T doExecute(AlipayClient alipayClient, Boolean certModel, AlipayRequest request, String authToken) throws AlipayApiException { + if (alipayClient == null) { + throw new IllegalStateException("aliPayClient 未被初始化"); + } + if (certModel) { + return certificateExecute(alipayClient, request, authToken); + } else { + return execute(alipayClient, request, authToken); + } + } + + + public static T doExecute(AlipayRequest request, String authToken) throws AlipayApiException { + if (AliPayApiConfigKit.getAliPayApiConfig().isCertModel()) { + return certificateExecute(request, authToken); + } else { + return execute(request, authToken); + } + } + + + public static T doExecute(AlipayClient alipayClient, AlipayRequest request, String authToken) throws AlipayApiException { + if (alipayClient == null) { + throw new IllegalStateException("aliPayClient 未被初始化"); + } + if (AliPayApiConfigKit.getAliPayApiConfig().isCertModel()) { + return certificateExecute(alipayClient, request, authToken); + } else { + return execute(alipayClient, request, authToken); + } + } + + public static T execute(AlipayRequest request) throws AlipayApiException { + return AliPayApiConfigKit.getAliPayApiConfig().getAliPayClient().execute(request); + } + + + public static T execute(AlipayClient alipayClient, AlipayRequest request) throws AlipayApiException { + if (alipayClient == null) { + throw new IllegalStateException("aliPayClient 未被初始化"); + } + return alipayClient.execute(request); + } + + public static T execute(AlipayRequest request, String authToken) throws AlipayApiException { + return AliPayApiConfigKit.getAliPayApiConfig().getAliPayClient().execute(request, authToken); + } + + public static T execute(AlipayClient alipayClient, AlipayRequest request, String authToken) throws AlipayApiException { + if (alipayClient == null) { + throw new IllegalStateException("aliPayClient 未被初始化"); + } + return alipayClient.execute(request, authToken); + } + + public static T execute(AlipayRequest request, String accessToken, String appAuthToken) throws AlipayApiException { + return AliPayApiConfigKit.getAliPayApiConfig().getAliPayClient().execute(request, accessToken, appAuthToken); + } + + public static T execute(AlipayClient alipayClient, AlipayRequest request, String accessToken, String appAuthToken) throws AlipayApiException { + if (alipayClient == null) { + throw new IllegalStateException("aliPayClient 未被初始化"); + } + return alipayClient.execute(request, accessToken, appAuthToken); + } + + public static T execute(AlipayRequest request, String accessToken, String appAuthToken, String targetAppId) throws AlipayApiException { + return AliPayApiConfigKit.getAliPayApiConfig().getAliPayClient().execute(request, accessToken, appAuthToken, targetAppId); + } + + public static T execute(AlipayClient alipayClient, AlipayRequest request, String accessToken, String appAuthToken, String targetAppId) throws AlipayApiException { + if (alipayClient == null) { + throw new IllegalStateException("aliPayClient 未被初始化"); + } + return alipayClient.execute(request, accessToken, appAuthToken, targetAppId); + } + + public static T pageExecute(AlipayRequest request) throws AlipayApiException { + return AliPayApiConfigKit.getAliPayApiConfig().getAliPayClient().pageExecute(request); + } + + public static T pageExecute(AlipayClient alipayClient, AlipayRequest request) throws AlipayApiException { + if (alipayClient == null) { + throw new IllegalStateException("aliPayClient 未被初始化"); + } + return alipayClient.pageExecute(request); + } + + public static T pageExecute(AlipayRequest request, String method) throws AlipayApiException { + return AliPayApiConfigKit.getAliPayApiConfig().getAliPayClient().pageExecute(request, method); + } + + public static T pageExecute(AlipayClient alipayClient, AlipayRequest request, String method) throws AlipayApiException { + if (alipayClient == null) { + throw new IllegalStateException("aliPayClient 未被初始化"); + } + return alipayClient.pageExecute(request, method); + } + + public static T sdkExecute(AlipayRequest request) throws AlipayApiException { + return AliPayApiConfigKit.getAliPayApiConfig().getAliPayClient().sdkExecute(request); + } + + public static T sdkExecute(AlipayClient alipayClient, AlipayRequest request) throws AlipayApiException { + if (alipayClient == null) { + throw new IllegalStateException("aliPayClient 未被初始化"); + } + return alipayClient.sdkExecute(request); + } + + public static BatchAlipayResponse execute(BatchAlipayRequest request) throws AlipayApiException { + return AliPayApiConfigKit.getAliPayApiConfig().getAliPayClient().execute(request); + } + + public static BatchAlipayResponse execute(AlipayClient alipayClient, BatchAlipayRequest request) throws AlipayApiException { + if (alipayClient == null) { + throw new IllegalStateException("aliPayClient 未被初始化"); + } + return alipayClient.execute(request); + } + + public static T certificateExecute(AlipayRequest request) throws AlipayApiException { + return AliPayApiConfigKit.getAliPayApiConfig().getAliPayClient().certificateExecute(request); + } + + public static T certificateExecute(AlipayClient alipayClient, AlipayRequest request) throws AlipayApiException { + if (alipayClient == null) { + throw new IllegalStateException("aliPayClient 未被初始化"); + } + return alipayClient.certificateExecute(request); + } + + public static T certificateExecute(AlipayRequest request, String authToken) throws AlipayApiException { + return AliPayApiConfigKit.getAliPayApiConfig().getAliPayClient().certificateExecute(request, authToken); + } + + public static T certificateExecute(AlipayClient alipayClient, AlipayRequest request, String authToken) throws AlipayApiException { + if (alipayClient == null) { + throw new IllegalStateException("aliPayClient 未被初始化"); + } + return alipayClient.certificateExecute(request, authToken); + } + + public static T certificateExecute(AlipayRequest request, String accessToken, String appAuthToken) throws AlipayApiException { + return AliPayApiConfigKit.getAliPayApiConfig().getAliPayClient().certificateExecute(request, accessToken, appAuthToken); + } + + public static T certificateExecute(AlipayClient alipayClient, AlipayRequest request, String accessToken, String appAuthToken) throws AlipayApiException { + if (alipayClient == null) { + throw new IllegalStateException("aliPayClient 未被初始化"); + } + return alipayClient.certificateExecute(request, accessToken, appAuthToken); + } + + public static T certificateExecute(AlipayRequest request, String accessToken, String appAuthToken, String targetAppId) throws AlipayApiException { + return AliPayApiConfigKit.getAliPayApiConfig().getAliPayClient().certificateExecute(request, accessToken, appAuthToken, targetAppId); + } + + public static T certificateExecute(AlipayClient alipayClient, AlipayRequest request, String accessToken, String appAuthToken, String targetAppId) + throws AlipayApiException { + if (alipayClient == null) { + throw new IllegalStateException("aliPayClient 未被初始化"); + } + return alipayClient.certificateExecute(request, accessToken, appAuthToken, targetAppId); + } + + /** + * APP支付 + * + * @param model {@link AlipayTradeAppPayModel} + * @param notifyUrl 异步通知 URL + * @return {@link AlipayTradeAppPayResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeAppPayResponse appPayToResponse(AlipayTradeAppPayModel model, String notifyUrl) throws AlipayApiException { + AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); + request.setBizModel(model); + request.setNotifyUrl(notifyUrl); + return sdkExecute(request); + } + + + /** + * APP支付 + * + * @param alipayClient {@link AlipayClient} + * @param model {@link AlipayTradeAppPayModel} + * @param notifyUrl 异步通知 URL + * @return {@link AlipayTradeAppPayResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeAppPayResponse appPayToResponse(AlipayClient alipayClient, AlipayTradeAppPayModel model, String notifyUrl) throws AlipayApiException { + AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); + request.setBizModel(model); + request.setNotifyUrl(notifyUrl); + return sdkExecute(alipayClient, request); + } + + /** + * APP支付 + * + * @param model {@link AlipayTradeAppPayModel} + * @param notifyUrl 异步通知 URL + * @param appAuthToken 应用授权token + * @return {@link AlipayTradeAppPayResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeAppPayResponse appPayToResponse(AlipayTradeAppPayModel model, String notifyUrl, String appAuthToken) throws AlipayApiException { + AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); + request.setBizModel(model); + request.setNotifyUrl(notifyUrl); + request.putOtherTextParam("app_auth_token", appAuthToken); + return sdkExecute(request); + } + + + /** + * APP支付 + * + * @param alipayClient {@link AlipayClient} + * @param model {@link AlipayTradeAppPayModel} + * @param notifyUrl 异步通知 URL + * @param appAuthToken 应用授权token + * @return {@link AlipayTradeAppPayResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeAppPayResponse appPayToResponse(AlipayClient alipayClient, AlipayTradeAppPayModel model, String notifyUrl, String appAuthToken) throws AlipayApiException { + AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); + request.setBizModel(model); + request.setNotifyUrl(notifyUrl); + request.putOtherTextParam("app_auth_token", appAuthToken); + return sdkExecute(alipayClient, request); + } + + /** + * WAP支付 + * + * @param response {@link HttpServletResponse} + * @param model {@link AlipayTradeWapPayModel} + * @param returnUrl 同步通知URL + * @param notifyUrl 异步通知URL + * @throws AlipayApiException 支付宝 Api 异常 + * @throws IOException IO 异常 + */ + public static void wapPay(HttpServletResponse response, AlipayTradeWapPayModel model, String returnUrl, String notifyUrl) throws AlipayApiException, IOException { + String form = wapPayStr(model, returnUrl, notifyUrl); + response.setContentType("text/html;charset=" + AliPayApiConfigKit.getAliPayApiConfig().getCharset()); + PrintWriter out = response.getWriter(); + out.write(form); + out.flush(); + out.close(); + } + + + /** + * WAP支付 + * + * @param alipayClient {@link AlipayClient} + * @param response {@link HttpServletResponse} + * @param model {@link AlipayTradeWapPayModel} + * @param returnUrl 异步通知URL + * @param notifyUrl 同步通知URL + * @throws AlipayApiException 支付宝 Api 异常 + * @throws IOException IO 异常 + */ + public static void wapPay(AlipayClient alipayClient, HttpServletResponse response, AlipayTradeWapPayModel model, String returnUrl, String notifyUrl) throws AlipayApiException, IOException { + String form = wapPayStr(alipayClient, model, returnUrl, notifyUrl); + response.setContentType("text/html;charset=UTF-8"); + PrintWriter out = response.getWriter(); + out.write(form); + out.flush(); + out.close(); + } + + + /** + * WAP支付 + * + * @param response {@link HttpServletResponse} + * @param model {@link AlipayTradeWapPayModel} + * @param returnUrl 异步通知URL + * @param notifyUrl 同步通知URL + * @param appAuthToken 应用授权token + * @throws AlipayApiException 支付宝 Api 异常 + * @throws IOException IO 异常 + */ + public static void wapPay(HttpServletResponse response, AlipayTradeWapPayModel model, String returnUrl, String notifyUrl, String appAuthToken) throws AlipayApiException, IOException { + String form = wapPayStr(model, returnUrl, notifyUrl, appAuthToken); + response.setContentType("text/html;charset=" + AliPayApiConfigKit.getAliPayApiConfig().getCharset()); + PrintWriter out = response.getWriter(); + out.write(form); + out.flush(); + out.close(); + } + + + /** + * WAP支付 + * + * @param alipayClient {@link AlipayClient} + * @param response {@link HttpServletResponse} + * @param model {@link AlipayTradeWapPayModel} + * @param returnUrl 异步通知URL + * @param notifyUrl 同步通知URL + * @param appAuthToken 应用授权token + * @throws AlipayApiException 支付宝 Api 异常 + * @throws IOException IO 异常 + */ + public static void wapPay(AlipayClient alipayClient, HttpServletResponse response, AlipayTradeWapPayModel model, String returnUrl, String notifyUrl, String appAuthToken) throws AlipayApiException, IOException { + String form = wapPayStr(alipayClient, model, returnUrl, notifyUrl, appAuthToken); + String charset = "UTF-8"; + response.setContentType("text/html;charset=" + charset); + PrintWriter out = response.getWriter(); + out.write(form); + out.flush(); + out.close(); + } + + /** + *

+ * WAP支付 + *

+ * + *

+ * 为了解决 Filter 中使用 OutputStream getOutputStream() 和 PrintWriter getWriter() 冲突异常问题 + *

+ * + * @param response {@link HttpServletResponse} + * @param model {@link AlipayTradeWapPayModel} + * @param returnUrl 异步通知URL + * @param notifyUrl 同步通知URL + * @param appAuthToken 应用授权token + * @throws AlipayApiException 支付宝 Api 异常 + * @throws IOException IO 异常 + */ + public static void wapPayByOutputStream(HttpServletResponse response, AlipayTradeWapPayModel model, String returnUrl, String notifyUrl, String appAuthToken) + throws AlipayApiException, IOException { + String form = wapPayStr(model, returnUrl, notifyUrl, appAuthToken); + response.setContentType("text/html;charset=" + AliPayApiConfigKit.getAliPayApiConfig().getCharset()); + OutputStream out = response.getOutputStream(); + out.write(form.getBytes(AliPayApiConfigKit.getAliPayApiConfig().getCharset())); + response.getOutputStream().flush(); + } + + + /** + *

+ * WAP支付 + *

+ * + *

+ * 为了解决 Filter 中使用 OutputStream getOutputStream() 和 PrintWriter getWriter() 冲突异常问题 + *

+ * + * @param alipayClient {@link AlipayClient} + * @param response {@link HttpServletResponse} + * @param model {@link AlipayTradeWapPayModel} + * @param returnUrl 异步通知URL + * @param notifyUrl 同步通知URL + * @param appAuthToken 应用授权token + * @throws AlipayApiException 支付宝 Api 异常 + * @throws IOException IO 异常 + */ + public static void wapPayByOutputStream(AlipayClient alipayClient, HttpServletResponse response, AlipayTradeWapPayModel model, String returnUrl, String notifyUrl, String appAuthToken) + throws AlipayApiException, IOException { + String form = wapPayStr(alipayClient, model, returnUrl, notifyUrl, appAuthToken); + String charset = "UTF-8"; + response.setContentType("text/html;charset=" + charset); + OutputStream out = response.getOutputStream(); + out.write(form.getBytes(charset)); + response.getOutputStream().flush(); + } + + /** + *

+ * WAP支付 + *

+ * + *

+ * 为了解决 Filter 中使用 OutputStream getOutputStream() 和 PrintWriter getWriter() 冲突异常问题 + *

+ * + * @param response {@link HttpServletResponse} + * @param model {@link AlipayTradeWapPayModel} + * @param returnUrl 异步通知URL + * @param notifyUrl 同步通知URL + * @throws AlipayApiException 支付宝 Api 异常 + * @throws IOException IO 异常 + */ + public static void wapPayByOutputStream(HttpServletResponse response, AlipayTradeWapPayModel model, String returnUrl, String notifyUrl) throws AlipayApiException, IOException { + String form = wapPayStr(model, returnUrl, notifyUrl); + response.setContentType("text/html;charset=" + AliPayApiConfigKit.getAliPayApiConfig().getCharset()); + OutputStream out = response.getOutputStream(); + out.write(form.getBytes(AliPayApiConfigKit.getAliPayApiConfig().getCharset())); + response.getOutputStream().flush(); + } + + + /** + *

+ * WAP支付 + *

+ * + *

+ * 为了解决 Filter 中使用 OutputStream getOutputStream() 和 PrintWriter getWriter() 冲突异常问题 + *

+ * + * @param alipayClient {@link AlipayClient} + * @param response {@link HttpServletResponse} + * @param model {@link AlipayTradeWapPayModel} + * @param returnUrl 异步通知URL + * @param notifyUrl 同步通知URL + * @throws AlipayApiException 支付宝 Api 异常 + * @throws IOException IO 异常 + */ + public static void wapPayByOutputStream(AlipayClient alipayClient, HttpServletResponse response, AlipayTradeWapPayModel model, String returnUrl, String notifyUrl) throws AlipayApiException, IOException { + String form = wapPayStr(alipayClient, model, returnUrl, notifyUrl); + String charset = "UTF-8"; + response.setContentType("text/html;charset=" + charset); + OutputStream out = response.getOutputStream(); + out.write(form.getBytes(charset)); + response.getOutputStream().flush(); + } + + /** + * WAP支付 + * + * @param model {@link AlipayTradeWapPayModel} + * @param returnUrl 异步通知URL + * @param notifyUrl 同步通知URL + * @return {String} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static String wapPayStr(AlipayTradeWapPayModel model, String returnUrl, String notifyUrl) throws AlipayApiException { + AlipayTradeWapPayRequest aliPayRequest = new AlipayTradeWapPayRequest(); + aliPayRequest.setReturnUrl(returnUrl); + aliPayRequest.setNotifyUrl(notifyUrl); + aliPayRequest.setBizModel(model); + return pageExecute(aliPayRequest).getBody(); + } + + /** + * WAP支付 + * + * @param alipayClient {@link AlipayClient} + * @param model {@link AlipayTradeWapPayModel} + * @param returnUrl 异步通知URL + * @param notifyUrl 同步通知URL + * @return {String} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static String wapPayStr(AlipayClient alipayClient, AlipayTradeWapPayModel model, String returnUrl, String notifyUrl) throws AlipayApiException { + AlipayTradeWapPayRequest aliPayRequest = new AlipayTradeWapPayRequest(); + aliPayRequest.setReturnUrl(returnUrl); + aliPayRequest.setNotifyUrl(notifyUrl); + aliPayRequest.setBizModel(model); + return pageExecute(alipayClient, aliPayRequest).getBody(); + } + + /** + * WAP支付 + * + * @param model {@link AlipayTradeWapPayModel} + * @param returnUrl 异步通知URL + * @param notifyUrl 同步通知URL + * @param appAuthToken 应用授权token + * @return {String} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static String wapPayStr(AlipayTradeWapPayModel model, String returnUrl, String notifyUrl, String appAuthToken) throws AlipayApiException { + AlipayTradeWapPayRequest aliPayRequest = new AlipayTradeWapPayRequest(); + aliPayRequest.setReturnUrl(returnUrl); + aliPayRequest.setNotifyUrl(notifyUrl); + aliPayRequest.setBizModel(model); + aliPayRequest.putOtherTextParam("app_auth_token", appAuthToken); + return pageExecute(aliPayRequest).getBody(); + } + + /** + * WAP支付 + * + * @param alipayClient {@link AlipayClient} + * @param model {@link AlipayTradeWapPayModel} + * @param returnUrl 异步通知URL + * @param notifyUrl 同步通知URL + * @param appAuthToken 应用授权token + * @return {String} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static String wapPayStr(AlipayClient alipayClient, AlipayTradeWapPayModel model, String returnUrl, String notifyUrl, String appAuthToken) throws AlipayApiException { + AlipayTradeWapPayRequest aliPayRequest = new AlipayTradeWapPayRequest(); + aliPayRequest.setReturnUrl(returnUrl); + aliPayRequest.setNotifyUrl(notifyUrl); + aliPayRequest.setBizModel(model); + aliPayRequest.putOtherTextParam("app_auth_token", appAuthToken); + return pageExecute(alipayClient, aliPayRequest).getBody(); + } + + /** + * 统一收单交易支付接口接口
+ * 适用于:条形码支付、声波支付等
+ * + * @param model {@link AlipayTradePayModel} + * @param notifyUrl 异步通知URL + * @return {@link AlipayTradePayResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradePayResponse tradePayToResponse(AlipayTradePayModel model, String notifyUrl) throws AlipayApiException { + AlipayTradePayRequest request = new AlipayTradePayRequest(); + // 填充业务参数 + request.setBizModel(model); + request.setNotifyUrl(notifyUrl); + return doExecute(request); + } + + /** + * 统一收单交易支付接口接口
+ * 适用于:条形码支付、声波支付等
+ * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayTradePayModel} + * @param notifyUrl 异步通知URL + * @return {@link AlipayTradePayResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradePayResponse tradePayToResponse(AlipayClient alipayClient, Boolean certModel, AlipayTradePayModel model, String notifyUrl) throws AlipayApiException { + AlipayTradePayRequest request = new AlipayTradePayRequest(); + // 填充业务参数 + request.setBizModel(model); + request.setNotifyUrl(notifyUrl); + return doExecute(alipayClient, certModel, request); + } + + /** + * 统一收单交易支付接口接口
+ * 适用于:条形码支付、声波支付等
+ * + * @param model {AlipayTradePayModel} + * @param notifyUrl 异步通知URL + * @param appAuthToken 应用授权token + * @return {AlipayTradePayResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradePayResponse tradePayToResponse(AlipayTradePayModel model, String notifyUrl, String appAuthToken) throws AlipayApiException { + AlipayTradePayRequest request = new AlipayTradePayRequest(); + request.setBizModel(model); + request.setNotifyUrl(notifyUrl); + request.putOtherTextParam("app_auth_token", appAuthToken); + return doExecute(request); + } + + /** + * 统一收单交易支付接口接口
+ * 适用于:条形码支付、声波支付等
+ * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {AlipayTradePayModel} + * @param notifyUrl 异步通知URL + * @param appAuthToken 应用授权token + * @return {AlipayTradePayResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradePayResponse tradePayToResponse(AlipayClient alipayClient, Boolean certModel, AlipayTradePayModel model, String notifyUrl, String appAuthToken) throws AlipayApiException { + AlipayTradePayRequest request = new AlipayTradePayRequest(); + request.setBizModel(model); + request.setNotifyUrl(notifyUrl); + request.putOtherTextParam("app_auth_token", appAuthToken); + return doExecute(alipayClient, certModel, request); + } + + + /** + * 统一收单线下交易预创建
+ * 适用于:扫码支付等
+ * + * @param model {@link AlipayTradePrecreateModel} + * @param notifyUrl 异步通知URL + * @return {@link AlipayTradePrecreateResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradePrecreateResponse tradePrecreatePayToResponse(AlipayTradePrecreateModel model, String notifyUrl) throws AlipayApiException { + AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest(); + request.setBizModel(model); + request.setNotifyUrl(notifyUrl); + return doExecute(request); + } + + + /** + * 统一收单线下交易预创建
+ * 适用于:扫码支付等
+ * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayTradePrecreateModel} + * @param notifyUrl 异步通知URL + * @return {@link AlipayTradePrecreateResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradePrecreateResponse tradePrecreatePayToResponse(AlipayClient alipayClient, Boolean certModel, AlipayTradePrecreateModel model, String notifyUrl) throws AlipayApiException { + AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest(); + request.setBizModel(model); + request.setNotifyUrl(notifyUrl); + return doExecute(alipayClient, certModel, request); + } + + + /** + * 统一收单线下交易预创建
+ * 适用于:扫码支付等
+ * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayTradePrecreateModel} + * @param notifyUrl 异步通知URL + * @return {@link AlipayTradePrecreateResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradePrecreateResponse tradePrecreatePayToResponse(AlipayClient alipayClient, Boolean certModel, AlipayTradePrecreateModel model, String notifyUrl, String appAuthToken) throws AlipayApiException { + AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest(); + request.setBizModel(model); + request.setNotifyUrl(notifyUrl); + return doExecute(alipayClient, certModel, request, appAuthToken); + } + + /** + * 统一收单线下交易预创建
+ * 适用于:扫码支付等
+ * + * @param model {@link AlipayTradePrecreateModel} + * @param notifyUrl 异步通知URL + * @param appAuthToken 应用授权token + * @return {@link AlipayTradePrecreateResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradePrecreateResponse tradePrecreatePayToResponse(AlipayTradePrecreateModel model, String notifyUrl, String appAuthToken) throws AlipayApiException { + AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest(); + request.setBizModel(model); + request.setNotifyUrl(notifyUrl); + return execute(request, null, appAuthToken); + } + + /** + * 统一收单线下交易预创建
+ * 适用于:扫码支付等
+ * + * @param alipayClient {@link AlipayClient} + * @param model {@link AlipayTradePrecreateModel} + * @param notifyUrl 异步通知URL + * @param appAuthToken 应用授权token + * @return {@link AlipayTradePrecreateResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradePrecreateResponse tradePrecreatePayToResponse(AlipayClient alipayClient, AlipayTradePrecreateModel model, String notifyUrl, String appAuthToken) throws AlipayApiException { + AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest(); + request.setBizModel(model); + request.setNotifyUrl(notifyUrl); + return execute(alipayClient, request, null, appAuthToken); + } + + /** + * 单笔转账到支付宝账户 + * + * @param model {@link AlipayFundTransToaccountTransferModel} + * @return 转账是否成功 + * @throws AlipayApiException 支付宝 Api 异常 + */ + @Deprecated + public static boolean transfer(AlipayFundTransToaccountTransferModel model) throws AlipayApiException { + AlipayFundTransToaccountTransferResponse response = transferToResponse(model); + String result = response.getBody(); + if (response.isSuccess()) { + return true; + } else { + // 调用查询接口查询数据 + JSONObject jsonObject = JSONObject.parseObject(result); + String outBizNo = jsonObject.getJSONObject("alipay_fund_trans_toaccount_transfer_response").getString("out_biz_no"); + AlipayFundTransOrderQueryModel queryModel = new AlipayFundTransOrderQueryModel(); + model.setOutBizNo(outBizNo); + return transferQuery(queryModel); + } + } + + + /** + * 单笔转账到支付宝账户 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayFundTransToaccountTransferModel} + * @return 转账是否成功 + * @throws AlipayApiException 支付宝 Api 异常 + */ + @Deprecated + public static boolean transfer(AlipayClient alipayClient, Boolean certModel, AlipayFundTransToaccountTransferModel model) throws AlipayApiException { + AlipayFundTransToaccountTransferResponse response = transferToResponse(model); + String result = response.getBody(); + if (response.isSuccess()) { + return true; + } else { + // 调用查询接口查询数据 + JSONObject jsonObject = JSONObject.parseObject(result); + String outBizNo = jsonObject.getJSONObject("alipay_fund_trans_toaccount_transfer_response").getString("out_biz_no"); + AlipayFundTransOrderQueryModel queryModel = new AlipayFundTransOrderQueryModel(); + model.setOutBizNo(outBizNo); + return transferQuery(alipayClient, certModel, queryModel); + } + } + + /** + * 单笔转账到支付宝账户 + * + * @param model {@link AlipayFundTransToaccountTransferModel} + * @return {@link AlipayFundTransToaccountTransferResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundTransToaccountTransferResponse transferToResponse(AlipayFundTransToaccountTransferModel model) throws AlipayApiException { + AlipayFundTransToaccountTransferRequest request = new AlipayFundTransToaccountTransferRequest(); + request.setBizModel(model); + return doExecute(request); + } + + + /** + * 单笔转账到支付宝账户 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayFundTransToaccountTransferModel} + * @return {@link AlipayFundTransToaccountTransferResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundTransToaccountTransferResponse transferToResponse(AlipayClient alipayClient, Boolean certModel, AlipayFundTransToaccountTransferModel model) throws AlipayApiException { + AlipayFundTransToaccountTransferRequest request = new AlipayFundTransToaccountTransferRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + /** + * 转账查询接口 + * + * @param model {@link AlipayFundTransOrderQueryModel} + * @return 是否存在此 + * @throws AlipayApiException 支付宝 Api 异常 + */ + @Deprecated + public static boolean transferQuery(AlipayFundTransOrderQueryModel model) throws AlipayApiException { + AlipayFundTransOrderQueryResponse response = transferQueryToResponse(model); + return response.isSuccess(); + } + + /** + * 转账查询接口 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayFundTransOrderQueryModel} + * @return 是否存在此 + * @throws AlipayApiException 支付宝 Api 异常 + */ + @Deprecated + public static boolean transferQuery(AlipayClient alipayClient, Boolean certModel, AlipayFundTransOrderQueryModel model) throws AlipayApiException { + AlipayFundTransOrderQueryResponse response = transferQueryToResponse(alipayClient, certModel, model); + return response.isSuccess(); + } + + /** + * 转账查询接口 + * + * @param model {@link AlipayFundTransOrderQueryModel} + * @return {@link AlipayFundTransOrderQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundTransOrderQueryResponse transferQueryToResponse(AlipayFundTransOrderQueryModel model) throws AlipayApiException { + AlipayFundTransOrderQueryRequest request = new AlipayFundTransOrderQueryRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 转账查询接口 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayFundTransOrderQueryModel} + * @return {@link AlipayFundTransOrderQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundTransOrderQueryResponse transferQueryToResponse(AlipayClient alipayClient, Boolean certModel, AlipayFundTransOrderQueryModel model) throws AlipayApiException { + AlipayFundTransOrderQueryRequest request = new AlipayFundTransOrderQueryRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + /** + * 统一转账接口 + * + * @param model model {@link AlipayFundTransUniTransferModel} + * @param appAuthToken 应用授权token + * @return {@link AlipayFundTransUniTransferResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundTransUniTransferResponse uniTransferToResponse(AlipayFundTransUniTransferModel model, String appAuthToken) throws AlipayApiException { + AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest(); + request.setBizModel(model); + if (!StringUtils.isEmpty(appAuthToken)) { + request.putOtherTextParam("app_auth_token", appAuthToken); + } + return doExecute(request); + } + + /** + * 统一转账接口 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model model {@link AlipayFundTransUniTransferModel} + * @param appAuthToken 应用授权token + * @return {@link AlipayFundTransUniTransferResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundTransUniTransferResponse uniTransferToResponse(AlipayClient alipayClient, Boolean certModel, AlipayFundTransUniTransferModel model, String appAuthToken) throws AlipayApiException { + AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest(); + request.setBizModel(model); + if (!StringUtils.isEmpty(appAuthToken)) { + request.putOtherTextParam("app_auth_token", appAuthToken); + } + return doExecute(alipayClient, certModel, request); + } + + /** + * 转账业务单据查询接口 + * + * @param model model {@link AlipayFundTransCommonQueryModel} + * @param appAuthToken 应用授权token + * @return {@link AlipayFundTransCommonQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundTransCommonQueryResponse transCommonQueryToResponse(AlipayFundTransCommonQueryModel model, String appAuthToken) throws AlipayApiException { + AlipayFundTransCommonQueryRequest request = new AlipayFundTransCommonQueryRequest(); + request.setBizModel(model); + if (!StringUtils.isEmpty(appAuthToken)) { + request.putOtherTextParam("app_auth_token", appAuthToken); + } + return doExecute(request); + } + + /** + * 转账业务单据查询接口 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model model {@link AlipayFundTransCommonQueryModel} + * @param appAuthToken 应用授权token + * @return {@link AlipayFundTransCommonQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundTransCommonQueryResponse transCommonQueryToResponse(AlipayClient alipayClient, Boolean certModel, AlipayFundTransCommonQueryModel model, String appAuthToken) throws AlipayApiException { + AlipayFundTransCommonQueryRequest request = new AlipayFundTransCommonQueryRequest(); + request.setBizModel(model); + if (!StringUtils.isEmpty(appAuthToken)) { + request.putOtherTextParam("app_auth_token", appAuthToken); + } + return doExecute(alipayClient, certModel, request); + } + + /** + * 支付宝资金账户资产查询接口 + * + * @param model model {@link AlipayFundAccountQueryModel} + * @param appAuthToken 应用授权token + * @return {@link AlipayFundAccountQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundAccountQueryResponse accountQueryToResponse(AlipayFundAccountQueryModel model, String appAuthToken) throws AlipayApiException { + AlipayFundAccountQueryRequest request = new AlipayFundAccountQueryRequest(); + request.setBizModel(model); + if (!StringUtils.isEmpty(appAuthToken)) { + request.putOtherTextParam("app_auth_token", appAuthToken); + } + return doExecute(request); + } + + + /** + * 支付宝资金账户资产查询接口 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model model {@link AlipayFundAccountQueryModel} + * @param appAuthToken 应用授权token + * @return {@link AlipayFundAccountQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundAccountQueryResponse accountQueryToResponse(AlipayClient alipayClient, Boolean certModel, AlipayFundAccountQueryModel model, String appAuthToken) throws AlipayApiException { + AlipayFundAccountQueryRequest request = new AlipayFundAccountQueryRequest(); + request.setBizModel(model); + if (!StringUtils.isEmpty(appAuthToken)) { + request.putOtherTextParam("app_auth_token", appAuthToken); + } + return doExecute(alipayClient, certModel, request); + } + + /** + * 统一收单线下交易查询接口 + * + * @param model {@link AlipayTradeQueryModel} + * @return {@link AlipayTradeQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeQueryResponse tradeQueryToResponse(AlipayTradeQueryModel model) throws AlipayApiException { + AlipayTradeQueryRequest request = new AlipayTradeQueryRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 统一收单线下交易查询接口 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayTradeQueryModel} + * @return {@link AlipayTradeQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeQueryResponse tradeQueryToResponse(AlipayClient alipayClient, Boolean certModel, AlipayTradeQueryModel model) throws AlipayApiException { + AlipayTradeQueryRequest request = new AlipayTradeQueryRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + /** + * 统一收单线下交易查询接口 + * + * @param model {@link AlipayTradeQueryModel} + * @param appAuthToken 应用授权token + * @return {@link AlipayTradeQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeQueryResponse tradeQueryToResponse(AlipayTradeQueryModel model, String appAuthToken) throws AlipayApiException { + AlipayTradeQueryRequest request = new AlipayTradeQueryRequest(); + request.setBizModel(model); + return execute(request, null, appAuthToken); + } + + /** + * 统一收单线下交易查询接口 + * + * @param alipayClient {@link AlipayClient} + * @param model {@link AlipayTradeQueryModel} + * @param appAuthToken 应用授权token + * @return {@link AlipayTradeQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeQueryResponse tradeQueryToResponse(AlipayClient alipayClient, AlipayTradeQueryModel model, String appAuthToken) throws AlipayApiException { + AlipayTradeQueryRequest request = new AlipayTradeQueryRequest(); + request.setBizModel(model); + return execute(alipayClient, request, null, appAuthToken); + } + + /** + * 统一收单交易撤销接口 + * + * @param model {@link AlipayTradeCancelModel} + * @param appAuthToken 应用授权token + * @return {@link AlipayTradeCancelResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeCancelResponse tradeCancelToResponse(AlipayTradeCancelModel model, String appAuthToken) throws AlipayApiException { + AlipayTradeCancelRequest request = new AlipayTradeCancelRequest(); + request.setBizModel(model); + return execute(request, null, appAuthToken); + } + + /** + * 统一收单交易撤销接口 + * + * @param alipayClient {@link AlipayClient} + * @param model {@link AlipayTradeCancelModel} + * @param appAuthToken 应用授权token + * @return {@link AlipayTradeCancelResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeCancelResponse tradeCancelToResponse(AlipayClient alipayClient, AlipayTradeCancelModel model, String appAuthToken) throws AlipayApiException { + AlipayTradeCancelRequest request = new AlipayTradeCancelRequest(); + request.setBizModel(model); + return execute(alipayClient, request, null, appAuthToken); + } + + /** + * 统一收单交易撤销接口 + * + * @param model {@link AlipayTradeCancelModel} + * @return {@link AlipayTradeCancelResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeCancelResponse tradeCancelToResponse(AlipayTradeCancelModel model) throws AlipayApiException { + AlipayTradeCancelRequest request = new AlipayTradeCancelRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 统一收单交易撤销接口 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayTradeCancelModel} + * @return {@link AlipayTradeCancelResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeCancelResponse tradeCancelToResponse(AlipayClient alipayClient, Boolean certModel, AlipayTradeCancelModel model) throws AlipayApiException { + AlipayTradeCancelRequest request = new AlipayTradeCancelRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + /** + * 统一收单交易关闭接口 + * + * @param model {@link AlipayTradeCloseModel} + * @param appAuthToken 应用授权token + * @return {@link AlipayTradeCloseResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeCloseResponse tradeCloseToResponse(AlipayTradeCloseModel model, String appAuthToken) throws AlipayApiException { + AlipayTradeCloseRequest request = new AlipayTradeCloseRequest(); + request.setBizModel(model); + return execute(request, null, appAuthToken); + + } + + /** + * 统一收单交易关闭接口 + * + * @param alipayClient {@link AlipayClient} + * @param model {@link AlipayTradeCloseModel} + * @param appAuthToken 应用授权token + * @return {@link AlipayTradeCloseResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeCloseResponse tradeCloseToResponse(AlipayClient alipayClient, AlipayTradeCloseModel model, String appAuthToken) throws AlipayApiException { + AlipayTradeCloseRequest request = new AlipayTradeCloseRequest(); + request.setBizModel(model); + return execute(alipayClient, request, null, appAuthToken); + + } + + /** + * 统一收单交易关闭接口 + * + * @param model {@link AlipayTradeCloseModel} + * @return {@link AlipayTradeCloseResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeCloseResponse tradeCloseToResponse(AlipayTradeCloseModel model) throws AlipayApiException { + AlipayTradeCloseRequest request = new AlipayTradeCloseRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 统一收单交易关闭接口 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayTradeCloseModel} + * @return {@link AlipayTradeCloseResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeCloseResponse tradeCloseToResponse(AlipayClient alipayClient, Boolean certModel, AlipayTradeCloseModel model) throws AlipayApiException { + AlipayTradeCloseRequest request = new AlipayTradeCloseRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + /** + * 统一收单交易创建接口 + * + * @param model {@link AlipayTradeCreateModel} + * @param notifyUrl 异步通知URL + * @return {@link AlipayTradeCreateResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeCreateResponse tradeCreateToResponse(AlipayTradeCreateModel model, String notifyUrl) throws AlipayApiException { + AlipayTradeCreateRequest request = new AlipayTradeCreateRequest(); + request.setBizModel(model); + request.setNotifyUrl(notifyUrl); + return doExecute(request); + } + + /** + * 统一收单交易创建接口 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayTradeCreateModel} + * @param notifyUrl 异步通知URL + * @return {@link AlipayTradeCreateResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeCreateResponse tradeCreateToResponse(AlipayClient alipayClient, Boolean certModel, AlipayTradeCreateModel model, String notifyUrl) throws AlipayApiException { + AlipayTradeCreateRequest request = new AlipayTradeCreateRequest(); + request.setBizModel(model); + request.setNotifyUrl(notifyUrl); + return doExecute(alipayClient, certModel, request); + } + + /** + * 统一收单交易创建接口 + * + * @param model {@link AlipayTradeCreateModel} + * @param notifyUrl 异步通知URL + * @param appAuthToken 应用授权token + * @return {@link AlipayTradeCreateResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeCreateResponse tradeCreateToResponse(AlipayTradeCreateModel model, String notifyUrl, String appAuthToken) throws AlipayApiException { + AlipayTradeCreateRequest request = new AlipayTradeCreateRequest(); + request.setBizModel(model); + request.setNotifyUrl(notifyUrl); + return execute(request, null, appAuthToken); + } + + /** + * 统一收单交易创建接口 + * + * @param alipayClient {@link AlipayClient} + * @param model {@link AlipayTradeCreateModel} + * @param notifyUrl 异步通知URL + * @param appAuthToken 应用授权token + * @return {@link AlipayTradeCreateResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeCreateResponse tradeCreateToResponse(AlipayClient alipayClient, AlipayTradeCreateModel model, String notifyUrl, String appAuthToken) throws AlipayApiException { + AlipayTradeCreateRequest request = new AlipayTradeCreateRequest(); + request.setBizModel(model); + request.setNotifyUrl(notifyUrl); + return execute(alipayClient, request, null, appAuthToken); + } + + /** + * 统一收单交易退款接口 + * + * @param model {@link AlipayTradeRefundModel} + * @return {@link AlipayTradeRefundResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeRefundResponse tradeRefundToResponse(AlipayTradeRefundModel model) throws AlipayApiException { + AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 统一收单交易退款接口 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayTradeRefundModel} + * @return {@link AlipayTradeRefundResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeRefundResponse tradeRefundToResponse(AlipayClient alipayClient, Boolean certModel, AlipayTradeRefundModel model) throws AlipayApiException { + AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + /** + * 统一收单交易退款接口 + * + * @param model {@link AlipayTradeRefundModel} + * @param appAuthToken 应用授权token + * @return {@link AlipayTradeRefundResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeRefundResponse tradeRefundToResponse(AlipayTradeRefundModel model, String appAuthToken) throws AlipayApiException { + AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); + request.setBizModel(model); + return execute(request, null, appAuthToken); + } + + /** + * 统一收单交易退款接口 + * + * @param alipayClient {@link AlipayClient} + * @param model {@link AlipayTradeRefundModel} + * @param appAuthToken 应用授权token + * @return {@link AlipayTradeRefundResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeRefundResponse tradeRefundToResponse(AlipayClient alipayClient, AlipayTradeRefundModel model, String appAuthToken) throws AlipayApiException { + AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); + request.setBizModel(model); + return execute(alipayClient, request, null, appAuthToken); + } + + /** + * 统一收单退款页面接口 + * + * @param model {@link AlipayTradePageRefundModel} + * @return {@link AlipayTradePageRefundResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradePageRefundResponse tradeRefundToResponse(AlipayTradePageRefundModel model) throws AlipayApiException { + AlipayTradePageRefundRequest request = new AlipayTradePageRefundRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 统一收单退款页面接口 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayTradePageRefundModel} + * @return {@link AlipayTradePageRefundResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradePageRefundResponse tradeRefundToResponse(AlipayClient alipayClient, Boolean certModel, AlipayTradePageRefundModel model) throws AlipayApiException { + AlipayTradePageRefundRequest request = new AlipayTradePageRefundRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + + /** + * 统一收单退款页面接口 + * + * @param model {@link AlipayTradePageRefundModel} + * @param appAuthToken 应用授权token + * @return {@link AlipayTradePageRefundResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradePageRefundResponse tradeRefundToResponse(AlipayTradePageRefundModel model, String appAuthToken) throws AlipayApiException { + AlipayTradePageRefundRequest request = new AlipayTradePageRefundRequest(); + request.setBizModel(model); + return execute(request, null, appAuthToken); + } + + /** + * 统一收单退款页面接口 + * + * @param alipayClient {@link AlipayClient} + * @param model {@link AlipayTradePageRefundModel} + * @param appAuthToken 应用授权token + * @return {@link AlipayTradePageRefundResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradePageRefundResponse tradeRefundToResponse(AlipayClient alipayClient, AlipayTradePageRefundModel model, String appAuthToken) throws AlipayApiException { + AlipayTradePageRefundRequest request = new AlipayTradePageRefundRequest(); + request.setBizModel(model); + return execute(alipayClient, request, null, appAuthToken); + } + + /** + * 统一收单交易退款查询 + * + * @param model {@link AlipayTradeFastpayRefundQueryModel} + * @return {@link AlipayTradeFastpayRefundQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeFastpayRefundQueryResponse tradeRefundQueryToResponse(AlipayTradeFastpayRefundQueryModel model) throws AlipayApiException { + AlipayTradeFastpayRefundQueryRequest request = new AlipayTradeFastpayRefundQueryRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 统一收单交易退款查询 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayTradeFastpayRefundQueryModel} + * @return {@link AlipayTradeFastpayRefundQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeFastpayRefundQueryResponse tradeRefundQueryToResponse(AlipayClient alipayClient, Boolean certModel, AlipayTradeFastpayRefundQueryModel model) throws AlipayApiException { + AlipayTradeFastpayRefundQueryRequest request = new AlipayTradeFastpayRefundQueryRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + /** + * 统一收单交易退款查询 + * + * @param model {@link AlipayTradeFastpayRefundQueryModel} + * @param appAuthToken 应用授权token + * @return {@link AlipayTradeFastpayRefundQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeFastpayRefundQueryResponse tradeRefundQueryToResponse(AlipayTradeFastpayRefundQueryModel model, String appAuthToken) throws AlipayApiException { + AlipayTradeFastpayRefundQueryRequest request = new AlipayTradeFastpayRefundQueryRequest(); + request.setBizModel(model); + return execute(request, null, appAuthToken); + } + + /** + * 统一收单交易退款查询 + * + * @param alipayClient {@link AlipayClient} + * @param model {@link AlipayTradeFastpayRefundQueryModel} + * @param appAuthToken 应用授权token + * @return {@link AlipayTradeFastpayRefundQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeFastpayRefundQueryResponse tradeRefundQueryToResponse(AlipayClient alipayClient, AlipayTradeFastpayRefundQueryModel model, String appAuthToken) throws AlipayApiException { + AlipayTradeFastpayRefundQueryRequest request = new AlipayTradeFastpayRefundQueryRequest(); + request.setBizModel(model); + return execute(alipayClient, request, null, appAuthToken); + } + + /** + * 查询对账单下载地址 + * + * @param model {@link AlipayDataDataserviceBillDownloadurlQueryModel} + * @return 对账单下载地址 + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static String billDownloadUrlQuery(AlipayDataDataserviceBillDownloadurlQueryModel model) throws AlipayApiException { + AlipayDataDataserviceBillDownloadurlQueryResponse response = billDownloadUrlQueryToResponse(model); + return response.getBillDownloadUrl(); + } + + /** + * 查询对账单下载地址 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayDataDataserviceBillDownloadurlQueryModel} + * @return 对账单下载地址 + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static String billDownloadUrlQuery(AlipayClient alipayClient, Boolean certModel, AlipayDataDataserviceBillDownloadurlQueryModel model) throws AlipayApiException { + AlipayDataDataserviceBillDownloadurlQueryResponse response = billDownloadUrlQueryToResponse(alipayClient, certModel, model); + return response.getBillDownloadUrl(); + } + + /** + * 查询对账单下载地址 + * + * @param model {@link AlipayDataDataserviceBillDownloadurlQueryModel} + * @return {@link AlipayDataDataserviceBillDownloadurlQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayDataDataserviceBillDownloadurlQueryResponse billDownloadUrlQueryToResponse(AlipayDataDataserviceBillDownloadurlQueryModel model) throws AlipayApiException { + AlipayDataDataserviceBillDownloadurlQueryRequest request = new AlipayDataDataserviceBillDownloadurlQueryRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 查询对账单下载地址 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayDataDataserviceBillDownloadurlQueryModel} + * @return {@link AlipayDataDataserviceBillDownloadurlQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayDataDataserviceBillDownloadurlQueryResponse billDownloadUrlQueryToResponse(AlipayClient alipayClient, Boolean certModel, AlipayDataDataserviceBillDownloadurlQueryModel model) throws AlipayApiException { + AlipayDataDataserviceBillDownloadurlQueryRequest request = new AlipayDataDataserviceBillDownloadurlQueryRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + /** + * 查询对账单下载地址 + * + * @param model {@link AlipayDataDataserviceBillDownloadurlQueryModel} + * @param appAuthToken 应用授权token + * @return {@link AlipayDataDataserviceBillDownloadurlQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayDataDataserviceBillDownloadurlQueryResponse billDownloadUrlQueryToResponse(AlipayDataDataserviceBillDownloadurlQueryModel model, String appAuthToken) + throws AlipayApiException { + AlipayDataDataserviceBillDownloadurlQueryRequest request = new AlipayDataDataserviceBillDownloadurlQueryRequest(); + request.setBizModel(model); + request.putOtherTextParam("app_auth_token", appAuthToken); + return doExecute(request); + } + + /** + * 查询对账单下载地址 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayDataDataserviceBillDownloadurlQueryModel} + * @param appAuthToken 应用授权token + * @return {@link AlipayDataDataserviceBillDownloadurlQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayDataDataserviceBillDownloadurlQueryResponse billDownloadUrlQueryToResponse(AlipayClient alipayClient, Boolean certModel, AlipayDataDataserviceBillDownloadurlQueryModel model, String appAuthToken) + throws AlipayApiException { + AlipayDataDataserviceBillDownloadurlQueryRequest request = new AlipayDataDataserviceBillDownloadurlQueryRequest(); + request.setBizModel(model); + request.putOtherTextParam("app_auth_token", appAuthToken); + return doExecute(alipayClient, certModel, request); + } + + /** + * 统一收单交易结算接口 + * + * @param model {@link AlipayTradeOrderSettleModel} + * @param appAuthToken 应用授权token + * @return {@link AlipayTradeOrderSettleResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeOrderSettleResponse tradeOrderSettleToResponse(AlipayTradeOrderSettleModel model, String appAuthToken) throws AlipayApiException { + AlipayTradeOrderSettleRequest request = new AlipayTradeOrderSettleRequest(); + request.setBizModel(model); + return execute(request, null, appAuthToken); + } + + /** + * 统一收单交易结算接口 + * + * @param alipayClient {@link AlipayClient} + * @param model {@link AlipayTradeOrderSettleModel} + * @param appAuthToken 应用授权token + * @return {@link AlipayTradeOrderSettleResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeOrderSettleResponse tradeOrderSettleToResponse(AlipayClient alipayClient, AlipayTradeOrderSettleModel model, String appAuthToken) throws AlipayApiException { + AlipayTradeOrderSettleRequest request = new AlipayTradeOrderSettleRequest(); + request.setBizModel(model); + return execute(alipayClient, request, null, appAuthToken); + } + + /** + * 统一收单交易结算接口 + * + * @param model {@link AlipayTradeOrderSettleModel} + * @return {@link AlipayTradeOrderSettleResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeOrderSettleResponse tradeOrderSettleToResponse(AlipayTradeOrderSettleModel model) throws AlipayApiException { + AlipayTradeOrderSettleRequest request = new AlipayTradeOrderSettleRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 统一收单交易结算接口 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayTradeOrderSettleModel} + * @return {@link AlipayTradeOrderSettleResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeOrderSettleResponse tradeOrderSettleToResponse(AlipayClient alipayClient, Boolean certModel, AlipayTradeOrderSettleModel model) throws AlipayApiException { + AlipayTradeOrderSettleRequest request = new AlipayTradeOrderSettleRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + /** + * 电脑网站支付(PC支付) + * + * @param response {@link HttpServletResponse} + * @param model {@link AlipayTradePagePayModel} + * @param notifyUrl 异步通知URL + * @param returnUrl 同步通知URL + * @throws AlipayApiException 支付宝 Api 异常 + * @throws IOException IO 异常 + */ + public static void tradePage(HttpServletResponse response, AlipayTradePagePayModel model, String notifyUrl, String returnUrl) throws AlipayApiException, IOException { + AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); + request.setBizModel(model); + request.setNotifyUrl(notifyUrl); + request.setReturnUrl(returnUrl); + String form = pageExecute(request).getBody(); + response.setContentType("text/html;charset=" + AliPayApiConfigKit.getAliPayApiConfig().getCharset()); + PrintWriter out = response.getWriter(); + out.write(form); + out.flush(); + out.close(); + } + + /** + * 电脑网站支付(PC支付) + * + * @param response {@link HttpServletResponse} + * @param method GET/POST GET 返回url,POST 返回 FORM 参考文章 + * @param model {@link AlipayTradePagePayModel} + * @param notifyUrl 异步通知URL + * @param returnUrl 同步通知URL + * @throws AlipayApiException 支付宝 Api 异常 + * @throws IOException IO 异常 + */ + public static void tradePage(HttpServletResponse response, String method, AlipayTradePagePayModel model, String notifyUrl, String returnUrl) throws AlipayApiException, IOException { + AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); + request.setBizModel(model); + request.setNotifyUrl(notifyUrl); + request.setReturnUrl(returnUrl); + String form = pageExecute(request, method).getBody(); + response.setContentType("text/html;charset=" + AliPayApiConfigKit.getAliPayApiConfig().getCharset()); + PrintWriter out = response.getWriter(); + out.write(form); + out.flush(); + out.close(); + } + + /** + * 电脑网站支付(PC支付) + * + * @param alipayClient {@link AlipayClient} + * @param response {@link HttpServletResponse} + * @param model {@link AlipayTradePagePayModel} + * @param notifyUrl 异步通知URL + * @param returnUrl 同步通知URL + * @throws AlipayApiException 支付宝 Api 异常 + * @throws IOException IO 异常 + */ + public static void tradePage(AlipayClient alipayClient, HttpServletResponse response, AlipayTradePagePayModel model, String notifyUrl, String returnUrl) throws AlipayApiException, IOException { + AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); + request.setBizModel(model); + request.setNotifyUrl(notifyUrl); + request.setReturnUrl(returnUrl); + String form = pageExecute(alipayClient, request).getBody(); + String charset = "UTF-8"; + response.setContentType("text/html;charset=" + charset); + PrintWriter out = response.getWriter(); + out.write(form); + out.flush(); + out.close(); + } + + /** + * 电脑网站支付(PC支付) + * + * @param alipayClient {@link AlipayClient} + * @param response {@link HttpServletResponse} + * @param method GET/POST GET 返回url,POST 返回 FORM 参考文章 + * @param model {@link AlipayTradePagePayModel} + * @param notifyUrl 异步通知URL + * @param returnUrl 同步通知URL + * @throws AlipayApiException 支付宝 Api 异常 + * @throws IOException IO 异常 + */ + public static void tradePage(AlipayClient alipayClient, HttpServletResponse response, String method, AlipayTradePagePayModel model, String notifyUrl, String returnUrl) throws AlipayApiException, IOException { + AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); + request.setBizModel(model); + request.setNotifyUrl(notifyUrl); + request.setReturnUrl(returnUrl); + String form = pageExecute(alipayClient, request, method).getBody(); + String charset = "UTF-8"; + response.setContentType("text/html;charset=" + charset); + PrintWriter out = response.getWriter(); + out.write(form); + out.flush(); + out.close(); + } + + + /** + * 电脑网站支付(PC支付) + * + * @param response {@link HttpServletResponse} + * @param model {@link AlipayTradePagePayModel} + * @param notifyUrl 异步通知URL + * @param returnUrl 同步通知URL + * @param appAuthToken 应用授权token + * @throws AlipayApiException 支付宝 Api 异常 + * @throws IOException IO 异常 + */ + public static void tradePage(HttpServletResponse response, AlipayTradePagePayModel model, String notifyUrl, String returnUrl, String appAuthToken) throws AlipayApiException, IOException { + AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); + request.setBizModel(model); + request.setNotifyUrl(notifyUrl); + request.setReturnUrl(returnUrl); + request.putOtherTextParam("app_auth_token", appAuthToken); + String form = pageExecute(request).getBody(); + response.setContentType("text/html;charset=" + AliPayApiConfigKit.getAliPayApiConfig().getCharset()); + PrintWriter out = response.getWriter(); + out.write(form); + out.flush(); + out.close(); + } + + /** + * 电脑网站支付(PC支付) + * + * @param alipayClient {@link AlipayClient} + * @param response {@link HttpServletResponse} + * @param model {@link AlipayTradePagePayModel} + * @param notifyUrl 异步通知URL + * @param returnUrl 同步通知URL + * @param appAuthToken 应用授权token + * @throws AlipayApiException 支付宝 Api 异常 + * @throws IOException IO 异常 + */ + public static void tradePage(AlipayClient alipayClient, HttpServletResponse response, AlipayTradePagePayModel model, String notifyUrl, String returnUrl, String appAuthToken) throws AlipayApiException, IOException { + AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); + request.setBizModel(model); + request.setNotifyUrl(notifyUrl); + request.setReturnUrl(returnUrl); + request.putOtherTextParam("app_auth_token", appAuthToken); + String form = pageExecute(alipayClient, request).getBody(); + String charset = "UTF-8"; + response.setContentType("text/html;charset=" + charset); + PrintWriter out = response.getWriter(); + out.write(form); + out.flush(); + out.close(); + } + + /** + * 电脑网站支付(PC支付) + * + * @param response {@link HttpServletResponse} + * @param model {@link AlipayTradePagePayModel} + * @param notifyUrl 异步通知URL + * @param returnUrl 同步通知URL + * @throws AlipayApiException 支付宝 Api 异常 + * @throws IOException IO 异常 + */ + public static void tradePageByOutputStream(HttpServletResponse response, AlipayTradePagePayModel model, String notifyUrl, String returnUrl) throws AlipayApiException, IOException { + AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); + request.setBizModel(model); + request.setNotifyUrl(notifyUrl); + request.setReturnUrl(returnUrl); + String form = pageExecute(request).getBody(); + response.setContentType("text/html;charset=" + AliPayApiConfigKit.getAliPayApiConfig().getCharset()); + OutputStream out = response.getOutputStream(); + out.write(form.getBytes(AliPayApiConfigKit.getAliPayApiConfig().getCharset())); + response.getOutputStream().flush(); + } + + /** + * 电脑网站支付(PC支付) + * + * @param alipayClient {@link AlipayClient} + * @param response {@link HttpServletResponse} + * @param model {@link AlipayTradePagePayModel} + * @param notifyUrl 异步通知URL + * @param returnUrl 同步通知URL + * @throws AlipayApiException 支付宝 Api 异常 + * @throws IOException IO 异常 + */ + public static void tradePageByOutputStream(AlipayClient alipayClient, HttpServletResponse response, AlipayTradePagePayModel model, String notifyUrl, String returnUrl) throws AlipayApiException, IOException { + AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); + request.setBizModel(model); + request.setNotifyUrl(notifyUrl); + request.setReturnUrl(returnUrl); + String form = pageExecute(alipayClient, request).getBody(); + String charset = "UTF-8"; + response.setContentType("text/html;charset=" + charset); + OutputStream out = response.getOutputStream(); + out.write(form.getBytes(charset)); + response.getOutputStream().flush(); + } + + + /** + * 电脑网站支付(PC支付) + * + * @param response {@link HttpServletResponse} + * @param model {@link AlipayTradePagePayModel} + * @param notifyUrl 异步通知URL + * @param returnUrl 同步通知URL + * @param appAuthToken 应用授权token + * @throws AlipayApiException 支付宝 Api 异常 + * @throws IOException IO 异常 + */ + public static void tradePageByOutputStream(HttpServletResponse response, AlipayTradePagePayModel model, String notifyUrl, String returnUrl, String appAuthToken) + throws AlipayApiException, IOException { + AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); + request.setBizModel(model); + request.setNotifyUrl(notifyUrl); + request.setReturnUrl(returnUrl); + request.putOtherTextParam("app_auth_token", appAuthToken); + String form = pageExecute(request).getBody(); + response.setContentType("text/html;charset=" + AliPayApiConfigKit.getAliPayApiConfig().getCharset()); + OutputStream out = response.getOutputStream(); + out.write(form.getBytes(AliPayApiConfigKit.getAliPayApiConfig().getCharset())); + response.getOutputStream().flush(); + } + + /** + * 电脑网站支付(PC支付) + * + * @param alipayClient {@link AlipayClient} + * @param response {@link HttpServletResponse} + * @param model {@link AlipayTradePagePayModel} + * @param notifyUrl 异步通知URL + * @param returnUrl 同步通知URL + * @param appAuthToken 应用授权token + * @throws AlipayApiException 支付宝 Api 异常 + * @throws IOException IO 异常 + */ + public static void tradePageByOutputStream(AlipayClient alipayClient, HttpServletResponse response, AlipayTradePagePayModel model, String notifyUrl, String returnUrl, String appAuthToken) + throws AlipayApiException, IOException { + AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); + request.setBizModel(model); + request.setNotifyUrl(notifyUrl); + request.setReturnUrl(returnUrl); + request.putOtherTextParam("app_auth_token", appAuthToken); + String form = pageExecute(alipayClient, request).getBody(); + String charset = "UTF-8"; + response.setContentType("text/html;charset=" + charset); + OutputStream out = response.getOutputStream(); + out.write(form.getBytes(charset)); + response.getOutputStream().flush(); + } + + /** + * 资金预授权冻结接口 + * + * @param model {@link AlipayFundAuthOrderFreezeModel} + * @return {@link AlipayFundAuthOrderFreezeResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundAuthOrderFreezeResponse authOrderFreezeToResponse(AlipayFundAuthOrderFreezeModel model) throws AlipayApiException { + AlipayFundAuthOrderFreezeRequest request = new AlipayFundAuthOrderFreezeRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 资金预授权冻结接口 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayFundAuthOrderFreezeModel} + * @return {@link AlipayFundAuthOrderFreezeResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundAuthOrderFreezeResponse authOrderFreezeToResponse(AlipayClient alipayClient, Boolean certModel, AlipayFundAuthOrderFreezeModel model) throws AlipayApiException { + AlipayFundAuthOrderFreezeRequest request = new AlipayFundAuthOrderFreezeRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + + /** + * 资金授权解冻接口 + * + * @param model {@link AlipayFundAuthOrderUnfreezeModel} + * @return {@link AlipayFundAuthOrderUnfreezeResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundAuthOrderUnfreezeResponse authOrderUnfreezeToResponse(AlipayFundAuthOrderUnfreezeModel model) throws AlipayApiException { + AlipayFundAuthOrderUnfreezeRequest request = new AlipayFundAuthOrderUnfreezeRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 资金授权解冻接口 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayFundAuthOrderUnfreezeModel} + * @return {@link AlipayFundAuthOrderUnfreezeResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundAuthOrderUnfreezeResponse authOrderUnfreezeToResponse(AlipayClient alipayClient, Boolean certModel, AlipayFundAuthOrderUnfreezeModel model) throws AlipayApiException { + AlipayFundAuthOrderUnfreezeRequest request = new AlipayFundAuthOrderUnfreezeRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + /** + * 资金预授权冻结接口 + * + * @param model {@link AlipayFundAuthOrderVoucherCreateModel} + * @return {@link AlipayFundAuthOrderVoucherCreateResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundAuthOrderVoucherCreateResponse authOrderVoucherCreateToResponse(AlipayFundAuthOrderVoucherCreateModel model) throws AlipayApiException { + AlipayFundAuthOrderVoucherCreateRequest request = new AlipayFundAuthOrderVoucherCreateRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 资金预授权冻结接口 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayFundAuthOrderVoucherCreateModel} + * @return {@link AlipayFundAuthOrderVoucherCreateResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundAuthOrderVoucherCreateResponse authOrderVoucherCreateToResponse(AlipayClient alipayClient, Boolean certModel, AlipayFundAuthOrderVoucherCreateModel model) throws AlipayApiException { + AlipayFundAuthOrderVoucherCreateRequest request = new AlipayFundAuthOrderVoucherCreateRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + + /** + * 资金授权撤销接口 + * + * @param model {@link AlipayFundAuthOperationCancelModel} + * @return {@link AlipayFundAuthOperationCancelResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundAuthOperationCancelResponse authOperationCancelToResponse(AlipayFundAuthOperationCancelModel model) throws AlipayApiException { + AlipayFundAuthOperationCancelRequest request = new AlipayFundAuthOperationCancelRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 资金授权撤销接口 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayFundAuthOperationCancelModel} + * @return {@link AlipayFundAuthOperationCancelResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundAuthOperationCancelResponse authOperationCancelToResponse(AlipayClient alipayClient, Boolean certModel, AlipayFundAuthOperationCancelModel model) throws AlipayApiException { + AlipayFundAuthOperationCancelRequest request = new AlipayFundAuthOperationCancelRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + /** + * 资金授权操作查询接口 + * + * @param model {@link AlipayFundAuthOperationDetailQueryModel} + * @return {@link AlipayFundAuthOperationDetailQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundAuthOperationDetailQueryResponse authOperationDetailQueryToResponse(AlipayFundAuthOperationDetailQueryModel model) throws AlipayApiException { + AlipayFundAuthOperationDetailQueryRequest request = new AlipayFundAuthOperationDetailQueryRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 资金授权操作查询接口 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayFundAuthOperationDetailQueryModel} + * @return {@link AlipayFundAuthOperationDetailQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundAuthOperationDetailQueryResponse authOperationDetailQueryToResponse(AlipayClient alipayClient, Boolean certModel, AlipayFundAuthOperationDetailQueryModel model) throws AlipayApiException { + AlipayFundAuthOperationDetailQueryRequest request = new AlipayFundAuthOperationDetailQueryRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + /** + * 红包无线支付接口 + * + * @param model {@link AlipayFundCouponOrderAppPayModel} + * @return {@link AlipayFundCouponOrderAppPayResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundCouponOrderAppPayResponse fundCouponOrderAppPayToResponse(AlipayFundCouponOrderAppPayModel model) throws AlipayApiException { + AlipayFundCouponOrderAppPayRequest request = new AlipayFundCouponOrderAppPayRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 红包无线支付接口 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayFundCouponOrderAppPayModel} + * @return {@link AlipayFundCouponOrderAppPayResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundCouponOrderAppPayResponse fundCouponOrderAppPayToResponse(AlipayClient alipayClient, Boolean certModel, AlipayFundCouponOrderAppPayModel model) throws AlipayApiException { + AlipayFundCouponOrderAppPayRequest request = new AlipayFundCouponOrderAppPayRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + + /** + * 红包页面支付接口 + * + * @param model {@link AlipayFundCouponOrderPagePayModel} + * @return {@link AlipayFundCouponOrderPagePayResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundCouponOrderPagePayResponse fundCouponOrderPagePayToResponse(AlipayFundCouponOrderPagePayModel model) throws AlipayApiException { + AlipayFundCouponOrderPagePayRequest request = new AlipayFundCouponOrderPagePayRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 红包页面支付接口 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayFundCouponOrderPagePayModel} + * @return {@link AlipayFundCouponOrderPagePayResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundCouponOrderPagePayResponse fundCouponOrderPagePayToResponse(AlipayClient alipayClient, Boolean certModel, AlipayFundCouponOrderPagePayModel model) throws AlipayApiException { + AlipayFundCouponOrderPagePayRequest request = new AlipayFundCouponOrderPagePayRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + + /** + * 红包协议支付接口 + * + * @param model {@link AlipayFundCouponOrderAgreementPayModel} + * @return {@link AlipayFundCouponOrderAgreementPayResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundCouponOrderAgreementPayResponse fundCouponOrderAgreementPayToResponse(AlipayFundCouponOrderAgreementPayModel model) throws AlipayApiException { + AlipayFundCouponOrderAgreementPayRequest request = new AlipayFundCouponOrderAgreementPayRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 红包协议支付接口 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayFundCouponOrderAgreementPayModel} + * @return {@link AlipayFundCouponOrderAgreementPayResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundCouponOrderAgreementPayResponse fundCouponOrderAgreementPayToResponse(AlipayClient alipayClient, Boolean certModel, AlipayFundCouponOrderAgreementPayModel model) throws AlipayApiException { + AlipayFundCouponOrderAgreementPayRequest request = new AlipayFundCouponOrderAgreementPayRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + /** + * 红包打款接口 + * + * @param model {@link AlipayFundCouponOrderDisburseModel} + * @return {@link AlipayFundCouponOrderDisburseResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundCouponOrderDisburseResponse fundCouponOrderDisburseToResponse(AlipayFundCouponOrderDisburseModel model) throws AlipayApiException { + AlipayFundCouponOrderDisburseRequest request = new AlipayFundCouponOrderDisburseRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 红包打款接口 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayFundCouponOrderDisburseModel} + * @return {@link AlipayFundCouponOrderDisburseResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundCouponOrderDisburseResponse fundCouponOrderDisburseToResponse(AlipayClient alipayClient, Boolean certModel, AlipayFundCouponOrderDisburseModel model) throws AlipayApiException { + AlipayFundCouponOrderDisburseRequest request = new AlipayFundCouponOrderDisburseRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + /** + * 红包退回接口 + * + * @param model {@link AlipayFundCouponOrderRefundModel} + * @return {@link AlipayFundCouponOrderRefundResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundCouponOrderRefundResponse fundCouponOrderRefundToResponse(AlipayFundCouponOrderRefundModel model) throws AlipayApiException { + AlipayFundCouponOrderRefundRequest request = new AlipayFundCouponOrderRefundRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 红包退回接口 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayFundCouponOrderRefundModel} + * @return {@link AlipayFundCouponOrderRefundResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundCouponOrderRefundResponse fundCouponOrderRefundToResponse(AlipayClient alipayClient, Boolean certModel, AlipayFundCouponOrderRefundModel model) throws AlipayApiException { + AlipayFundCouponOrderRefundRequest request = new AlipayFundCouponOrderRefundRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + /** + * 红包退回接口 + * + * @param model {@link AlipayFundCouponOperationQueryModel} + * @return {@link AlipayFundCouponOperationQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundCouponOperationQueryResponse fundCouponOperationQueryToResponse(AlipayFundCouponOperationQueryModel model) throws AlipayApiException { + AlipayFundCouponOperationQueryRequest request = new AlipayFundCouponOperationQueryRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 红包退回接口 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayFundCouponOperationQueryModel} + * @return {@link AlipayFundCouponOperationQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayFundCouponOperationQueryResponse fundCouponOperationQueryToResponse(AlipayClient alipayClient, Boolean certModel, AlipayFundCouponOperationQueryModel model) throws AlipayApiException { + AlipayFundCouponOperationQueryRequest request = new AlipayFundCouponOperationQueryRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + /** + * 应用授权 URL 拼装 + * + * @param appId 应用编号 + * @param redirectUri 回调 URI + * @return 应用授权 URL + * @throws UnsupportedEncodingException 编码异常 + */ + public static String getOauth2Url(String appId, String redirectUri) throws UnsupportedEncodingException { + return new StringBuffer().append("https://openauth.alipay.com/oauth2/appToAppAuth.htm?app_id=").append(appId).append("&redirect_uri=").append(URLEncoder.encode(redirectUri, "UTF-8")) + .toString(); + } + + /** + * 使用 app_auth_code 换取 app_auth_token + * + * @param model {@link AlipayOpenAuthTokenAppModel} + * @return {@link AlipayOpenAuthTokenAppResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayOpenAuthTokenAppResponse openAuthTokenAppToResponse(AlipayOpenAuthTokenAppModel model) throws AlipayApiException { + AlipayOpenAuthTokenAppRequest request = new AlipayOpenAuthTokenAppRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 使用 app_auth_code 换取 app_auth_token + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayOpenAuthTokenAppModel} + * @return {@link AlipayOpenAuthTokenAppResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayOpenAuthTokenAppResponse openAuthTokenAppToResponse(AlipayClient alipayClient, Boolean certModel, AlipayOpenAuthTokenAppModel model) throws AlipayApiException { + AlipayOpenAuthTokenAppRequest request = new AlipayOpenAuthTokenAppRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + /** + * 查询授权信息 + * + * @param model {@link AlipayOpenAuthTokenAppQueryModel} + * @return {@link AlipayOpenAuthTokenAppQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayOpenAuthTokenAppQueryResponse openAuthTokenAppQueryToResponse(AlipayOpenAuthTokenAppQueryModel model) throws AlipayApiException { + AlipayOpenAuthTokenAppQueryRequest request = new AlipayOpenAuthTokenAppQueryRequest(); + request.setBizModel(model); + return doExecute(request); + } + + + /** + * 查询授权信息 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayOpenAuthTokenAppQueryModel} + * @return {@link AlipayOpenAuthTokenAppQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayOpenAuthTokenAppQueryResponse openAuthTokenAppQueryToResponse(AlipayClient alipayClient, Boolean certModel, AlipayOpenAuthTokenAppQueryModel model) throws AlipayApiException { + AlipayOpenAuthTokenAppQueryRequest request = new AlipayOpenAuthTokenAppQueryRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + /** + * 地铁购票发码 + * + * @param model {@link AlipayCommerceCityfacilitatorVoucherGenerateModel} + * @return {@link AlipayCommerceCityfacilitatorVoucherGenerateResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayCommerceCityfacilitatorVoucherGenerateResponse voucherGenerateToResponse(AlipayCommerceCityfacilitatorVoucherGenerateModel model) throws AlipayApiException { + AlipayCommerceCityfacilitatorVoucherGenerateRequest request = new AlipayCommerceCityfacilitatorVoucherGenerateRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 地铁购票发码 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayCommerceCityfacilitatorVoucherGenerateModel} + * @return {@link AlipayCommerceCityfacilitatorVoucherGenerateResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayCommerceCityfacilitatorVoucherGenerateResponse voucherGenerateToResponse(AlipayClient alipayClient, Boolean certModel, AlipayCommerceCityfacilitatorVoucherGenerateModel model) throws AlipayApiException { + AlipayCommerceCityfacilitatorVoucherGenerateRequest request = new AlipayCommerceCityfacilitatorVoucherGenerateRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + + /** + * 地铁购票发码退款 + * + * @param model {@link AlipayCommerceCityfacilitatorVoucherRefundModel} + * @return {@link AlipayCommerceCityfacilitatorVoucherRefundResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayCommerceCityfacilitatorVoucherRefundResponse metroRefundToResponse(AlipayCommerceCityfacilitatorVoucherRefundModel model) throws AlipayApiException { + AlipayCommerceCityfacilitatorVoucherRefundRequest request = new AlipayCommerceCityfacilitatorVoucherRefundRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 地铁购票发码退款 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayCommerceCityfacilitatorVoucherRefundModel} + * @return {@link AlipayCommerceCityfacilitatorVoucherRefundResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayCommerceCityfacilitatorVoucherRefundResponse metroRefundToResponse(AlipayClient alipayClient, Boolean certModel, AlipayCommerceCityfacilitatorVoucherRefundModel model) throws AlipayApiException { + AlipayCommerceCityfacilitatorVoucherRefundRequest request = new AlipayCommerceCityfacilitatorVoucherRefundRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + /** + * 地铁车站数据查询 + * + * @param model {@link AlipayCommerceCityfacilitatorStationQueryModel} + * @return {@link AlipayCommerceCityfacilitatorStationQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayCommerceCityfacilitatorStationQueryResponse stationQueryToResponse(AlipayCommerceCityfacilitatorStationQueryModel model) throws AlipayApiException { + AlipayCommerceCityfacilitatorStationQueryRequest request = new AlipayCommerceCityfacilitatorStationQueryRequest(); + request.setBizModel(model); + return doExecute(request); + } + + + /** + * 地铁车站数据查询 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayCommerceCityfacilitatorStationQueryModel} + * @return {@link AlipayCommerceCityfacilitatorStationQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayCommerceCityfacilitatorStationQueryResponse stationQueryToResponse(AlipayClient alipayClient, Boolean certModel, AlipayCommerceCityfacilitatorStationQueryModel model) throws AlipayApiException { + AlipayCommerceCityfacilitatorStationQueryRequest request = new AlipayCommerceCityfacilitatorStationQueryRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + + /** + * 核销码批量查询 + * + * @param model {@link AlipayCommerceCityfacilitatorVoucherBatchqueryModel} + * @return {@link AlipayCommerceCityfacilitatorVoucherBatchqueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayCommerceCityfacilitatorVoucherBatchqueryResponse voucherBatchqueryToResponse(AlipayCommerceCityfacilitatorVoucherBatchqueryModel model) throws AlipayApiException { + AlipayCommerceCityfacilitatorVoucherBatchqueryRequest request = new AlipayCommerceCityfacilitatorVoucherBatchqueryRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 核销码批量查询 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayCommerceCityfacilitatorVoucherBatchqueryModel} + * @return {@link AlipayCommerceCityfacilitatorVoucherBatchqueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayCommerceCityfacilitatorVoucherBatchqueryResponse voucherBatchqueryToResponse(AlipayClient alipayClient, Boolean certModel, AlipayCommerceCityfacilitatorVoucherBatchqueryModel model) throws AlipayApiException { + AlipayCommerceCityfacilitatorVoucherBatchqueryRequest request = new AlipayCommerceCityfacilitatorVoucherBatchqueryRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + + public static void batchTrans(Map params, String privateKey, String signType, HttpServletResponse response) throws IOException { + params.put("service", "batch_trans_notify"); + params.put("_input_charset", "UTF-8"); + params.put("pay_date", DateUtil.format(new Date(), "YYYYMMDD")); + Map param = AliPayCore.buildRequestPara(params, privateKey, signType); + response.sendRedirect(GATEWAY_NEW.concat(AliPayCore.createLinkString(param))); + } + + /** + * 将异步通知的参数转化为Map + * + * @param request {HttpServletRequest} + * @return 转化后的Map + */ + public static Map toMap(HttpServletRequest request) { + Map params = new HashMap(); + Map requestParams = request.getParameterMap(); + for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext(); ) { + String name = iter.next(); + String[] values = requestParams.get(name); + String valueStr = ""; + for (int i = 0; i < values.length; i++) { + valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ","; + } + params.put(name, valueStr); + } + return params; + } + + /** + * 生活缴费查询账单 + * + * @param orderType 支付宝订单类型 + * @param merchantOrderNo 业务流水号 + * @return {@link AlipayEbppBillGetResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayEbppBillGetResponse ebppBillGet(String orderType, String merchantOrderNo) throws AlipayApiException { + AlipayEbppBillGetRequest request = new AlipayEbppBillGetRequest(); + request.setOrderType(orderType); + request.setMerchantOrderNo(merchantOrderNo); + return doExecute(request); + } + + /** + * 生活缴费查询账单 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param orderType 支付宝订单类型 + * @param merchantOrderNo 业务流水号 + * @return {@link AlipayEbppBillGetResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayEbppBillGetResponse ebppBillGet(AlipayClient alipayClient, Boolean certModel, String orderType, String merchantOrderNo) throws AlipayApiException { + AlipayEbppBillGetRequest request = new AlipayEbppBillGetRequest(); + request.setOrderType(orderType); + request.setMerchantOrderNo(merchantOrderNo); + return doExecute(alipayClient, certModel, request); + } + + /** + * H5刷脸认证初始化 + * + * @param model {@link ZolozIdentificationUserWebInitializeModel} + * @return {@link ZolozIdentificationUserWebInitializeResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static ZolozIdentificationUserWebInitializeResponse identificationUserWebInitialize(ZolozIdentificationUserWebInitializeModel model) throws AlipayApiException { + ZolozIdentificationUserWebInitializeRequest request = new ZolozIdentificationUserWebInitializeRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * H5刷脸认证初始化 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link ZolozIdentificationUserWebInitializeModel} + * @return {@link ZolozIdentificationUserWebInitializeResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static ZolozIdentificationUserWebInitializeResponse identificationUserWebInitialize(AlipayClient alipayClient, Boolean certModel, ZolozIdentificationUserWebInitializeModel model) throws AlipayApiException { + ZolozIdentificationUserWebInitializeRequest request = new ZolozIdentificationUserWebInitializeRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + /** + * H5刷脸认证查询 + * + * @param model {@link ZolozIdentificationUserWebQueryModel} + * @return {@link ZolozIdentificationUserWebQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static ZolozIdentificationUserWebQueryResponse identificationUserWebInitialize(ZolozIdentificationUserWebQueryModel model) throws AlipayApiException { + ZolozIdentificationUserWebQueryRequest request = new ZolozIdentificationUserWebQueryRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * H5刷脸认证查询 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link ZolozIdentificationUserWebQueryModel} + * @return {@link ZolozIdentificationUserWebQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static ZolozIdentificationUserWebQueryResponse identificationUserWebInitialize(AlipayClient alipayClient, Boolean certModel, ZolozIdentificationUserWebQueryModel model) throws AlipayApiException { + ZolozIdentificationUserWebQueryRequest request = new ZolozIdentificationUserWebQueryRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + /** + * 热脸入库 + * + * @param model {@link ZolozAuthenticationCustomerFacemanageCreateModel} + * @return {@link ZolozAuthenticationCustomerFacemanageCreateResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static ZolozAuthenticationCustomerFacemanageCreateResponse authenticationCustomerFaceManageCreate(ZolozAuthenticationCustomerFacemanageCreateModel model) throws AlipayApiException { + ZolozAuthenticationCustomerFacemanageCreateRequest request = new ZolozAuthenticationCustomerFacemanageCreateRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 热脸入库 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link ZolozAuthenticationCustomerFacemanageCreateModel} + * @return {@link ZolozAuthenticationCustomerFacemanageCreateResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static ZolozAuthenticationCustomerFacemanageCreateResponse authenticationCustomerFaceManageCreate(AlipayClient alipayClient, Boolean certModel, ZolozAuthenticationCustomerFacemanageCreateModel model) throws AlipayApiException { + ZolozAuthenticationCustomerFacemanageCreateRequest request = new ZolozAuthenticationCustomerFacemanageCreateRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + /** + * 热脸出库 + * + * @param model {@link ZolozAuthenticationCustomerFacemanageDeleteModel} + * @return {@link ZolozAuthenticationCustomerFacemanageDeleteResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static ZolozAuthenticationCustomerFacemanageDeleteResponse authenticationCustomerFaceManageDelete(ZolozAuthenticationCustomerFacemanageDeleteModel model) throws AlipayApiException { + ZolozAuthenticationCustomerFacemanageDeleteRequest request = new ZolozAuthenticationCustomerFacemanageDeleteRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 热脸出库 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link ZolozAuthenticationCustomerFacemanageDeleteModel} + * @return {@link ZolozAuthenticationCustomerFacemanageDeleteResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static ZolozAuthenticationCustomerFacemanageDeleteResponse authenticationCustomerFaceManageDelete(AlipayClient alipayClient, Boolean certModel, ZolozAuthenticationCustomerFacemanageDeleteModel model) throws AlipayApiException { + ZolozAuthenticationCustomerFacemanageDeleteRequest request = new ZolozAuthenticationCustomerFacemanageDeleteRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + /** + * 人脸 ftoken 查询消费接口 + * + * @param model {@link ZolozAuthenticationCustomerFtokenQueryModel} + * @return {@link ZolozAuthenticationCustomerFtokenQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static ZolozAuthenticationCustomerFtokenQueryResponse authenticationCustomerFTokenQuery(ZolozAuthenticationCustomerFtokenQueryModel model) throws AlipayApiException { + ZolozAuthenticationCustomerFtokenQueryRequest request = new ZolozAuthenticationCustomerFtokenQueryRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 人脸 ftoken 查询消费接口 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link ZolozAuthenticationCustomerFtokenQueryModel} + * @return {@link ZolozAuthenticationCustomerFtokenQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static ZolozAuthenticationCustomerFtokenQueryResponse authenticationCustomerFTokenQuery(AlipayClient alipayClient, Boolean certModel, ZolozAuthenticationCustomerFtokenQueryModel model) throws AlipayApiException { + ZolozAuthenticationCustomerFtokenQueryRequest request = new ZolozAuthenticationCustomerFtokenQueryRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + + /** + * 人脸初始化刷脸付 + * + * @param model {@link ZolozAuthenticationSmilepayInitializeModel} + * @return {@link ZolozAuthenticationSmilepayInitializeResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static ZolozAuthenticationSmilepayInitializeResponse authenticationSmilePayInitialize(ZolozAuthenticationSmilepayInitializeModel model) throws AlipayApiException { + ZolozAuthenticationSmilepayInitializeRequest request = new ZolozAuthenticationSmilepayInitializeRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 人脸初始化刷脸付 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link ZolozAuthenticationSmilepayInitializeModel} + * @return {@link ZolozAuthenticationSmilepayInitializeResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static ZolozAuthenticationSmilepayInitializeResponse authenticationSmilePayInitialize(AlipayClient alipayClient, Boolean certModel, ZolozAuthenticationSmilepayInitializeModel model) throws AlipayApiException { + ZolozAuthenticationSmilepayInitializeRequest request = new ZolozAuthenticationSmilepayInitializeRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + /** + * 人脸初始化唤起zim + * + * @param model {@link ZolozAuthenticationCustomerSmilepayInitializeModel} + * @return {@link ZolozAuthenticationCustomerSmilepayInitializeResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static ZolozAuthenticationCustomerSmilepayInitializeResponse authenticationCustomerSmilePayInitialize(ZolozAuthenticationCustomerSmilepayInitializeModel model) throws AlipayApiException { + ZolozAuthenticationCustomerSmilepayInitializeRequest request = new ZolozAuthenticationCustomerSmilepayInitializeRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 人脸初始化唤起zim + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link ZolozAuthenticationCustomerSmilepayInitializeModel} + * @return {@link ZolozAuthenticationCustomerSmilepayInitializeResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static ZolozAuthenticationCustomerSmilepayInitializeResponse authenticationCustomerSmilePayInitialize(AlipayClient alipayClient, Boolean certModel, ZolozAuthenticationCustomerSmilepayInitializeModel model) throws AlipayApiException { + ZolozAuthenticationCustomerSmilepayInitializeRequest request = new ZolozAuthenticationCustomerSmilepayInitializeRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + /** + * 生态激励项目ISV代签约接口 + * + * @return {@link AlipayCommerceAdContractSignResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayCommerceAdContractSignResponse commerceAdContractSign() throws AlipayApiException { + AlipayCommerceAdContractSignRequest request = new AlipayCommerceAdContractSignRequest(); + return doExecute(request); + } + + /** + * 生态激励项目ISV代签约接口 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @return {@link AlipayCommerceAdContractSignResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayCommerceAdContractSignResponse commerceAdContractSign(AlipayClient alipayClient, Boolean certModel) throws AlipayApiException { + AlipayCommerceAdContractSignRequest request = new AlipayCommerceAdContractSignRequest(); + return doExecute(alipayClient, certModel, request); + } + + /** + * 分账关系绑定 + * + * @param model {@link AlipayTradeRoyaltyRelationBindModel} + * @return {@link AlipayTradeRoyaltyRelationBindResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeRoyaltyRelationBindResponse tradeRoyaltyRelationBind(AlipayTradeRoyaltyRelationBindModel model) throws AlipayApiException { + AlipayTradeRoyaltyRelationBindRequest request = new AlipayTradeRoyaltyRelationBindRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 分账关系绑定 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayTradeRoyaltyRelationBindModel} + * @return {@link AlipayTradeRoyaltyRelationBindResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeRoyaltyRelationBindResponse tradeRoyaltyRelationBind(AlipayClient alipayClient, Boolean certModel, AlipayTradeRoyaltyRelationBindModel model) throws AlipayApiException { + AlipayTradeRoyaltyRelationBindRequest request = new AlipayTradeRoyaltyRelationBindRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + /** + * 分账关系解绑 + * + * @param model {@link AlipayTradeRoyaltyRelationUnbindModel} + * @return {@link AlipayTradeRoyaltyRelationUnbindResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeRoyaltyRelationUnbindResponse tradeRoyaltyRelationUnBind(AlipayTradeRoyaltyRelationUnbindModel model) throws AlipayApiException { + AlipayTradeRoyaltyRelationUnbindRequest request = new AlipayTradeRoyaltyRelationUnbindRequest(); + request.setBizModel(model); + return doExecute(request); + } + + /** + * 分账关系解绑 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayTradeRoyaltyRelationUnbindModel} + * @return {@link AlipayTradeRoyaltyRelationUnbindResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeRoyaltyRelationUnbindResponse tradeRoyaltyRelationUnBind(AlipayClient alipayClient, Boolean certModel, AlipayTradeRoyaltyRelationUnbindModel model) throws AlipayApiException { + AlipayTradeRoyaltyRelationUnbindRequest request = new AlipayTradeRoyaltyRelationUnbindRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + + /** + * 分账关系查询 + * + * @param model {@link AlipayTradeRoyaltyRelationBatchqueryModel} + * @return {@link AlipayTradeRoyaltyRelationBatchqueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeRoyaltyRelationBatchqueryResponse tradeRoyaltyRelationBatchQuery(AlipayTradeRoyaltyRelationBatchqueryModel model) throws AlipayApiException { + AlipayTradeRoyaltyRelationBatchqueryRequest request = new AlipayTradeRoyaltyRelationBatchqueryRequest(); + request.setBizModel(model); + return doExecute(request); + } + + + /** + * 分账关系查询 + * + * @param alipayClient {@link AlipayClient} + * @param certModel 是否证书模式 + * @param model {@link AlipayTradeRoyaltyRelationBatchqueryModel} + * @return {@link AlipayTradeRoyaltyRelationBatchqueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ + public static AlipayTradeRoyaltyRelationBatchqueryResponse tradeRoyaltyRelationBatchQuery(AlipayClient alipayClient, Boolean certModel, AlipayTradeRoyaltyRelationBatchqueryModel model) throws AlipayApiException { + AlipayTradeRoyaltyRelationBatchqueryRequest request = new AlipayTradeRoyaltyRelationBatchqueryRequest(); + request.setBizModel(model); + return doExecute(alipayClient, certModel, request); + } + +} diff --git a/ruoyi-alipay/src/main/java/com/ijpay/alipay/AliPayApiConfig.java b/ruoyi-alipay/src/main/java/com/ijpay/alipay/AliPayApiConfig.java new file mode 100644 index 00000000..d57adc58 --- /dev/null +++ b/ruoyi-alipay/src/main/java/com/ijpay/alipay/AliPayApiConfig.java @@ -0,0 +1,402 @@ +package com.ijpay.alipay; + +import cn.hutool.core.util.StrUtil; +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; +import com.alipay.api.CertAlipayRequest; +import com.alipay.api.DefaultAlipayClient; + +import java.io.Serializable; + +/** + *

IJPay 让支付触手可及,封装了微信支付、支付宝支付、银联支付常用的支付方式以及各种常用的接口。

+ * + *

不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。

+ * + *

IJPay 交流群: 723992875、864988890

+ * + *

Node.js 版: https://gitee.com/javen205/TNWXX

+ * + *

支付宝支付配置

+ * + * @author Javen + */ +public class AliPayApiConfig implements Serializable { + private static final long serialVersionUID = -4736760736935998953L; + + /** + * 应用私钥 + */ + private String privateKey; + + /** + * 支付宝公钥 + */ + private String aliPayPublicKey; + + /** + * 应用编号 + */ + private String appId; + + /** + * 支付宝支付网关 + */ + private String serviceUrl; + + /** + * 字符集,为空默认为 UTF-8 + */ + private String charset; + + /** + * 为空默认为 RSA2 + */ + private String signType; + + /** + * 为空默认为 JSON + */ + private String format; + + /** + * 是否为证书模式 + */ + private boolean certModel; + + /** + * 应用公钥证书 (证书模式必须) + */ + private String appCertPath; + + /** + * 应用公钥证书文本内容 + */ + private String appCertContent; + + /** + * 支付宝公钥证书 (证书模式必须) + */ + private String aliPayCertPath; + + /** + * 支付宝公钥证书文本内容 + */ + private String aliPayCertContent; + + /** + * 支付宝根证书 (证书模式必须) + */ + private String aliPayRootCertPath; + + /** + * 支付宝根证书文本内容 + */ + private String aliPayRootCertContent; + + /** + * 支付宝客户端 + */ + private AlipayClient alipayClient; + + /** + * 其他附加参数 + */ + private Object exParams; + + /** + * 域名 + */ + private String domain; + + private Integer proxyPort; + private String proxyIp; + + private AliPayApiConfig() { + } + + public static AliPayApiConfig builder() { + return new AliPayApiConfig(); + } + + /** + * 普通公钥方式 + * + * @return AliPayApiConfig 支付宝配置 + */ + public AliPayApiConfig build() { + this.alipayClient = new DefaultAlipayClient(getServiceUrl(), getAppId(), getPrivateKey(), getFormat(), + getCharset(), getAliPayPublicKey(), getSignType()); + return this; + } + + public AliPayApiConfig buildProxy() { + this.alipayClient = new DefaultAlipayClient(getServiceUrl(), getAppId(), getPrivateKey(), getFormat(), + getCharset(), getAliPayPublicKey(), getSignType(), getProxyIp(),getProxyPort()); + return this; + } + + /** + * 证书模式 + * + * @return AliPayApiConfig 支付宝配置 + * @throws AlipayApiException 支付宝 Api 异常 + */ + public AliPayApiConfig buildByCert() throws AlipayApiException { + return build(getAppCertPath(), getAliPayCertPath(), getAliPayRootCertPath()); + } + + /** + * 证书模式 + * + * @return AliPayApiConfig 支付宝配置 + * @throws AlipayApiException 支付宝 Api 异常 + */ + public AliPayApiConfig buildByCertContent() throws AlipayApiException { + return buildByCertContent(getAppCertContent(), getAliPayCertContent(), getAliPayRootCertContent()); + } + + /** + * @param appCertPath 应用公钥证书路径 + * @param aliPayCertPath 支付宝公钥证书文件路径 + * @param aliPayRootCertPath 支付宝CA根证书文件路径 + * @return {@link AliPayApiConfig} 支付宝支付配置 + * @throws AlipayApiException 支付宝 Api 异常 + */ + public AliPayApiConfig build(String appCertPath, String aliPayCertPath, String aliPayRootCertPath) throws AlipayApiException { + CertAlipayRequest certAlipayRequest = new CertAlipayRequest(); + certAlipayRequest.setServerUrl(getServiceUrl()); + certAlipayRequest.setAppId(getAppId()); + certAlipayRequest.setPrivateKey(getPrivateKey()); + certAlipayRequest.setFormat(getFormat()); + certAlipayRequest.setCharset(getCharset()); + certAlipayRequest.setSignType(getSignType()); + certAlipayRequest.setCertPath(appCertPath); + certAlipayRequest.setAlipayPublicCertPath(aliPayCertPath); + certAlipayRequest.setRootCertPath(aliPayRootCertPath); + this.alipayClient = new DefaultAlipayClient(certAlipayRequest); + this.certModel = true; + return this; + } + + /** + * @param appCertContent 应用公钥证书 + * @param aliPayCertContent 支付宝公钥证书 + * @param aliPayRootCertContent 支付宝CA根证书 + * @return {@link AliPayApiConfig} 支付宝支付配置 + * @throws AlipayApiException 支付宝 Api 异常 + */ + public AliPayApiConfig buildByCertContent(String appCertContent, String aliPayCertContent, String aliPayRootCertContent) throws AlipayApiException { + CertAlipayRequest certAlipayRequest = new CertAlipayRequest(); + certAlipayRequest.setServerUrl(getServiceUrl()); + certAlipayRequest.setAppId(getAppId()); + certAlipayRequest.setPrivateKey(getPrivateKey()); + certAlipayRequest.setFormat(getFormat()); + certAlipayRequest.setCharset(getCharset()); + certAlipayRequest.setSignType(getSignType()); + certAlipayRequest.setCertContent(appCertContent); + certAlipayRequest.setAlipayPublicCertContent(aliPayCertContent); + certAlipayRequest.setRootCertContent(aliPayRootCertContent); + this.alipayClient = new DefaultAlipayClient(certAlipayRequest); + this.certModel = true; + return this; + } + + public String getPrivateKey() { + if (StrUtil.isBlank(privateKey)) { + throw new IllegalStateException("privateKey 未被赋值"); + } + return privateKey; + } + + public AliPayApiConfig setPrivateKey(String privateKey) { + if (StrUtil.isEmpty(privateKey)) { + throw new IllegalArgumentException("privateKey 值不能为 null"); + } + this.privateKey = privateKey; + return this; + } + + public String getAliPayPublicKey() { + return aliPayPublicKey; + } + + public AliPayApiConfig setAliPayPublicKey(String aliPayPublicKey) { + this.aliPayPublicKey = aliPayPublicKey; + return this; + } + + public String getAppId() { + if (StrUtil.isEmpty(appId)) { + throw new IllegalStateException("appId 未被赋值"); + } + return appId; + } + + public AliPayApiConfig setAppId(String appId) { + if (StrUtil.isEmpty(appId)) { + throw new IllegalArgumentException("appId 值不能为 null"); + } + this.appId = appId; + return this; + } + + public String getServiceUrl() { + if (StrUtil.isEmpty(serviceUrl)) { + throw new IllegalStateException("serviceUrl 未被赋值"); + } + return serviceUrl; + } + + public AliPayApiConfig setServiceUrl(String serviceUrl) { + if (StrUtil.isEmpty(serviceUrl)) { + serviceUrl = "https://openapi.alipay.com/gateway.do"; + } + this.serviceUrl = serviceUrl; + return this; + } + + public String getCharset() { + if (StrUtil.isEmpty(charset)) { + charset = "UTF-8"; + } + return charset; + } + + public AliPayApiConfig setCharset(String charset) { + if (StrUtil.isEmpty(charset)) { + charset = "UTF-8"; + } + this.charset = charset; + return this; + } + + public String getSignType() { + if (StrUtil.isEmpty(signType)) { + signType = "RSA2"; + } + return signType; + } + + public AliPayApiConfig setSignType(String signType) { + if (StrUtil.isEmpty(signType)) { + signType = "RSA2"; + } + this.signType = signType; + return this; + } + + public String getFormat() { + if (StrUtil.isEmpty(format)) { + format = "json"; + } + return format; + } + + public String getAppCertPath() { + return appCertPath; + } + + public AliPayApiConfig setAppCertPath(String appCertPath) { + this.appCertPath = appCertPath; + return this; + } + + public String getAppCertContent() { + return appCertContent; + } + + public AliPayApiConfig setAppCertContent(String appCertContent) { + this.appCertContent = appCertContent; + return this; + } + + public String getAliPayCertPath() { + return aliPayCertPath; + } + + public AliPayApiConfig setAliPayCertPath(String aliPayCertPath) { + this.aliPayCertPath = aliPayCertPath; + return this; + } + + public String getAliPayCertContent() { + return aliPayCertContent; + } + + public AliPayApiConfig setAliPayCertContent(String aliPayCertContent) { + this.aliPayCertContent = aliPayCertContent; + return this; + } + + public String getAliPayRootCertPath() { + return aliPayRootCertPath; + } + + public AliPayApiConfig setAliPayRootCertPath(String aliPayRootCertPath) { + this.aliPayRootCertPath = aliPayRootCertPath; + return this; + } + + public String getAliPayRootCertContent() { + return aliPayRootCertContent; + } + + public AliPayApiConfig setAliPayRootCertContent(String aliPayRootCertContent) { + this.aliPayRootCertContent = aliPayRootCertContent; + return this; + } + + public boolean isCertModel() { + return certModel; + } + + public AliPayApiConfig setCertModel(boolean certModel) { + this.certModel = certModel; + return this; + } + + public AlipayClient getAliPayClient() { + if (alipayClient == null) { + throw new IllegalStateException("aliPayClient 未被初始化"); + } + return alipayClient; + } + + public Object getExParams() { + return exParams; + } + + public AliPayApiConfig setExParams(Object exParams) { + this.exParams = exParams; + return this; + } + + public String getDomain() { + return domain; + } + + public AliPayApiConfig setDomain(String domain) { + this.domain = domain; + return this; + } + + + public Integer getProxyPort() { + return proxyPort; + } + + public AliPayApiConfig setProxyPort(Integer proxyPort) { + this.proxyPort = proxyPort; + return this; + } + + public String getProxyIp() { + return proxyIp; + } + + public AliPayApiConfig setProxyIp(String proxyIp) { + this.proxyIp = proxyIp; + return this; + } +} diff --git a/ruoyi-alipay/src/main/java/com/ijpay/alipay/AliPayApiConfigKit.java b/ruoyi-alipay/src/main/java/com/ijpay/alipay/AliPayApiConfigKit.java new file mode 100644 index 00000000..2c28b640 --- /dev/null +++ b/ruoyi-alipay/src/main/java/com/ijpay/alipay/AliPayApiConfigKit.java @@ -0,0 +1,128 @@ +package com.ijpay.alipay; + +import cn.hutool.core.util.StrUtil; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + *

IJPay 让支付触手可及,封装了微信支付、支付宝支付、银联支付常用的支付方式以及各种常用的接口。

+ * + *

不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。

+ * + *

IJPay 交流群: 723992875、864988890

+ * + *

Node.js 版: https://gitee.com/javen205/TNWX

+ * + * @author Javen + */ +public class AliPayApiConfigKit { + private static final ThreadLocal TL = new ThreadLocal(); + + private static final Map CFG_MAP = new ConcurrentHashMap(); + private static final String DEFAULT_CFG_KEY = "_default_key_"; + + /** + *

向缓存中设置 AliPayApiConfig

+ *

每个 appId 只需添加一次,相同 appId 将被覆盖

+ * + * @param aliPayApiConfig 支付宝支付配置 + * @return {@link AliPayApiConfig} + */ + public static AliPayApiConfig putApiConfig(AliPayApiConfig aliPayApiConfig) { + if (CFG_MAP.size() == 0) { + CFG_MAP.put(DEFAULT_CFG_KEY, aliPayApiConfig); + } + CFG_MAP.put(aliPayApiConfig.getAppId(), aliPayApiConfig); + return aliPayApiConfig; + } + + /** + * 向当前线程中设置 {@link AliPayApiConfig} + * + * @param aliPayApiConfig {@link AliPayApiConfig} 支付宝配置对象 + * @return {@link AliPayApiConfig} + */ + public static AliPayApiConfig setThreadLocalAliPayApiConfig(AliPayApiConfig aliPayApiConfig) { + if (StrUtil.isNotEmpty(aliPayApiConfig.getAppId())) { + setThreadLocalAppId(aliPayApiConfig.getAppId()); + } + return putApiConfig(aliPayApiConfig); + } + + /** + * 通过 AliPayApiConfig 移除支付配置 + * + * @param aliPayApiConfig {@link AliPayApiConfig} 支付宝配置对象 + * @return {@link AliPayApiConfig} + */ + public static AliPayApiConfig removeApiConfig(AliPayApiConfig aliPayApiConfig) { + return removeApiConfig(aliPayApiConfig.getAppId()); + } + + /** + * 通过 appId 移除支付配置 + * + * @param appId 支付宝应用编号 + * @return {@link AliPayApiConfig} + */ + public static AliPayApiConfig removeApiConfig(String appId) { + return CFG_MAP.remove(appId); + } + + /** + * 向当前线程中设置 appId + * + * @param appId 支付宝应用编号 + */ + public static void setThreadLocalAppId(String appId) { + if (StrUtil.isEmpty(appId)) { + appId = CFG_MAP.get(DEFAULT_CFG_KEY).getAppId(); + } + TL.set(appId); + } + + /** + * 移除当前线程中的 appId + */ + public static void removeThreadLocalAppId() { + TL.remove(); + } + + /** + * 获取当前线程中的 appId + * + * @return 支付宝应用编号 appId + */ + public static String getAppId() { + String appId = TL.get(); + if (StrUtil.isEmpty(appId)) { + appId = CFG_MAP.get(DEFAULT_CFG_KEY).getAppId(); + } + return appId; + } + + /** + * 获取当前线程中的 AliPayApiConfig + * + * @return {@link AliPayApiConfig} + */ + public static AliPayApiConfig getAliPayApiConfig() { + String appId = getAppId(); + return getApiConfig(appId); + } + + /** + * 通过 appId 获取 AliPayApiConfig + * + * @param appId 支付宝应用编号 + * @return {@link AliPayApiConfig} + */ + public static AliPayApiConfig getApiConfig(String appId) { + AliPayApiConfig cfg = CFG_MAP.get(appId); + if (cfg == null) { + throw new IllegalStateException("需事先调用 AliPayApiConfigKit.putApiConfig(aliPayApiConfig) 将 appId对应的 aliPayApiConfig 对象存入,才可以使用 AliPayApiConfigKit.getAliPayApiConfig() 的系列方法"); + } + return cfg; + } +} diff --git a/ruoyi-alipay/src/main/java/com/ijpay/alipay/AliPayCore.java b/ruoyi-alipay/src/main/java/com/ijpay/alipay/AliPayCore.java new file mode 100644 index 00000000..60a927c4 --- /dev/null +++ b/ruoyi-alipay/src/main/java/com/ijpay/alipay/AliPayCore.java @@ -0,0 +1,139 @@ +package com.ijpay.alipay; + +import cn.hutool.crypto.SecureUtil; +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayConstants; +import com.alipay.api.internal.util.AlipaySignature; +import com.alipay.api.internal.util.AntCertificationUtil; +import com.alipay.api.internal.util.codec.Base64; +import enums.SignType; + +import java.util.*; + +import static com.alipay.api.internal.util.AlipaySignature.rsaCheckV1; + +/** + *

IJPay 让支付触手可及,封装了微信支付、支付宝支付、银联支付常用的支付方式以及各种常用的接口。

+ * + *

不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。

+ * + *

IJPay 交流群: 723992875、864988890

+ * + *

Node.js 版: https://gitee.com/javen205/TNWX

+ * + * @author Javen + */ +public class AliPayCore { + + /** + * 生成签名结果 + * + * @param params 要签名的数组 + * @param key 签名密钥 + * @param signType 签名类型 + * @return 签名结果字符串 + */ + public static String buildRequestMySign(Map params, String key, String signType) throws AlipayApiException { + // 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串 + String preStr = createLinkString(params); + if (SignType.MD5.getType().equals(signType)) { + return SecureUtil.md5(preStr.concat(key)); + } else if (SignType.RSA2.getType().equals(signType)) { + return AlipaySignature.rsa256Sign(preStr, key, AlipayConstants.CHARSET_UTF8); + } else if (SignType.RSA.getType().equals(signType)) { + return AlipaySignature.rsaSign(preStr, key, AlipayConstants.CHARSET_UTF8); + } + return null; + } + + /** + * 生成要请求给支付宝的参数数组 + * + * @param params 请求前的参数数组 + * @param key 商户的私钥 + * @param signType 签名类型 + * @return 要请求的参数数组 + */ + public static Map buildRequestPara(Map params, String key, String signType) { + // 除去数组中的空值和签名参数 + Map tempMap = paraFilter(params); + // 生成签名结果 + String mySign; + try { + mySign = buildRequestMySign(params, key, signType); + } catch (AlipayApiException e) { + e.printStackTrace(); + return null; + } + // 签名结果与签名方式加入请求提交参数组中 + tempMap.put("sign", mySign); + tempMap.put("sign_type", signType); + return tempMap; + } + + /** + * 除去数组中的空值和签名参数 + * + * @param params 签名参数组 + * @return 去掉空值与签名参数后的新签名参数组 + */ + public static Map paraFilter(Map params) { + if (params == null) { + return null; + } + Map result = new HashMap<>(params.size()); + if (params.size() <= 0) { + return result; + } + for (String key : params.keySet()) { + String value = params.get(key); + if (value == null || "".equals(value) || "sign".equalsIgnoreCase(key) + || "sign_type".equalsIgnoreCase(key)) { + continue; + } + result.put(key, value); + } + return result; + } + + /** + * 把数组所有元素排序 + * + * @param params 需要排序并参与字符拼接的参数组 + * @return 拼接后字符串 + */ + public static String createLinkString(Map params) { + List keys = new ArrayList<>(params.keySet()); + Collections.sort(keys); + StringBuilder content = new StringBuilder(); + for (String key : keys) { + String value = params.get(key); + // 拼接时,不包括最后一个&字符 + content.append(key).append("=").append(value).append("&"); + } + if (content.lastIndexOf("&") == content.length() - 1) { + content.deleteCharAt(content.length() - 1); + } + return content.toString(); + } + + /** + * 从证书内容验签 + * @param params 待验签的从支付宝接收到的参数Map + * @param alipayPublicCertContent 支付宝公钥证书内容 + * @param charset 参数内容编码集 + * @param signType 指定采用的签名方式,RSA或RSA2 + * @return true:验签通过;false:验签不通过 + * @throws AlipayApiException + */ + public static boolean rsaCertCheckV1ByContent(Map params, String alipayPublicCertContent, + String charset, String signType) throws AlipayApiException { + String publicKey = Base64.encodeBase64String( + AntCertificationUtil + .getCertFromContent(alipayPublicCertContent) + .getPublicKey() + .getEncoded() + ); + return rsaCheckV1(params, publicKey, charset, signType); + } +} diff --git a/ruoyi-alipay/src/main/java/enums/SignType.java b/ruoyi-alipay/src/main/java/enums/SignType.java new file mode 100644 index 00000000..96da02a9 --- /dev/null +++ b/ruoyi-alipay/src/main/java/enums/SignType.java @@ -0,0 +1,39 @@ +package enums; + +/** + *

IJPay 让支付触手可及,封装了微信支付、支付宝支付、银联支付常用的支付方式以及各种常用的接口。

+ * + *

不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。

+ * + *

IJPay 交流群: 723992875、864988890

+ * + *

Node.js 版: https://gitee.com/javen205/TNWX

+ * + *

签名方式

+ * + * @author Javen + */ +public enum SignType { + /** + * MD5 加密 + */ + MD5("MD5"), + /** + * RSA2 + */ + RSA2("RSA2"), + /** + * RSA + */ + RSA("RSA"); + + SignType(String type) { + this.type = type; + } + + private final String type; + + public String getType() { + return type; + } +} diff --git a/ruoyi-cai/lib/IJPay-AliPay-2.9.10.jar b/ruoyi-cai/lib/IJPay-AliPay-2.9.10.jar new file mode 100644 index 0000000000000000000000000000000000000000..bcc5745e86fbb81d3a7b145dd83eb1f7eb159b6b GIT binary patch literal 24445 zcmaI81#leAmNh75W@cuV#mvmi%(9pnEtV`+iY%w$X*Zba^+1dR!rsGss zMx2wGbu(|>tgMdP%5vZka3KHs%qGWb|5NzS7wp$rK|)=GQASacS@}OQ7?7DSnIBq& zvE3IP`gLIZPnm*bTt^UjInV+J~=U}=yIxReWLM@(c`!ka6Qo$72a?o zK9)WaD2TKjhP10Bd<^#pdx&wtg%4X=ihGcY`~_44Ja6?G$tag_>U0KBs@{6$`#`j`{Zy6{Ny+kjI-5F z&qtr!Zc{N7cpqTXGT-{i>bj2N)jdPm-)&#^JGQs2^Go|i_&^~xz9zoAp2H_!r>!n; zcJJ5aH)61$n_Ndw)q-x+nXQE_IBO@nK;%S%3qqim*7E1>{1$wWmakC0f4=`%&wCW3 zpk<8G%AOkVIhIk-3OaCB;jQeENzZQz%cyZ!%l?K_&uK@_0G(Bc9foE%h zVD-?d{lic8H{kS7Mjekvk1s_^Z_)lQ?CZ}G%b(am-7VaHYjx*$+z@3!c0b*U@Jj4= zVP^8HFG=s_~EqZDiDH6MLg z+w2>4?rY2-^VURsJwk7BXOMUEClxkw00GkOa*;y0hB}5N`dE*%fAgY@G4r*<_9yb;dU-s6>NztCCNDYyn z`Z4#*3)sj^ed_iX#NOP<@gJm}xv7G1H8FEHu~DDh2Z0bw0~4&))!clHK@?5bsT(dT zcmY^J^DB=w)rs>N;PdXh9lM5%+AUV^(X{&WiUI1Yb{OV)4eP?n-CVEiS zi9V1^sq7Bi8S?D~?(q)nF?s_FY6tJ}kn?;(g4ci`=xp`z0pZyP>-U+B5r7CINY9I) z#Yx*nZpF##eh$Rm#MjA0ih2Iz7Gz@(cxAFq@7BQvvcB@j1@y01)Pmdr1%8063yPOT zLK#!9Z;bqe4UdQ z5qd`h_(8W`yJ%woVraEq*L2|nkOaHt(gg3o5<1}}c7U0YTpQwwQY->}4!U>;U2oSZ zI|ILlUH=SoXgzM`1Tm_=U|#W%FLMBW&T0(;HY@!i*mf{0fhk?nm` z5{M3qq&$nVPgn(gsuPIH=J&xNaI(?C?!{j_K?I_6tLN4H?$v=lcvV(qO?aLWiqi;* zL64H$K3D?Tsm_YrK1>32_yT#Kxs0Fr^YAOn*r#jlf<8$JhSl?OU=+yxGDO`!8JXr! z4tcxDgyB}wA!BD#dAsR^BkC_m?cZzxpRB@?^%to2Z+L)DTH!~_b>F57J9i(0AdIF9 zQ=oshq7zIa8_-|`=(KR60Lm8ckYKjXeRiJ)l9}IKFt6wCqZjnEDeu>+QtR1$JV@pM zu&n-qk++*&xU}iw#Qu#5u%(c{er_{iS(5{_eHhT8hdr1w!slgEUqZ31q}RiqRYJw}blZFc(Z6;B}?w7@_91yfx zhp(f+;a__G7#942Sx47O4_j^x*E36zqq*2RO@sMABS)kt8EhS5V8tOmpwJ)#Y*S2-#2+Xql`(MV#AyUYSs|wtl&wQ*9l|oMEW>}BX++7REV-aLo^ceT+I$g9ZgrU}u6Q7=2Q`MuGxBtxQ0l}1Vf3^JXGYj=lK19+GZ$SutgtdOsG?j}BOg+OgrJ%lINNW9gyh*aFiD;*}>w|(IJ3k~?LJAn$^O+zl_ zQhjW8={m@zb%)Zq?fOqtO8h3{Ou1utj}}lS@52%8UDat(!d%rCw+C^&Kvfz=@R7o}riEkU%U^MZE z$)I^=CA{Bk+t%S_SGNp1zcF*yvY9BZjx@0sA|aY1LQ7niTmx~}M!^f0XwS1wUVqd zeQ~N`@`v_ezk-{5L7mW1`bo3&yL$RDjzqC1`zX?x}XJ&jh`DaGgo!LO?( zW!%oGU)CUBQAcmk=Kd-@I|B3(V^;x1^~y-tlXm+;V$ z>BhrI-*Ez^)8Nn&4|Iw@_*}QG>iH4-BII3LR?v4B)JdLBcVJiHWP^XVwP-)VL&#m4 zcV;P~B)9nl=G0a*H6&|TM?CQuRcW6hU&>{%u>5fk7KemgT@s6?tN z%CctxO?k)XHACXggAIyzpL0a#c1CXM$^4ws$a5IqBI<7@ac8+U{-pY5-Eu);Td5y< zJz=DZ&GQyffq1w}x(iS3;d07hA*K#kd8A(4*eTHmeD}ZLSdFey6;V2g>xiIY;i*BP z(;DKo;Ec#@u_@MvJ*z)jh~g+wu0+nJo@Cdf1x#@1fpP)WIwV8-n(yhX2;k|vJgr)P zSdMp?sODQq>Q=4k?pd9+A5-!CoS{uy>bG%EK?~_TrQ#{HYRLX6QFWkJ#%n;+t!BmR zicNrgabCe5AS>llrs!=d<)H+~Y_@J=^wT7kIXNuNfK^S(k7~vpA#@-=StEq@icI4* zp`rAn&vJ}-=Ea^oU%{+~AH`~@N^f|t5l4sT`*=;vNxW(7c4XYml9p@Z1$I#u&euRd zNoEf!>~+VkkT#Xc{m^5LDHhv2NlS3?C;yGhbQs5iIV~HBu>CULMksc$Li4~Q5yOxU zko4dsI_;291j}iZPz=f`!QzR*IwZDXrk&$!V0T^p+q|8IiqI|d$&#NQ7@5%omo$?jhM5VgkUkJt9wim^cTK7X z?FOs*=U|=S8s~bSXdqxx8Q3rm4boz(A<9i}tB_1oT=hKATYr@0${SKY43fP_DCRcM zc+jSu?*=X){A!Xqs2)89uYZLS4-nNv@tHQ_+ny%`zSq{PL0js2D>D4p*~4R4RXLkX zm!3dMg89rA>zl{0HNTn=O#ax#zHgi^P}H&){A3RdEsyMWP7^lLi*_}w=0kPpCw%gd zi4yi~x@F)B)jn3v5A9Za=G3et`4*MICR6rw;+C!08nYq4{%tvWj!}Pc<2O~vl%Bpl%Q8aUU7#0n8-6zi5U`lvisd;_eClR)2}E#Gbc z#?@G+GBD(Ndl5lzc*~EmlZ)LM2v2=lV zj4^&_$*}qUfqXbq$u!Fz@A)AtMF&Sqd@MaeDu?WLjp$y(>hK&{IpVOC*!aVD2dOVuG{eHsP>gRTf zNxbPiB4uS5bvO^;^{0>~=KN(a@r9++6vjB*ZHWuyxTfzN$EX1$vMV+O<@Zvidne<=L zJf!59v0;eUiK6NGbuvWGbD)GHLswGVBR7{k+uz(ZP?1*ze=g~~qG{+8_ZS3=T=eT+Md$ZT*U-FsW?Z0=K36AgQNj?x#BKbv$EMi9M z|0XYBtEd(V!G)Af91u~`_urmHW-^tY^1DMS{m(WYi%aFbBPZ0ahdV%B zO46hI;@pH2;}Ctvf;H^+MdUIvlQMcQ3sd>SoDcL#y4R1v7C{J0YRdgjcO!^D6x3-W za(Sv69}rGbvN{jw-DRV+e+kj^_sy@|Mm*vJHrfNgD_mW%z6a1pR5eM5cxrqj%tq1h zsR>mZp&CgwYT5Zikb92^Q9HFeZUmE9IYk+0DQE$ZyTRy82`WB572AX;EtBcrg|*}6 zNjw%Y*WyXM-Zd_Z7e+I0uT)Tk*R6DeK$4ehc@3jBoGvTd-1U~@#?5&CF0O@}aRA!S zLCy>~nv3c31FD6lgRGu3Fqe&xqqgn4YD3&E*sbe+da_bC@YvTJT3DQm5PBH!uLbP_ z%4hYy9#j-?TMp+4c5E1nv2$8L8Fg zOZWpReb#6+yix>yrm%I%5dS1)Szc7`t&$RlF~6rp1WPs8p;`phu*Ca)K$p}totn=O zDRW2rreFJ`QQN|;kt;ad;JZ8_5=DNtfD~A}-&!*d|13tFgzdV!k5S@hOhAmgi+gcJ zJ0oz7z>;i7ta*{sk4_^Ye!PPH1-nP%c{>D>-RktdljMW@BSEnjd5-uv5EjAwo!pMc zUu>Ae4kWn`rs~34+~(1v2q|VW=!|m~JoH}bRW0#TUI=#1XhmE73hDlrvfanmda2k7 zee(CXPUJNk+6@`jhXZ->1eiZ6MvUa+!fy!Heeg(sJS!jwCLHv$xI zY!xJcg%-E-VDq_{`%%qfKV`dEX)#IuJ2jt$6x(9Wp?Z1)?Nw)KSFD0RKF9a7Z1GSZ zOU0Gf4*KCeQ$E&cA;c@MD%9x=V5g)1vq_TmYK{cZ>8ZKLU~6G*X@kHaI^52ZQ$xz` zI?QUl#&=_$as^#EFPM~NZn22Y3r)!{Vich|ZecQJ$FSXfH{)Jlj+1(vf-g(qms|^S zuw&8^?rs`RFQ{k`R%37c=Jf6j_9Kp()1f6}uyJYwFhsyvJipA?ZexjpMI10~w#2=U z#1b4rAw({6F0PPZ&jyR6;LNu=1~SDK1KX3%ih?XuOu(-=zfe?ey)5 z6ljXT);HmDFIpH!Kcv6wq3raGmHb`b5#$d~xLvgyBN68g=G*R@h0vL(O=6cfgTIeU zCInVv&q{QA>a=T2#yk=-Nldlcxb?^xoP%f&DP)Jgrh9hNloi*2uM!(be=Xf~fb@fk z{moGxjfkgPU?f+5!qw$`=HxhHn39OB?0V+p_pJ%-_gEZe*wHoJEU#Gi2)r5_DQ>bF zx%JAb!5V4fs7zXof=Xo_hjLCJkaJC)%k!i#T+?^9CKGaOZEcx#h!)O7X@s<+TOA7( zRZGi;U8Wn(qsOdbgOZ~PvWnsuWeNQeMW;X=OOk(M4#SoOj}F|0r?ybar`TQ7%(YrT zq(o@QIc$T?c;wVL*o zDCSZp(?-uvPW>C9J*||zsbD{1Bk`P<+dYp~0n5teNL_5xw~1V%L*g68LKun~Gs?@u zMA-PwCQDnHWL1s5iF zs&v=i)(Nq#Gp1NHbWFQcjmX18%ndtriAUTs#GjC%yL@^>QgG-}F2JxlR^Ve)!hwBs zy<&-8f*X0E%Wsj7^R~+z%~`s`#H4GS;!S6T@kjE&xt>R_YaM&bbHTNDZm=GRu@h*Z1anyZnE{1l!1rL4Yd_ zTn*QgVs10B`1?s22a~yZ8GbsVBVKxd?7pbvt|qFFYV!Dqg;?VVrILgGqs&a3y?oL4 z)t$=k<7)WnH*GD3LySgo>mq>o zbxZE=6I%N~f>zCZU?@9o>*ToYrEtq1qO@SgeoHM*&wO3iT}1dLEnBeBleM z1&e0A`c;E}%GHB4Q1>OY>zg5yiNKmqYcCwt+Rp-nF=ZfxeDGc{hdV zg^1}{z?uNt)dDROd0vCvU?wJ}_=dWVuCz~)BH8I(ARs?ujK#tvCg=Jj&P6U~LH&$L z)($$p5oPWu%Em1w*gh<2o#AYjaRQ}h#|C@IhsL`~;f9B1DpTJoQ@)XMWioZ(o5A^# zyCEQ#q^{B<^*EOAE`$XHuX+UcYJVp=7a?jqT-+Kc>ke1)%@%CnB(HmC$w0p!Lgj}P zb42Nae!AH^S}^5$uh(iXvxYv8lZSVeatJ3ggiK=Yh`La(fbtr_Q^@D17NXv6!u)mX z3LFr$XDv0mw`MsWd)MK(=UIv2Pk8GEc}vDF$mxQBMl-9o_z@f}!g-Ww>p0SlLMZz~8*>xNY{K=2>*)7C z!%(hHJ?S@$6Hjb^459yAi3D{eND~|121W&c!f5y*3=iR~lym&T-b!~y{E82Vct(8l z)$^44q0nF~Id)^g!KF}jg}Z)ggNkZ{_oiZl&$k3xtTHv{zUq(Q7|DMJ1P`P#gabmx z53DjI0~%}$r=xn|XYN}?9M+^OBszArbfR0)a!Q(P;p8`+&k z?S}Tt>2>SPnJRaOZyAM+e#G;CV&=IB*ddxpAX+YG_nQ@dpg)@xI6ea~_?jXss5;A9VvL!jF zwP%|Ha@sH-xqG(Z4herjH|iE+iVEXHhU=o97hw*n*FgNSE&)bOVWI-)$#}KI-D;zb z^-*Ul$O^$#Hp6AbnU%?OGd0DjwNWjESR95cxpEuU!S+x~cOm{O3>qZbeqH0QE^MjTb zHA(TNJ_K2k$sBlvg*N?Gb{S@)XVT$Dw4^wgk%P3^!cL;ahhFD5-RO=S;hNjGJjKxo zJtz@qLDC+kPv?%zM3$Zzt2pYv(%v;=KGXp%eH7$}>;YeTT{{rm<;pUcxooks%oLfs zhB>3ui3ZnPW&aT>x@%J~mLi%&9d4QXYyx9-oP=ZO$kx?&-uH7A2g@~rGKchT@_gjC zxi}_xTyYO#^j5t1m2jb6;xT|lv~xldD4(HCCC`8k$Yh(%T%AZd$D~>n%F=L+mB6wi zY-NvJ&m27eJw3je@?c=RL>6{`h=lVC0nK3ragg|)#?FFJb{;&l15g^)MsYAJ94}`bi6zE1G`>n0q?;a zae)^hS&au-mzo-~`k91Ado~w4uIU%gMm&v1IXH+Rc^;9u&CvHn0wydM787ME z15N({S)OFHAKtI=k)wI{10T*jERxl5{yeM(KVAESc@b5P6XWYy(is3!xIVA^uQGgs z+Y?FJyxKuIYRbHCz)YnWFF{7Emtq#2(9c+jz>xx>eS?E}M5GtDqMu63yTdt)b3SeJ zgN&Mz&saCtteWrlT|>dk@&}yo-WnuztH2CI?5+rS!$HWpT{6o-iQl(8Vmy|u83@^v zvBc(V2e`da7VmqiAu4*OeGWX54v>-#l#&<5dWFbnD)+UK_Tz->`Zo zSZ#Boj93$lU|s39#p?esx{|0xN-h?upmNyOFa|yPp2lLKJ}99-BtSX`iGetgx9)St zE~T__H+2(qYEK-I7hu9WH{7C)-E920BO0xvpgV96z-4iNwe^@3gvVUXGj ze+F2#(n(*EdAf!lmY)&5|L%w1oFD5hX9-Hz)_Z{=#P2$RItZMRqJBCt&vrnu;=6;W zyLpMiGCTsueh;F37TAgzJTq2r^&_=B`Qf4&iZINegKWuTkABf2enwfX2EXf@xB z=QuEPzW1p{=Qakku{x54ppp<13kKqlp36LvtlEGrX1dq+!Zs(mBia4mK37nbh`j-cs|4!hXS7e6G29w`{=AmMT8OBgvNgO56dqMre^9CM z^*3+PI9rHG!-=AfsVLh}`-e{J2cenMr{eN0#=_TPjK$G$HCuHal!Q}W`bxM3Etm&R zQU86iO3#>bL0X9i<^!AAe7sgN$@3t|FsD80eVSAI9t<$bc3;z+Wqhl{w0Ks>qUmdR z)fZyb7tFI0C*>VdAp0FmSYU)2UVpZ-hb5CR*>qN1Jn|T`a(>DYh3<5AGZX9de388F zA8%gWU(xRDd=F>CuzFNSC$IrZ%*Q7uh~BySIOivJc6aFR*14>F9GcleKhYoEP>2}N z1A@ECUsryFnQe>$zY!;J_-&A=5yA;hvm9UIBKZrD&x|G|CouCoKQ|ui)1%dBX%O=; z&W{4Uh!Zdb=?+E;682|D{bxr%W=5l#{QSoIN7E^Z_hEY_KPz9`P+?nLiMfYgyngQP z&$2CM9`7^UH-P!)#0gF%`Mqa{Ce+CZ_K?o{s68ajv-xjeTZ5o;fIfuZSNM@ zRpkXX^xnmCgXY_pV+fbW!7N@De!O;C_iiPv)wPZZ$v+R)=v7ehPp6y7NwZ$1&|OoL zzK_EM%5K!Ci_z*exeS6VQp`Nb&-k24mdxn?=D5qfW`kZ3A~}Wp`fV}qmlbU9dN6;v2L2krU1B5kf0SWt zOpm48I`hyVU(%Ab!JT49y()=+u$egbI>THFVa^&=^dCO+x0T`aYxD(*U+1B`ThX=| zMeTg5!ChJ%*m1U%&Y)2(Ak-qH?t>e}6L%az=tDfgqw4D%aUU3+u8i8i1o9$Z;@Y3@ z%kNivq`B>8r9>jUl81tR?F5+P{QV|$h7$b!sE42NZ=KxFL(Q^}>e-)HMl<&oN?2C# z-+97k*sU<`Cum(*A8%>~S4KVOO76H1gigo6tcInqri@QKOF0|!S+at1<;9gArIdb^ zBtZ_Qh?B!_(j3I)l5npnP?yS7!~tz}%;cg-un_%nbIhmgjGtE^I~J} zOR2C1B%l8UR+*JahU%u^2^sO=e{CAU`=Q-?Vs2 zTTV@K8Xfi88CJ8EfK-!9_o~I&c0~Spyb9&i7Q6pr5{{{pDt(8OvyC7Z`UzRn8S{A^<!8vH?{*CBA+>`4;_M2E zJS**oPNe?oU)&Fk$p`%(y%LLm5UB)8W9Uzwq3G+laWh))twRqoS%jLTyOZ4R($+!o z7~%=xl)6K^vdEv2N;G9J%`@->9G|&x-Ix5_gm-hgS`agevO@AFHS9_@)OF%is1v5H zJFxLdO)Axr|u1Ux$C5S3J(a_AIQyzxV2vII!`Zp)Ztsyn^p)$t-3&(+T#VwL^dDlxauJ@X7%dLyDp?4i-s+NdBO!*l~ z3#rK=;f}KRU5WbGJlw+1qi6oZI!;wX(CwfdeAF%j*%wf`=oM!DhA$<-UN@YkZyitpLXVsZ zsYb+ItZj<3u(fL>$9z9BwcLxwmJvhk4U1RlLX0>fQ}EqXnN!WTd>k0{O z_hZ;sNlFi6c~@3TsfTZwQUTBjpTR`kkwo3d-do7V$XAiddmk{5HvtH)-FbazS7r6T z-f#(aKL{$jjhqu~5o-sE@OD+=Zur06%s8s_SSoN=?>aU_Cr7%pb}5^7lne@%>Iwdq zA7t#^TgolfcwA8Q*n?<3T<|O4C$h*IY!H2oRkJkemqUZ+<1_;_V&C z-P$%r05Zn7fzi7o#?R2IpAnTWyV@@@l2z)7bMT|iUW*T%_e5pTHjKzuv69tjQdK*W zEBHoaj5klE$#->l%f;#MDI{Wl^cQ!4r&JbgxeJs%f}d9(`}fy9h35JY-Os-blK6wf zF5H>q2%=COLpmo4!f2lO_Tl-nggubfYZBW|RJoJYEk$?fQlD<|syr=ax+m0dW_oK_ z{8{{#q=hbSSRr4>CRCc~v0!vH_7HnqU+O*mK(3htpnxga4l z{MAdo!oNUqd)kAj3j0Kzd9K2+Sgre8LJihYL&YBdpKk@Y-HGexYY4zq$5OsK*Gxfl zKt{NtdOms+Yam^LbRKxoL%VXtbm;J_-#2-qp!TMjCClX>T@{$#YV^0Ing-A z{|~IA3kxYLF&SsgXVDZe7?YCpT;!TtHOmb-?M1*Z53~?HalZ~Z1Md%p>k}(6&kur= zN)rriEkubqjlnJ52A{>g;Af3NgC&hnFn1nNgJ5N?jy78y%38c1#Z?h#HR_Ar$OGFG z?v9*pThyW3u{*6K&o#+Yv!Yg+#ZBVtQj6okZBsRAijcN^qMHfIeEP=(jBaT%yrb4; z8h~|_0KR4K-U8Q1ginYNq39i@F9H^@PYEz<_SXOqM4feQ&s7L_M<@qMl=rsJ@F*S= zFrREFW#^yzf$S0=@Dj7R2{MER2JH}&Jxe7|MT;JNCQp4dyJ%2D@9`2hy3r|blP!3{ zJUC(VQo{k>c^22(eUS=|p2SIRL?mvCNp6aBNb2q`Bwwst z8N%UNu(AMZWjZ_n8U~<70Z?nPshk=``TSmc2P<}z!sZ1Uf-HJ1KmnK!pTbR^s#uf% zr{BE#uYM(9G-8!0ncNhyd99>*t!ywWr^--1ne~t6Bc`m(ucKjlghJBgc&*?8smW71 zYXtwU3H++rgj$JK@TYBtNAI}$r`y!xp98pNO@03Svik zY|jcX0qh~$WGDRU$Nchh?XrCO|2PFVBLHrJ>+7Yi@>A!GclnHWM)4htLknym1P(I{ zZV&jDrM8(ygPjKwv_BV&nCua-#E@pObFsQfOFq0l?`@%>&yRYq;AEUT^ zT(V|(`J!&z=_Pd3E2-xb`QT=PMSi-gzHdqBu_o(mukmscpgzgP6S4)q;h=18}|6;Rw{Xs7&-Yp{PA z{Xj4J0k!$DBl;gs#ZJ{dAo%+40dFsdTL5M7TW9bzvH106@>KcED#MBW!qUG7tfWLO z7%xg05{7du{6EyJt_Hw}{GD6>s22gS{c9&2Mi8z)h62D^(4;W8T1Z%NdLaD8F?@{{ zL|9go@>}N&E;{cz1pvP}u5#)M<#SvADDbQ1#11>EA6AH#H1B%<S_p;+o1o6Z|>) ztGiVE(ial7F9t5CZn=e%QQysN+Hi*Nt< zV_@@_Kdy*en?d()pNbx_iXJs2Pwls$|6V@fha9=D`%$=&=Nh<*^tY(Kk>+W6Cc;Ow`rs7i_~|ir=M;kW zSA}IOkmL8Q6L9l)&5Ytgz-XqHHFf5bA6;|GWC8JhgX@pCKelB%0V8%^2)?UHWw$OX zPGxJ3_qldmky3n!?zy!96QsZPtWsmO>mpz@W$W*S7ZlRQBI6!&fIg48(7u7Wi(=|v zxg7}o6A5GL6N5|I@h5xgc09*>+UXOq*EHXg03RU%p`!vjW5K`o3;Kw@8KGkD!SC-m z0k7I-e#cN;C(0is$R}3shL;}zMaSoh+C4v|p5^Pui0yc~ORrE=VvgIqSP>yepI4=D zfsZng%)f3K=R)A6FVkT!pG`Xi?_GU?NctB-*q;YNO0m_GVWG|JElt9aY}$2z$;faj zu{e)-52h?3L`}P+n}#N^ZyJ0?Zvw=E9Y`sM$ozJ7I|ZaO=u8VtGb{Ar887Ectqp&} zH)iO)aH_kR!1gObaCbg1;oL4vKmStpf^vCvcvL)#Qm?zsMGDwMDf{6Bd=AyhcYop6T4i+Z0nE7p>%N0;$1ef3zn138n@k{47O%t`k119eQ=aJb0}GDv>YN za=ej)w^Z?#CfRDqd0sIuf5O~ysDiI&{1S$$Z}3WXQZQG>-9QTXONi6OI5Qn+RcTY4 zgPAA!ODA()I!WVQJi@M7i1q@5R#-Dsn@{3#=K=$lftv_99~Ze07g^?Fp`{Sep=euH zJ6o%@MhhO*qGpcV1W+x=6)CquJ>|jv9|A{ZcO;SL0{tTvu_I^PcXxZAndHT$anYpEiz_zI*EBn!%6cz;BX3`CDMlc#)JzWOx{W8USJ zLj)9AT%$oSOI*(;PrZdrIsA*g_~#By)8)l1mx1BLEkJTExDzaJ%`UzRaEPpILfC!U z)Ya*l1OiVx$Gg zB~EECbU0NBqNHpaF=-)BCBr&k3miRAE6OB_bCbv(avr-XUEv0Z$J`Y;-4s*$uOzN( zU;^@r?;s2ABxH_U*W~^gKgE`>FqJ^Mun+SP1`l9{0Wiz*8Z8;BxGPFMAY3_Gvn<4T7`UJ9t1_(adCY#j{O)Fsb^QjI&^G zlkzW#!ljX*pe0_<2%{10^4L?2hfQ8~u*VG9VyXxWH~*YlGbPrfyH!?hEXd!%FRobv z>bA7hq*>|J02kMmmU%p{rlzL05MLgaKVL`vp0?PZw(k6owtO#tS12VAfCsVBjv_W0 z_o5Sdh#}Jv7ur$vI?)q8}cj3?@MS8a*TrtxNhE&HEX*Js>kni250_pLzW8 z2fksr5zj6scGqP@(lt~|;6>PW+l~UaKCF{+**4ny6lAYwzn;4PI%J@8zfEQC_kJC^ z>GmD|RBZigDZ0Pn*H$5(Fk6(*@cq6_UU|QI(ca^Bt{{lN?TS&qi-l};;4NYN_2aCz z>lgNSPlcG1hjpP31>IBz8}S<^R$))jxTNFrHc>Nz-6*IB>as5A*mgpAH|eD={#dSq z$m(v9)Q0Csmz$BhvE!8WRWL6xx@&OEl%-MMj53>Dww)|niu^$P=Fcem_0$Wi-?2nc zZiiffX3hyY=m59Y=x@7{fo`wfP_{rKf~2StU5Ynsos>`QL@FbOh+}Rnh%Uen8@fu% zY?+OXfEOJPIWF1M6#IyxxU;P7x?^utKZ)PuotpTkroKyZmdRZq4o!3I{vcn!wNc|? z_N{uvIJ*#1S(}DHf8G!sVZYd)L7-~ZsR?hSR&l9_H!PIO7IZR$LPT=>`UUM99V-#e z_NuOMH`g3c6>*uC{)5gN;nf)yQ(xNNwP?_KHgOU~Qs2&^%j}*$WA8^|glRU1F5A(s zs6S5XgJ=khxLW|wOnZ=88hX1ZmReLhc?*$It@)+rg~Z@&SABmbSQjywQ>4@Q z50tJ+m$@BQBwR`N<>_W zB(-`&cQb+EA1H?>U_~)LBS`6T+*L!pOD+ph87&thPpLQak&$e(V+BcnY<|zy)Y$uR z1Bj<{S$osaE7lQm#gScG1UmXGZChd&)f`@AK7Q}Mbj;`*KLPbOe$xIH3*<~F6Y^L=;fNV)%1! zlQ;Nx!;LCi)rCZpESv+%e6BuwMZp8DnzAh=AM=xT zQ1*JfK06D!kBRzSE+TMn^!^eZ7nt}$6mkK<+dNU9YP$~Ofl?jpG1XpWPB~asFBP#4 z>qz<>YfRox1px~~5kh2cm&#^t9W>l{K%z$_g4LY?-J&>7E5}5O@0n}i@E*{jb7NM> zuFjq(H^Y5{%5r=@C2(}L?b~B^m#Ifg?ftDJ+Y&dKO-`bXXD))ZS)QYh4K-fK|GD<= zEccuL^H{#{&{cW?lC4E~q;5wiZ3`uj7#?ep@s1zfJoinz3I4b0VHVL>h&pZ@RdAe@ z*#?}1QfF>*0Dk=z&QB9ig%lklZvO=hHiqH|Ged`A99*mhpDH4RvHCD+CQ5C|`W$1( zU{L@RO`6)IP0p&Y_J3|Xk8n9q6wjibHgT*#L0V@v5KPUm+h zcyx$MYq_Z9&q%HFzzNaFg%p>yo1VGnQOb#&MKt@rLg)%D>gb-CM!B{bn}DD1d#%Pu z(+>@N#ZKpiFvHBpL)nJUR4+Zanl3k2C@xzmzASY)pJ3F{$oetF^V;X|UV3DbEXPl; zAtsCXtQ_J~6MC<|x_K}w8ec8G5ZcJR0tEI5HgmcbBBq{M%1 z{`9qI_aX((`v@ZnW=Lsw$EQDZ_)>i(HN@%6_7>GWO|*JvpW z^fx#SjnV5jEDfq=7fITKd?1;x4V+kV^0A3JYp`=7OEri|0nZ?64d4hc#tQN7AtYh- zza!2_e^cWO`GB>>izY|_62F6-p=FcD#I=K}aQiZkWRCN8-P3%-N|l^-!f3qyzPCR> zjZe%i$O9np6m~oTO;J@E6Yj!b8MQyo3fFS=DIA8?xpW6C-?K&o2Q5C=IbZF zZ71?~3}W?4q3}z~6eK@xg1*y<-!1gaRn1{W&J%n-kSZWyHDRDyXF&IU7O%P~*u|*h z+@poRIf+r~rNLM&+we}Jz0o{W%N5h3N;_3KPJq|s?^ija+P6Gc3Yd29zupr zi2+2qyJ2V;5D*Zg2Bf>Y5tMG}?oJWu?ocU_Zb76GJ~+PWd(`*)&Uf~8&CK)Tx$pJt zJ!`MEt~Gn^tZaCu`T#qUm3u-V?ojTPHgRQicYV5@K$Qy2o0H6a`z-SQ()&E5K8-e5 z+!xsmFUbw7`V9ga8H>ioA~hobl9&&(mm_@-nSF^r4$!gjW?kPs(_lHHk-yrv>J<+9 z@;v(zq;dtJyEcoxMt|*&w<;X`IbHe;qH3W1_BX7;D&83N*{~0)~(J#IHz=h3_ z43`5t+lva|pP=Bqn)Qm=p*?Xqmx?cAa)|=-4E7bAq6_e3$K0j=F;o%Na9N?{t0ryS z(w=~(t~u)GWRxAO@Y?h+Zp1#h_BrfzK0@~xW{?W8xmKCxl{*?zi)H2t2R*NrDrjUo zAoIa9^PW+!sNlLmvYG0QHIkrXvA3BmE!(5dp9R-3($svS7;$E;`9yhrG7(U>KsLi4 z;Mc8GgXkIJC$#lw)D5Bx|DqK{OLza1Ts64w6qklPJ6g%+cq9W~F$8+?PWq5wM4o z?@xd1KoQ|5Z|0EfP!W*tUn)imbfPs3kl({&FO+%021p85>M){*+P#SEQ{#`Zql_sJ zOOjW3!bX@R5AHA`gjOl^=8O;L$o8(78_>ql%bQTdY;nlP+tbbl$`|d(uOTOS=nm#E z1or6|u`y%B08{$_lrd&bw1h@`fjXPx79-u zaY5c^or$NBU_&C>FRkKf&h4HaRgITx^b)j5iki7EvO?z+Bu^yY&A-r7LIV@U7U5 zc&KGftd4tSRcD)OTg^eNfFHwAx+|i9MxBcS8$)Xrl9J~b9bJ*wXJnwnmSnqYD~T#5 zqpXGyl2BE%6c{Y~DuXs+(gb#fo7ziyJ|1)hBbLg~{_goMLsV{as{63>>*_iFtHTdN zA7Ebv#1bR1>O`QX7PcWT;IeFqB{GjReQZl4UT4|MTR!w?coU2){1S_$ZzS(@?Owh2 zK!j)FS_eA$0^UC0E!lEMGu(nb<(3rM0zSpT;S<2dddtLk)>+0ep~9`Haw0B}_mdZO2`eJ#z<}CByJ^uqnMr~yoZ~HM*X#O z0MJB7fz@HJ*G7%AuRc*GMGLzl(t5r3lD`;B+pIYx)05jIErh=BS*$%M8J@mtu-Lc& ztA?wPkuV`n09;?r)75OCLr;T4WsmNTrZY31r&^(wYLX&S>3csfaky%1otZ07TLicw z8^}s}yc)WZs3r$$!(=UX*%`FRyy24^k!GegCW2>A{VxDiR>JxQ+z*V_-&@=9{b#4I9}`G#;ibV!?YHjI1us?Rc5? z+VFDs0B!g0`O3|4y)gy{HMQ%6A!i1ER8|zqGLw}bFG!L%-iOx$Cl+P0TU;G2gD|;U z2X$JGjaDam-g+O$%Yd&u_kkRhA5yf==FE@4YsXS1hv&;F>8@xFuN*!b9pw))3mcU! zoL{^xC-XdTTuYh7thW-p+`WS6;Botoe4^RtG1pEq{~&yBwLCUc|4KH$07Fj57G2s7 zGu~pujxR~gft@E(H!Vulwn=?9+S$rUG|H8*UeM`_U(V$Hu%pxPQJFJ+o}>?7>vXLv zJM|b1OkS*v4%gTn;+jW4uH`S}^vX zF2T*oVaDuTg|WRL>v zltb^D)jqMFJ-)u0dR}rNj54J~kokY`v4{(Di;(9T>kEH0|!P z=A}WoeqSvcGxSi}w4*29--Ni+c2SgcAwx=^_t+Bdj;SMG%F1#);%H5v=fufqT~O15 zo%|_Z&RAgHtEe@TX!J+efUijZ9%omQ`k}4JFfc}UVPGi#InIh(+Zlh0ueF+?dbsO^ zUP1H5)5dB#*!~3v3|dZF_z{{w@fEBt7@W4|QosN*Rdx0DP6-f_Qpcq+!Xa3zkdk&R zLzMME%mU(0qmcYX@e^0etZ-)QRmqn#liD^GcQ$``s z&c&;6=3X99rc1TemXkk%Qi0nG1Z(>$r5KiaUGCap`7DiUx5>x;RBgvbI-JJ^@l5A? z8E?r(Cvf6xdSXHoy*P3KU25X^FQmjjsRk#<#6KKqX(627n9U^}Fg0s7EYSYMO=E#p zORoN+xH7zyxDvprp1w;|^qzdX?!o*HGmEO{E|#uLVSKU-TJa(0c%i7J%)7_>3Bn5O zZb7Qa%KBy`3Cd}os6o2Y+n+hDy=dyV_9NfV*AbDg0HiUk)y4F;LmT3&j&i`ypeT%L z{DueN5~fnYg9LTsh4tf-$TT&t!uXT?+-%!h3`4C-9eO{Giz#gS5#bU;+yKZ{QI-#) zmaGW%j9$sO>~kV5U%wvk$@hXeG{x3vsbG(*I zSiC|RkIW**OJdpGgL{S7%%#`b@7!sMA-rD}RdO#uX>DoBptgPHVZOdFp!YP)Px>Iy zuYAcCvBO2I%~dDzfD=)#2N99VMZSI9??5hLqVDO8QK+@ElDUI__%l=~*1Sb<=0S91 z(^z%}SqcrK_j~G_CRqX1p~NE-Jmq}_0Z9VMlgQniP1hI-D~$K*}U=>Pfq>Ag&AB>yrU1Gh~8~_ z#+M3h9}X}PuO-q0`iUn;1<0L_$)=W!-t7n|R`x3#&n9N8@%IUEf`kFQ8A(YJeA6%Q zd!;>(=fmDSTfR4b!O7p8!>HDT}wybpSXPOXYI|OAI7X`UT4R^+F5$PLfYS#;C zCph6&K)W3$#oa^jj-YWP3byS|sNOGfyAeAJ(M8`W!{ov>=<=^1bb*IlCCv>%le7zy zVM$rdl6gt^$&bi*)Y5w}pb>f_tXTrqX9$o^Pt1Z%#od72)Q;K1WJS>RXM0-L^V&^( zcPdQTY8|s}Zt%JZXQ_hWQ0$62E2lOW2*aPKQ_j!EO*Av928PaTEcFah&xbf5Dyxvo z5kraRDanyqVn7p=TsJ!?wA(pM^|mtMM8(3?q*ahYbaMiIXgXO7j>v4#U||9y_F{KM zLgBH!Awx=C0qZ&T%Ss97>Pjr?D}#n9Sz5bQXvYz${4<{M-Av8Y6oZScr`(DRz_Hg$ zs~ThCWHX#vZyCfV;?`-mL3V4kkZ{SO_fNae5~R{I?2p=LQKq;%MM@%il6zB*wl|vB zEQXyxB8-@%77PUG_dd_Rg=JhPH>wxA#1+SJjNElQHt?vTc!U2Mc@qUy(xs&tSu+3w ztE*khC*ob_I-|<;qAgeJoBV_k%a1C!j%mSAgoR}6(_xWNDJf+ERM%61%f_*2Q)&VN zNfe~GP5%2y{&yZ*KZAzcE2EY?9sz+TU#M&p`IFa3?%8csL>feSQsgEO^TKUi;E^B8 zx#_OOjJoWFUyU>6gVGH3;!)Y_I$koX;6YBZ8vBTZVk3u)7=AP9;q95!x3#?GRPXw< zFpnNMoSI827NP#(S@ z8cDIamC}77!7Ei8v%rKE9{wu>76Q_?A!tuJW<1JA^stc#z2_1j8zF8lN;YuHQ2=T~ zOpETTBC^;g-0}LDR^38=mFWqtFhl?YENh=o?vDt7k4z-PDrQJeKJ5BTiIjcV8x0z6 z6iE=xFS`RLh_XtL-@l`SwvG@Rw-402=>zVg${Ou_WlpY&yh=eITxxj1^I3AT%QkMH zG$x_K!W*yTndSl+VON-(X5;m}hmI26`+O)bRq$IJ$56g-xpu%|;0x z6zPXx*t*q8$xMYeR@8sO9xUvWr3%@}RbxjnNMwa2=^|;z4QQi|)URXd8^SFWk~(D^ z&Wrj8^*_A6hi$kDun{WL*@OWtea=CfBYDaz(@V3(7tW1ynnjP5=0G`E#TTRweEeYt( zcWoD(b7VH$6k6yp8|;ARRq8AXZFnS6Wnp{wBQ~fkU~*&BfUI<5q$_Tztly1I@CCZ^ zH0kEX^$+FDZ@;H3s+*fxz`?-0xRK4gmG%54U@jM81pgK@%C_fF>#WU8B(fgnOGYet0La)0;-T%ap_8SekHzK8|JDt6@a& zBz3)Ur12!r`|9cxLm$}1V>CBi8A1b$VL;`RvJDP49xgGJ*$Qyx)tu62D>IW}U4Yo? ziMSoOC{SqGUG8}`>o;PwUT$VrGf}iw)jgzB5)lo?LmV7W^VG)|n6<_&Q5-lTRx21* zuahlzX7sJ(_GhbvpWWuO^i|`+kBYBPu?D-;teg)I?0F5D#qB0b-+%gM))T~%Ksv|C zU0@WS>^NKe?m+^g81Q}l35tQ_TW5Y^xcA7V>)4-xR%b18b<3{;=QrzQOa%H-;)*cx zApii~%OOe9sD~x)neg-j;qUF$`6s~#2ExRhdt8mbA7$nlQ`@c^81cTL@qwT zaG_pxzUX9x4MC3ZX5oiBO}^CK=!pV3EK;dnNN}?A=I8K&JJZLhZozXUFRi_1t7mtQ z3fwm}XciwlGZb3T0 z5C=sHL8xs)yEP-_R6TFbc%G}HBNjK&ueXZx`VJn6dmd?+awrzt#GT{`yd;e%*+<85 z%?rB}TO+8vT+%2Ah7zIl`{5dNlF;IrD=0q)LjAp5x=Fze*cEH0`L1*5UxCQ3P?~GR zElKmk^%DBb)FAENpcTxT{tpxBk;QqmNi(cV(xd)1nq0yDqsZ;pT_h;&5T?*D?#=H_`_EG^<7a#ph}Sh}-5pD2*EYS5ypmf=E0@AqaQs`8ln zc#S?#VC5nW#gRD+ra&@n?#+84^zXvGjt11uEvupSd65UvHRG1F{=Aq3P2 z(4cv}V7_K7G{Tu2sEtTh*-VkIDkI&<7byIbs7ibJsu&g?SI?jXabt~ z7K8ULdamF{qA9KuMm8>v=?R=&CqxAg( zy&eaY<}tl>b??ExfcNaQmG^HMm;+Z7KBhE%N`$KlMv$vrtV=m`Ia&U={k1%u`^AS= zL67sQrq_D9-d@Kz1G(7)@Laf>jOp%pHBHU6bo6`_%#2Jc0lKv@(Si6{L;x_>)5Dh18{i*7DzxE*HOHW-*MC?- zK);%KPCku0os=6|42pt8-u!`_hyhP4GG8QZhQylm{hHG;Q!&4;`mhY_rk@0aRNHP< zKCM8WDSm;hv84wK)7BD&M!D3JK578o{CsCx?$c|S=rApbYS2p2qCjdD2w~z{shKI7 zx_?qci{FqE1H0zHyK26)zZFI2bB&i9r^a@UtgUUrn(`5IN!Ew&TkBikSIGiuJKwma z+s#YpzjRLL>jfL&wD#KqQ(VXMelk6OetFp}f%n$bED;0)ErsPH#`{)$L2jB>e zjP&~l;xyHwlj0L~;9^g{pvsg?Iu7^C-`;#Xa(qEI?>}IFQ@Z}i@O$jJ6`=k$ZVh+dTz-?I{%-Sk#J36DVr~&@e<8lh zQ~xvWR-pRZxWxfr|1N9&L$3Ot;kSa-KjDHm@bB`~-!b1@&xE)6 z@+Tpx#&1vaC&FK{=Xdr$=g;r_Ilh|z1^Zvw^yh;9IST$Xa-#MBpTez?pD|Hc4)I?* R4C`iBzq|IJPay-WxPay ${ijapy.version}
- + + + com.ruoyi + ruoyi-alipay com.ruoyi diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayConfigManager.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayConfigManager.java index e8344d86..180a35fa 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayConfigManager.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayConfigManager.java @@ -87,14 +87,28 @@ public class PayConfigManager { } catch (Exception e) { log.error("实例化AliPayApiConfig..."); // 如果Map中没有当前支付宝的实例就初始化并添加到Map中 - aliPayApiConfig = AliPayApiConfig.builder() - .setAppId(payConfig.getAppid()) - .setAliPayPublicKey(payConfig.getPublicKey()) - .setCharset("UTF-8") - .setPrivateKey(payConfig.getPrivateKey()) - .setServiceUrl(payConfig.getNotifyUrl()) - .setSignType("RSA2") - .build(); + if(caiProperties.isOpenPayProxy()){ + aliPayApiConfig = AliPayApiConfig.builder() + .setAppId(payConfig.getAppid()) + .setAliPayPublicKey(payConfig.getPublicKey()) + .setCharset("UTF-8") + .setPrivateKey(payConfig.getPrivateKey()) + .setServiceUrl(payConfig.getNotifyUrl()) + .setSignType("RSA2") + .setProxyIp(caiProperties.getProxyIp()) + .setProxyPort(caiProperties.getProxyHost()) + .buildProxy(); + }else{ + aliPayApiConfig = AliPayApiConfig.builder() + .setAppId(payConfig.getAppid()) + .setAliPayPublicKey(payConfig.getPublicKey()) + .setCharset("UTF-8") + .setPrivateKey(payConfig.getPrivateKey()) + .setServiceUrl(payConfig.getNotifyUrl()) + .setSignType("RSA2") + .build(); + } + } AliPayApiConfigKit.setThreadLocalAliPayApiConfig(aliPayApiConfig); return true;