diff --git a/bootx-platform/bootx-platform-service/service-iam/src/main/java/cn/bootx/platform/iam/auth/service/AuthAssistService.java b/bootx-platform/bootx-platform-service/service-iam/src/main/java/cn/bootx/platform/iam/auth/service/AuthAssistService.java index 8391f32cc..d012c4d1c 100644 --- a/bootx-platform/bootx-platform-service/service-iam/src/main/java/cn/bootx/platform/iam/auth/service/AuthAssistService.java +++ b/bootx-platform/bootx-platform-service/service-iam/src/main/java/cn/bootx/platform/iam/auth/service/AuthAssistService.java @@ -34,7 +34,7 @@ public class AuthAssistService { public void sendSmsCaptcha(String phone) { // 判断用户是否存在 UserInfo userInfo = userInfoManager.findByPhone(phone).orElseThrow(UserInfoNotExistsException::new); - if (!Objects.equals(userInfo.getStatus(), UserStatusEnum.NORMAL)) { + if (!Objects.equals(userInfo.getStatus(), UserStatusEnum.NORMAL.getCode())) { throw new BizException("用户状态异常"); } } diff --git a/bootx-platform/bootx-platform-service/service-iam/src/main/java/cn/bootx/platform/iam/handler/UserInfoStatusCheckImpl.java b/bootx-platform/bootx-platform-service/service-iam/src/main/java/cn/bootx/platform/iam/handler/UserInfoStatusCheckImpl.java index 4d67e9718..1759e864d 100644 --- a/bootx-platform/bootx-platform-service/service-iam/src/main/java/cn/bootx/platform/iam/handler/UserInfoStatusCheckImpl.java +++ b/bootx-platform/bootx-platform-service/service-iam/src/main/java/cn/bootx/platform/iam/handler/UserInfoStatusCheckImpl.java @@ -45,7 +45,7 @@ public class UserInfoStatusCheckImpl implements UserInfoStatusCheck { return; } // 判断用户是否被禁用 - if (Objects.equals(userDetail.getStatus(), UserStatusEnum.BAN)){ + if (Objects.equals(userDetail.getStatus(), UserStatusEnum.BAN.getCode())){ throw new LoginFailureException("该用户已被禁用"); } } diff --git a/bootx-platform/bootx-platform-service/service-iam/src/main/java/cn/bootx/platform/iam/param/permission/PermCodeParam.java b/bootx-platform/bootx-platform-service/service-iam/src/main/java/cn/bootx/platform/iam/param/permission/PermCodeParam.java index 060b38eee..2cc03d44e 100644 --- a/bootx-platform/bootx-platform-service/service-iam/src/main/java/cn/bootx/platform/iam/param/permission/PermCodeParam.java +++ b/bootx-platform/bootx-platform-service/service-iam/src/main/java/cn/bootx/platform/iam/param/permission/PermCodeParam.java @@ -30,6 +30,6 @@ public class PermCodeParam { private String remark; @Schema(description = "是否为子节点") - private boolean leaf;; + private boolean leaf; } diff --git a/bootx-platform/bootx-platform-service/service-iam/src/main/java/cn/bootx/platform/iam/service/role/RoleQueryService.java b/bootx-platform/bootx-platform-service/service-iam/src/main/java/cn/bootx/platform/iam/service/role/RoleQueryService.java index c413a9800..468981e7f 100644 --- a/bootx-platform/bootx-platform-service/service-iam/src/main/java/cn/bootx/platform/iam/service/role/RoleQueryService.java +++ b/bootx-platform/bootx-platform-service/service-iam/src/main/java/cn/bootx/platform/iam/service/role/RoleQueryService.java @@ -148,7 +148,7 @@ public class RoleQueryService { // 获取关联的角色和子角色 List unfold = TreeBuildUtil.unfold(tree, RoleResult::getChildren).stream() .filter(role -> roleIds.contains(role.getId())) - .collect(Collectors.toList());; + .collect(Collectors.toList()); var list = new ArrayList<>(unfold); // 将子孙级别的角色移除, 只保留根角色 for (var out : unfold) { diff --git a/bootx-platform/bootx-platform-service/service-iam/src/main/java/cn/bootx/platform/iam/service/upms/RoleCodeService.java b/bootx-platform/bootx-platform-service/service-iam/src/main/java/cn/bootx/platform/iam/service/upms/RoleCodeService.java index 484c35b29..1e1e60753 100644 --- a/bootx-platform/bootx-platform-service/service-iam/src/main/java/cn/bootx/platform/iam/service/upms/RoleCodeService.java +++ b/bootx-platform/bootx-platform-service/service-iam/src/main/java/cn/bootx/platform/iam/service/upms/RoleCodeService.java @@ -152,7 +152,7 @@ public class RoleCodeService { // 权限码列表 List permCodes = allPermCodes.stream() .filter(PermCode::isLeaf) - .toList();; + .toList(); // 如果有有上级角色, 显示上级角色已分配的权限 if (Objects.nonNull(role.getPid())){ List codeIds = roleCodeManager.findAllByRole(role.getPid()) diff --git a/daxpay-single-channel/daxpay-single-alipay/src/main/java/org/dromara/daxpay/channel/alipay/service/close/AliPayCloseService.java b/daxpay-single-channel/daxpay-single-alipay/src/main/java/org/dromara/daxpay/channel/alipay/service/close/AliPayCloseService.java index 4aa95a76e..f794eae36 100644 --- a/daxpay-single-channel/daxpay-single-alipay/src/main/java/org/dromara/daxpay/channel/alipay/service/close/AliPayCloseService.java +++ b/daxpay-single-channel/daxpay-single-alipay/src/main/java/org/dromara/daxpay/channel/alipay/service/close/AliPayCloseService.java @@ -80,7 +80,7 @@ public class AliPayCloseService { AlipayTradeCancelRequest request = new AlipayTradeCancelRequest(); request.setBizModel(model); try { - AlipayTradeCancelResponse response = aliPayConfigService.execute(request);; + AlipayTradeCancelResponse response = aliPayConfigService.execute(request); if (!Objects.equals(AliPayCode.ResponseCode.SUCCESS, response.getCode())) { if (!Objects.equals(AliPayCode.ResponseCode.SUCCESS, response.getCode())) { // 如果返回"当前交易状态不支持此操作", 查询网关支付状态, 判断网关是否已经被关闭 diff --git a/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/api/UnionPayConfigStorage.java b/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/api/UnionPayConfigStorage.java index 9e98c3f78..da6025f06 100644 --- a/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/api/UnionPayConfigStorage.java +++ b/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/api/UnionPayConfigStorage.java @@ -27,6 +27,9 @@ public class UnionPayConfigStorage extends BasePayConfigStorage { */ private String seller; + /** + * API版本 + */ private String version = "5.1.0"; /** * 0:普通商户直连接入 diff --git a/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/api/UnionPayKit.java b/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/api/UnionPayKit.java index d0212c7b6..c05b77497 100644 --- a/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/api/UnionPayKit.java +++ b/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/api/UnionPayKit.java @@ -1,16 +1,18 @@ package org.dromara.daxpay.channel.union.sdk.api; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.dromara.daxpay.channel.union.sdk.bean.*; +import org.dromara.daxpay.unisdk.common.api.BasePayService; import org.dromara.daxpay.unisdk.common.bean.*; import org.dromara.daxpay.unisdk.common.bean.outbuilder.PayTextOutMessage; import org.dromara.daxpay.unisdk.common.bean.result.PayException; import org.dromara.daxpay.unisdk.common.exception.PayErrorException; import org.dromara.daxpay.unisdk.common.http.HttpConfigStorage; import org.dromara.daxpay.unisdk.common.http.UriVariables; -import org.dromara.daxpay.unisdk.common.util.DateUtils; import org.dromara.daxpay.unisdk.common.util.Util; import org.dromara.daxpay.unisdk.common.util.sign.CertDescriptor; import org.dromara.daxpay.unisdk.common.util.sign.SignTextUtils; @@ -22,9 +24,11 @@ import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; +import java.nio.charset.StandardCharsets; import java.security.GeneralSecurityException; import java.security.cert.*; import java.sql.Timestamp; +import java.text.MessageFormat; import java.util.*; /** @@ -33,7 +37,7 @@ import java.util.*; * @since 2024/3/8 */ @Slf4j -public class UnionPayKit extends UnionPayService { +public class UnionPayKit extends BasePayService { /** * 测试域名 */ @@ -76,7 +80,7 @@ public class UnionPayKit extends UnionPayService { * @param payConfigStorage 支付配置 */ @Override - public UnionPayService setPayConfigStorage(UnionPayConfigStorage payConfigStorage) { + public UnionPayKit setPayConfigStorage(UnionPayConfigStorage payConfigStorage) { this.payConfigStorage = payConfigStorage; if (null != certDescriptor) { return this; @@ -173,7 +177,7 @@ public class UnionPayKit extends UnionPayService { params.put(SDKConstants.param_merId, payConfigStorage.getPid()); //订单发送时间 - params.put(SDKConstants.param_txnTime, DateUtils.formatDate(new Date(), DateUtils.YYYYMMDDHHMMSS)); + params.put(SDKConstants.param_txnTime, DateUtil.format(new Date(), DatePattern.PURE_DATETIME_PATTERN)); //后台通知地址 params.put(SDKConstants.param_backUrl, payConfigStorage.getNotifyUrl()); @@ -195,7 +199,7 @@ public class UnionPayKit extends UnionPayService { public boolean verify(NoticeParams noticeParams) { final Map result = noticeParams.getBody(); if (null == result || result.get(SDKConstants.param_signature) == null) { - log.debug("银联支付验签异常:params:" + result); + log.debug("银联支付验签异常:params:{}", result); return false; } return this.signVerify(result, (String) result.get(SDKConstants.param_signature)); @@ -212,21 +216,21 @@ public class UnionPayKit extends UnionPayService { SignUtils signUtils = SignUtils.valueOf(payConfigStorage.getSignType()); String data = SignTextUtils.parameterText(params, "&", "signature"); - switch (signUtils) { - case RSA: + return switch (signUtils) { + case RSA -> { data = SignUtils.SHA1.createSign(data, "", payConfigStorage.getInputCharset()); - return RSA.verify(data, sign, verifyCertificate(genCertificateByStr((String) params.get(SDKConstants.param_signPubKeyCert))).getPublicKey(), payConfigStorage.getInputCharset()); - case RSA2: + yield RSA.verify(data, sign, verifyCertificate(genCertificateByStr((String) params.get(SDKConstants.param_signPubKeyCert))).getPublicKey(), payConfigStorage.getInputCharset()); + } + case RSA2 -> { data = SignUtils.SHA256.createSign(data, "", payConfigStorage.getInputCharset()); - return RSA2.verify(data, sign, verifyCertificate(genCertificateByStr((String) params.get(SDKConstants.param_signPubKeyCert))).getPublicKey(), payConfigStorage.getInputCharset()); - case SHA1: - case SHA256: - case SM3: + yield RSA2.verify(data, sign, verifyCertificate(genCertificateByStr((String) params.get(SDKConstants.param_signPubKeyCert))).getPublicKey(), payConfigStorage.getInputCharset()); + } + case SHA1, SHA256, SM3 -> { String before = signUtils.createSign(payConfigStorage.getKeyPublic(), "", payConfigStorage.getInputCharset()); - return signUtils.verify(data, sign, "&" + before, payConfigStorage.getInputCharset()); - default: - return false; - } + yield signUtils.verify(data, sign, "&" + before, payConfigStorage.getInputCharset()); + } + default -> false; + }; } @@ -242,9 +246,9 @@ public class UnionPayKit extends UnionPayService { private String getPayTimeout(Date expirationTime) { // if (null != expirationTime) { - return DateUtils.formatDate(expirationTime, DateUtils.YYYYMMDDHHMMSS); + return DateUtil.format(expirationTime, DatePattern.PURE_DATETIME_PATTERN); } - return DateUtils.formatDate(new Timestamp(System.currentTimeMillis() + 30 * 60 * 1000), DateUtils.YYYYMMDDHHMMSS); + return DateUtil.format(new Timestamp(System.currentTimeMillis() + 30 * 60 * 1000), DatePattern.PURE_DATETIME_PATTERN); } /** @@ -252,10 +256,10 @@ public class UnionPayKit extends UnionPayService { * * @param order 支付订单 * @return 订单信息 - * @see PayOrder 支付订单信息 + * @see UniOrder 支付订单信息 */ @Override - public Map orderInfo(PayOrder order) { + public Map orderInfo(UniOrder order) { Map params = this.getCommonParam(); UnionTransactionType type = (UnionTransactionType) order.getTransactionType(); @@ -389,7 +393,7 @@ public class UnionPayKit extends UnionPayService { * @return 返回支付结果 */ - public JSONObject postOrder(PayOrder order, String url) { + public JSONObject postOrder(UniOrder order, String url) { Map params = orderInfo(order); String responseStr = getHttpRequestTemplate().postForObject(url, params, String.class); JSONObject response = UriVariables.getParametersToMap(responseStr); @@ -400,7 +404,7 @@ public class UnionPayKit extends UnionPayService { } @Override - public String toPay(PayOrder order) { + public String toPay(UniOrder order) { if (null == order.getTransactionType()) { order.setTransactionType(UnionTransactionType.WEB); @@ -419,7 +423,7 @@ public class UnionPayKit extends UnionPayService { * @return 返回图片信息,支付时需要的 */ @Override - public String getQrPay(PayOrder order) { + public String getQrPay(UniOrder order) { order.setTransactionType(UnionTransactionType.APPLY_QR_CODE); JSONObject response = postOrder(order, getBackTransUrl()); if (this.verify(new NoticeParams(response))) { @@ -439,7 +443,7 @@ public class UnionPayKit extends UnionPayService { * @return 返回支付结果 */ @Override - public Map microPay(PayOrder order) { + public Map microPay(UniOrder order) { order.setTransactionType(UnionTransactionType.CONSUME); JSONObject response = postOrder(order, getBackTransUrl()); return response; @@ -453,10 +457,10 @@ public class UnionPayKit extends UnionPayService { * @return X509Certificate */ public static X509Certificate genCertificateByStr(String x509CertString) { - X509Certificate x509Cert = null; + X509Certificate x509Cert; try { CertificateFactory cf = CertificateFactory.getInstance("X.509"); - InputStream tIn = new ByteArrayInputStream(x509CertString.getBytes("ISO-8859-1")); + InputStream tIn = new ByteArrayInputStream(x509CertString.getBytes(StandardCharsets.ISO_8859_1)); x509Cert = (X509Certificate) cf.generateCertificate(tIn); } catch (Exception e) { @@ -499,18 +503,22 @@ public class UnionPayKit extends UnionPayService { */ @Override public String buildRequest(Map orderInfo, MethodType method) { - StringBuffer sf = new StringBuffer(); - sf.append(""); - sf.append("
+ "); + .append(""" + " method="post">"""); if (null != orderInfo && !orderInfo.isEmpty()) { for (Map.Entry entry : orderInfo.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); - sf.append(""); + sf.append(MessageFormat.format(""" + """, key, key, value)); } } sf.append(""); @@ -530,7 +538,7 @@ public class UnionPayKit extends UnionPayService { * @return 成功:返回支付结果 失败:返回 */ @Override - public Map app(PayOrder order) { + public Map app(UniOrder order) { if (null == order.getTransactionType()) { order.setTransactionType(UnionTransactionType.APP); } @@ -573,7 +581,7 @@ public class UnionPayKit extends UnionPayService { * @return 返回支付方申请退款后的结果 */ public UnionRefundResult unionRefundOrConsumeUndo(String origQryId, String orderId, BigDecimal refundAmount, UnionTransactionType type) { - return unionRefundOrConsumeUndo(new RefundOrder(orderId, origQryId, refundAmount), type); + return unionRefundOrConsumeUndo(new UniRefundOrder(orderId, origQryId, refundAmount), type); } @@ -584,7 +592,7 @@ public class UnionPayKit extends UnionPayService { * @param type UnionTransactionType.REFUND 或者UnionTransactionType.CONSUME_UNDO * @return 返回支付方申请退款后的结果 */ - public UnionRefundResult unionRefundOrConsumeUndo(RefundOrder refundOrder, UnionTransactionType type) { + public UnionRefundResult unionRefundOrConsumeUndo(UniRefundOrder refundOrder, UnionTransactionType type) { Map params = this.getCommonParam(); type.convertMap(params); params.put(SDKConstants.param_orderId, refundOrder.getRefundNo()); @@ -632,7 +640,7 @@ public class UnionPayKit extends UnionPayService { } @Override - public UnionRefundResult refund(RefundOrder refundOrder) { + public UnionRefundResult refund(UniRefundOrder refundOrder) { return unionRefundOrConsumeUndo(refundOrder, UnionTransactionType.REFUND); } @@ -644,7 +652,7 @@ public class UnionPayKit extends UnionPayService { * @return 返回支付方查询退款后的结果 */ @Override - public Map refundquery(RefundOrder refundOrder) { + public Map refundquery(UniRefundOrder refundOrder) { return this.query(refundOrder); } @@ -673,7 +681,7 @@ public class UnionPayKit extends UnionPayService { Map params = this.getCommonParam(); UnionTransactionType.FILE_TRANSFER.convertMap(params); - params.put(SDKConstants.param_settleDate, DateUtils.formatDate(billDate, DateUtils.MMDD)); + params.put(SDKConstants.param_settleDate, DateUtil.format(billDate, "MMdd")); params.put(SDKConstants.param_fileType, billType.getFileType()); params.remove(SDKConstants.param_backUrl); params.remove(SDKConstants.param_currencyCode); diff --git a/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/api/UnionPayService.java b/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/api/UnionPayService.java deleted file mode 100644 index e34a1079d..000000000 --- a/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/api/UnionPayService.java +++ /dev/null @@ -1,703 +0,0 @@ -package org.dromara.daxpay.channel.union.sdk.api; - -import com.alibaba.fastjson.JSONObject; -import lombok.extern.slf4j.Slf4j; -import org.dromara.daxpay.channel.union.sdk.bean.*; -import org.dromara.daxpay.unisdk.common.api.BasePayService; -import org.dromara.daxpay.unisdk.common.bean.*; -import org.dromara.daxpay.unisdk.common.bean.outbuilder.PayTextOutMessage; -import org.dromara.daxpay.unisdk.common.bean.result.PayException; -import org.dromara.daxpay.unisdk.common.exception.PayErrorException; -import org.dromara.daxpay.unisdk.common.http.HttpConfigStorage; -import org.dromara.daxpay.unisdk.common.http.UriVariables; -import org.dromara.daxpay.unisdk.common.util.DateUtils; -import org.dromara.daxpay.unisdk.common.util.Util; -import org.dromara.daxpay.unisdk.common.util.sign.CertDescriptor; -import org.dromara.daxpay.unisdk.common.util.sign.SignTextUtils; -import org.dromara.daxpay.unisdk.common.util.sign.SignUtils; -import org.dromara.daxpay.unisdk.common.util.sign.encrypt.RSA; -import org.dromara.daxpay.unisdk.common.util.sign.encrypt.RSA2; -import org.dromara.daxpay.unisdk.common.util.str.StringUtils; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.math.BigDecimal; -import java.security.GeneralSecurityException; -import java.security.cert.*; -import java.sql.Timestamp; -import java.util.*; - -/** - * @author Actinia - *
- *         email hayesfu@qq.com
- *         create 2017 2017/11/5
- *         
- */ -@Slf4j -public class UnionPayService extends BasePayService { - /** - * 测试域名 - */ - private static final String TEST_BASE_DOMAIN = "test.95516.com"; - /** - * 正式域名 - */ - private static final String RELEASE_BASE_DOMAIN = "95516.com"; - /** - * 交易请求地址 - */ - private static final String FRONT_TRANS_URL = "https://gateway.%s/gateway/api/frontTransReq.do"; - private static final String BACK_TRANS_URL = "https://gateway.%s/gateway/api/backTransReq.do"; - private static final String SINGLE_QUERY_URL = "https://gateway.%s/gateway/api/queryTrans.do"; - private static final String BATCH_TRANS_URL = "https://gateway.%s/gateway/api/batchTrans.do"; - private static final String FILE_TRANS_URL = "https://filedownload.%s/"; - private static final String APP_TRANS_URL = "https://gateway.%s/gateway/api/appTransReq.do"; - private static final String CARD_TRANS_URL = "https://gateway.%s/gateway/api/cardTransReq.do"; - /** - * 证书解释器 - */ - private volatile CertDescriptor certDescriptor; - - /** - * 构造函数 - * - * @param payConfigStorage 支付配置 - */ - public UnionPayService(UnionPayConfigStorage payConfigStorage) { - this(payConfigStorage, null); - } - - public UnionPayService(UnionPayConfigStorage payConfigStorage, HttpConfigStorage configStorage) { - super(payConfigStorage, configStorage); - - } - - /** - * 设置支付配置 - * - * @param payConfigStorage 支付配置 - */ - @Override - public UnionPayService setPayConfigStorage(UnionPayConfigStorage payConfigStorage) { - this.payConfigStorage = payConfigStorage; - if (null != certDescriptor) { - return this; - } - try { - certDescriptor = new CertDescriptor(); - certDescriptor.initPrivateSignCert(payConfigStorage.getKeyPrivateCertInputStream(), payConfigStorage.getKeyPrivateCertPwd(), "PKCS12"); - certDescriptor.initPublicCert(payConfigStorage.getAcpMiddleCertInputStream()); - certDescriptor.initRootCert(payConfigStorage.getAcpRootCertInputStream()); - } - catch (IOException e) { - log.error("", e); - } - - - return this; - } - - /** - * 获取支付请求地址 - * - * @param transactionType 交易类型 - * @return 请求地址 - */ - @Override - public String getReqUrl(TransactionType transactionType) { - return (payConfigStorage.isTest() ? TEST_BASE_DOMAIN : RELEASE_BASE_DOMAIN); - } - - /** - * 根据是否为沙箱环境进行获取请求地址 - * - * @return 请求地址 - */ - public String getReqUrl() { - return getReqUrl(null); - } - - public String getFrontTransUrl() { - return String.format(FRONT_TRANS_URL, getReqUrl()); - } - - public String getBackTransUrl() { - return String.format(BACK_TRANS_URL, getReqUrl()); - } - - public String getAppTransUrl() { - return String.format(APP_TRANS_URL, getReqUrl()); - } - - public String getSingleQueryUrl() { - return String.format(SINGLE_QUERY_URL, getReqUrl()); - } - - - public String getFileTransUrl() { - return String.format(FILE_TRANS_URL, getReqUrl()); - } - - /** - * 后台通知地址 - * - * @param parameters 预订单信息 - * @param order 订单 - * @return 预订单信息 - */ - private Map initNotifyUrl(Map parameters, AssistOrder order) { - //后台通知地址 - OrderParaStructure.loadParameters(parameters, SDKConstants.param_backUrl, payConfigStorage.getNotifyUrl()); - OrderParaStructure.loadParameters(parameters, SDKConstants.param_backUrl, order.getNotifyUrl()); - OrderParaStructure.loadParameters(parameters, SDKConstants.param_backUrl, order); - return parameters; - } - - - /** - * 银联全渠道系统,产品参数,除了encoding自行选择外其他不需修改 - * - * @return 返回参数集合 - */ - private Map getCommonParam() { - Map params = new TreeMap<>(); - UnionPayConfigStorage configStorage = payConfigStorage; - //银联接口版本 - params.put(SDKConstants.param_version, configStorage.getVersion()); - //编码方式 - params.put(SDKConstants.param_encoding, payConfigStorage.getInputCharset().toUpperCase()); - //商户代码 - params.put(SDKConstants.param_merId, payConfigStorage.getPid()); - - //订单发送时间 - params.put(SDKConstants.param_txnTime, DateUtils.formatDate(new Date(), DateUtils.YYYYMMDDHHMMSS)); - //后台通知地址 - params.put(SDKConstants.param_backUrl, payConfigStorage.getNotifyUrl()); - - //交易币种 - params.put(SDKConstants.param_currencyCode, "156"); - //接入类型,商户接入填0 ,不需修改(0:直连商户, 1: 收单机构 2:平台商户) - params.put(SDKConstants.param_accessType, configStorage.getAccessType()); - return params; - } - - - /** - * 回调校验 - * - * @param noticeParams 回调回来的参数集 - * @return 签名校验 true通过 - */ - @Override - public boolean verify(NoticeParams noticeParams) { - final Map result = noticeParams.getBody(); - if (null == result || result.get(SDKConstants.param_signature) == null) { - log.debug("银联支付验签异常:params:" + result); - return false; - } - return this.signVerify(result, (String) result.get(SDKConstants.param_signature)); - } - - /** - * 签名校验 - * - * @param params 参数集 - * @param sign 签名原文 - * @return 签名校验 true通过 - */ - public boolean signVerify(Map params, String sign) { - SignUtils signUtils = SignUtils.valueOf(payConfigStorage.getSignType()); - - String data = SignTextUtils.parameterText(params, "&", "signature"); - switch (signUtils) { - case RSA: - data = SignUtils.SHA1.createSign(data, "", payConfigStorage.getInputCharset()); - return RSA.verify(data, sign, verifyCertificate(genCertificateByStr((String) params.get(SDKConstants.param_signPubKeyCert))).getPublicKey(), payConfigStorage.getInputCharset()); - case RSA2: - data = SignUtils.SHA256.createSign(data, "", payConfigStorage.getInputCharset()); - return RSA2.verify(data, sign, verifyCertificate(genCertificateByStr((String) params.get(SDKConstants.param_signPubKeyCert))).getPublicKey(), payConfigStorage.getInputCharset()); - case SHA1: - case SHA256: - case SM3: - String before = signUtils.createSign(payConfigStorage.getKeyPublic(), "", payConfigStorage.getInputCharset()); - return signUtils.verify(data, sign, "&" + before, payConfigStorage.getInputCharset()); - default: - return false; - } - } - - - /** - * 订单超时时间。 - * 超过此时间后,除网银交易外,其他交易银联系统会拒绝受理,提示超时。 跳转银行网银交易如果超时后交易成功,会自动退款,大约5个工作日金额返还到持卡人账户。 - * 此时间建议取支付时的北京时间加15分钟。 - * 超过超时时间调查询接口应答origRespCode不是A6或者00的就可以判断为失败。 - * - * @param expirationTime 超时时间 - * @return 具体的时间字符串 - */ - private String getPayTimeout(Date expirationTime) { - // - if (null != expirationTime) { - return DateUtils.formatDate(expirationTime, DateUtils.YYYYMMDDHHMMSS); - } - return DateUtils.formatDate(new Timestamp(System.currentTimeMillis() + 30 * 60 * 1000), DateUtils.YYYYMMDDHHMMSS); - } - - /** - * 返回创建的订单信息 - * - * @param order 支付订单 - * @return 订单信息 - * @see PayOrder 支付订单信息 - */ - @Override - public Map orderInfo(PayOrder order) { - Map params = this.getCommonParam(); - - UnionTransactionType type = (UnionTransactionType) order.getTransactionType(); - initNotifyUrl(params, order); - - //设置交易类型相关的参数 - type.convertMap(params); - - params.put(SDKConstants.param_orderId, order.getOutTradeNo()); - - if (StringUtils.isNotEmpty(order.getAddition())) { - params.put(SDKConstants.param_reqReserved, order.getAddition()); - } - switch (type) { - case WAP: - case WEB: - //todo PCwap网关跳转支付特殊用法.txt - case B2B: - params.put(SDKConstants.param_txnAmt, Util.conversionCentAmount(order.getPrice())); - params.put("orderDesc", order.getSubject()); - params.put(SDKConstants.param_payTimeout, getPayTimeout(order.getExpirationTime())); - - params.put(SDKConstants.param_frontUrl, payConfigStorage.getReturnUrl()); - break; - case CONSUME: - params.put(SDKConstants.param_txnAmt, Util.conversionCentAmount(order.getPrice())); - params.put(SDKConstants.param_qrNo, order.getAuthCode()); - break; - case APPLY_QR_CODE: - if (null != order.getPrice()) { - params.put(SDKConstants.param_txnAmt, Util.conversionCentAmount(order.getPrice())); - } - params.put(SDKConstants.param_payTimeout, getPayTimeout(order.getExpirationTime())); - break; - default: - params.put(SDKConstants.param_txnAmt, Util.conversionCentAmount(order.getPrice())); - params.put(SDKConstants.param_payTimeout, getPayTimeout(order.getExpirationTime())); - params.put("orderDesc", order.getSubject()); - } - params.putAll(order.getAttrs()); - return setSign(params); - } - - - /** - * 生成并设置签名 - * - * @param parameters 请求参数 - * @return 请求参数 - */ - private Map setSign(Map parameters) { - - SignUtils signUtils = SignUtils.valueOf(payConfigStorage.getSignType()); - - String signStr; - switch (signUtils) { - case RSA: - parameters.put(SDKConstants.param_signMethod, SDKConstants.SIGNMETHOD_RSA); - parameters.put(SDKConstants.param_certId, certDescriptor.getSignCertId()); - signStr = SignUtils.SHA1.createSign(SignTextUtils.parameterText(parameters, "&", "signature"), "", payConfigStorage.getInputCharset()); - parameters.put(SDKConstants.param_signature, RSA.sign(signStr, certDescriptor.getSignCertPrivateKey(payConfigStorage.getKeyPrivateCertPwd()), payConfigStorage.getInputCharset())); - break; - case RSA2: - parameters.put(SDKConstants.param_signMethod, SDKConstants.SIGNMETHOD_RSA); - parameters.put(SDKConstants.param_certId, certDescriptor.getSignCertId()); - signStr = SignUtils.SHA256.createSign(SignTextUtils.parameterText(parameters, "&", "signature"), "", payConfigStorage.getInputCharset()); - parameters.put(SDKConstants.param_signature, RSA2.sign(signStr, certDescriptor.getSignCertPrivateKey(payConfigStorage.getKeyPrivateCertPwd()), payConfigStorage.getInputCharset())); - break; - case SHA1: - case SHA256: - case SM3: - String key = payConfigStorage.getKeyPrivate(); - signStr = SignTextUtils.parameterText(parameters, "&", "signature"); - key = signUtils.createSign(key, "", payConfigStorage.getInputCharset()) + "&"; - parameters.put(SDKConstants.param_signature, signUtils.createSign(signStr, key, payConfigStorage.getInputCharset())); - break; - default: - throw new PayErrorException(new PayException("sign fail", "未找到的签名类型")); - } - - - return parameters; - } - - - /** - * 验证证书链 - * - * @param cert 需要验证的证书 - */ - private X509Certificate verifyCertificate(X509Certificate cert) { - try { - cert.checkValidity();//验证有效期 - X509Certificate middleCert = certDescriptor.getPublicCert(); - X509Certificate rootCert = certDescriptor.getRootCert(); - - X509CertSelector selector = new X509CertSelector(); - selector.setCertificate(cert); - - Set trustAnchors = new HashSet(); - trustAnchors.add(new TrustAnchor(rootCert, null)); - PKIXBuilderParameters pkixParams = new PKIXBuilderParameters(trustAnchors, selector); - - Set intermediateCerts = new HashSet(); - intermediateCerts.add(rootCert); - intermediateCerts.add(middleCert); - intermediateCerts.add(cert); - - pkixParams.setRevocationEnabled(false); - - CertStore intermediateCertStore = CertStore.getInstance("Collection", new CollectionCertStoreParameters(intermediateCerts)); - pkixParams.addCertStore(intermediateCertStore); - - CertPathBuilder builder = CertPathBuilder.getInstance("PKIX"); - - /*PKIXCertPathBuilderResult result = (PKIXCertPathBuilderResult)*/ - builder.build(pkixParams); - return cert; - } - catch (java.security.cert.CertPathBuilderException e) { - log.error("verify certificate chain fail.", e); - } - catch (CertificateExpiredException e) { - log.error("", e); - } - catch (GeneralSecurityException e) { - log.error("", e); - } - return null; - } - - /** - * 发送订单 - * - * @param order 发起支付的订单信息 - * @return 返回支付结果 - */ - - public JSONObject postOrder(PayOrder order, String url) { - Map params = orderInfo(order); - String responseStr = getHttpRequestTemplate().postForObject(url, params, String.class); - JSONObject response = UriVariables.getParametersToMap(responseStr); - if (response.isEmpty()) { - throw new PayErrorException(new PayException("failure", "响应内容有误!", responseStr)); - } - return response; - } - - @Override - public String toPay(PayOrder order) { - - if (null == order.getTransactionType()) { - order.setTransactionType(UnionTransactionType.WEB); - } - else if (UnionTransactionType.WEB != order.getTransactionType() && UnionTransactionType.WAP != order.getTransactionType() && UnionTransactionType.B2B != order.getTransactionType()) { - throw new PayErrorException(new PayException("-1", "错误的交易类型:" + order.getTransactionType())); - } - - return super.toPay(order); - } - - /** - * 获取输出二维码,用户返回给支付端, - * - * @param order 发起支付的订单信息 - * @return 返回图片信息,支付时需要的 - */ - @Override - public String getQrPay(PayOrder order) { - order.setTransactionType(UnionTransactionType.APPLY_QR_CODE); - JSONObject response = postOrder(order, getBackTransUrl()); - if (this.verify(new NoticeParams(response))) { - if (SDKConstants.OK_RESP_CODE.equals(response.get(SDKConstants.param_respCode))) { - //成功 - return (String) response.get(SDKConstants.param_qrCode); - } - throw new PayErrorException(new PayException((String) response.get(SDKConstants.param_respCode), (String) response.get(SDKConstants.param_respMsg), response.toJSONString())); - } - throw new PayErrorException(new PayException("failure", "验证签名失败", response.toJSONString())); - } - - /** - * 刷卡付,pos主动扫码付款(条码付) - * - * @param order 发起支付的订单信息 - * @return 返回支付结果 - */ - @Override - public Map microPay(PayOrder order) { - order.setTransactionType(UnionTransactionType.CONSUME); - JSONObject response = postOrder(order, getBackTransUrl()); - return response; - } - - - /** - * 将字符串转换为X509Certificate对象. - * - * @param x509CertString 证书串 - * @return X509Certificate - */ - public static X509Certificate genCertificateByStr(String x509CertString) { - X509Certificate x509Cert = null; - try { - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - InputStream tIn = new ByteArrayInputStream(x509CertString.getBytes("ISO-8859-1")); - x509Cert = (X509Certificate) cf.generateCertificate(tIn); - } - catch (Exception e) { - throw new PayErrorException(new PayException("证书加载失败", "gen certificate error:" + e.getLocalizedMessage())); - } - return x509Cert; - } - - /** - * 获取输出消息,用户返回给支付端 - * - * @param code 状态 - * @param message 消息 - * @return 返回输出消息 - */ - @Override - public PayOutMessage getPayOutMessage(String code, String message) { - return PayTextOutMessage.TEXT().content(code.toLowerCase()).build(); - } - - /** - * 获取成功输出消息,用户返回给支付端 - * 主要用于拦截器中返回 - * - * @param payMessage 支付回调消息 - * @return 返回输出消息 - */ - @Override - public PayOutMessage successPayOutMessage(PayMessage payMessage) { - return getPayOutMessage("ok", null); - } - - /** - * 功能:生成自动跳转的Html表单 - * - * @param orderInfo 发起支付的订单信息 - * @param method 请求方式 "post" "get", - * @return 生成自动跳转的Html表单返回给支付端, 针对于PC端 - * @see MethodType 请求类型 - */ - @Override - public String buildRequest(Map orderInfo, MethodType method) { - StringBuffer sf = new StringBuffer(); - sf.append(""); - sf.append("
"); - if (null != orderInfo && 0 != orderInfo.size()) { - for (Map.Entry entry : orderInfo.entrySet()) { - String key = entry.getKey(); - Object value = entry.getValue(); - sf.append(""); - } - } - sf.append(""); - sf.append(""); - sf.append(""); - sf.append(""); - return sf.toString(); - } - - /** - * 功能:将订单信息进行签名并提交请求 - * 业务范围:手机支付控件(含安卓Pay) - * - * @param order 订单信息 - * @return 成功:返回支付结果 失败:返回 - */ - @Override - public Map app(PayOrder order) { - if (null == order.getTransactionType()) { - order.setTransactionType(UnionTransactionType.APP); - } - JSONObject response = postOrder(order, getAppTransUrl()); - if (this.verify(new NoticeParams(response))) { - if (SDKConstants.OK_RESP_CODE.equals(response.get(SDKConstants.param_respCode))) { -// //成功,获取tn号 -// String tn = (String)response.get(SDKConstants.param_tn); -// //TODO - return response; - } - throw new PayErrorException(new PayException((String) response.get(SDKConstants.param_respCode), (String) response.get(SDKConstants.param_respMsg), response.toJSONString())); - } - throw new PayErrorException(new PayException("failure", "验证签名失败", response.toJSONString())); - } - - /** - * 交易查询接口 - * - * @param assistOrder 查询条件 - * @return 返回查询回来的结果集,支付方原值返回 - */ - @Override - public Map query(AssistOrder assistOrder) { - Map params = this.getCommonParam(); - UnionTransactionType.QUERY.convertMap(params); - params.put(SDKConstants.param_orderId, assistOrder.getOutTradeNo()); - this.setSign(params); - String responseStr = getHttpRequestTemplate().postForObject(this.getSingleQueryUrl(), params, String.class); - JSONObject response = UriVariables.getParametersToMap(responseStr); - if (this.verify(new NoticeParams(response))) { - if (SDKConstants.OK_RESP_CODE.equals(response.getString(SDKConstants.param_respCode))) { - String origRespCode = response.getString(SDKConstants.param_origRespCode); - if ((SDKConstants.OK_RESP_CODE).equals(origRespCode)) { - //交易成功,更新商户订单状态 - return response; - } - } - throw new PayErrorException(new PayException(response.getString(SDKConstants.param_respCode), response.getString(SDKConstants.param_respMsg), response.toJSONString())); - } - throw new PayErrorException(new PayException("failure", "验证签名失败", response.toJSONString())); - } - - - /** - * 消费撤销/退货接口 - * - * @param origQryId 原交易查询流水号. - * @param orderId 退款单号 - * @param refundAmount 退款金额 - * @param type UnionTransactionType.REFUND 或者UnionTransactionType.CONSUME_UNDO - * @return 返回支付方申请退款后的结果 - */ - public UnionRefundResult unionRefundOrConsumeUndo(String origQryId, String orderId, BigDecimal refundAmount, UnionTransactionType type) { - return unionRefundOrConsumeUndo(new RefundOrder(orderId, origQryId, refundAmount), type); - - } - - /** - * 消费撤销/退货接口 - * - * @param refundOrder 退款订单信息 - * @param type UnionTransactionType.REFUND 或者UnionTransactionType.CONSUME_UNDO - * @return 返回支付方申请退款后的结果 - */ - public UnionRefundResult unionRefundOrConsumeUndo(RefundOrder refundOrder, UnionTransactionType type) { - Map params = this.getCommonParam(); - type.convertMap(params); - params.put(SDKConstants.param_orderId, refundOrder.getRefundNo()); - params.put(SDKConstants.param_txnAmt, Util.conversionCentAmount(refundOrder.getRefundAmount())); - params.put(SDKConstants.param_origQryId, refundOrder.getTradeNo()); - params.putAll(refundOrder.getAttrs()); - this.setSign(params); - String responseStr = getHttpRequestTemplate().postForObject(this.getBackTransUrl(), params, String.class); - JSONObject response = UriVariables.getParametersToMap(responseStr); - - if (this.verify(new NoticeParams(response))) { - final UnionRefundResult refundResult = UnionRefundResult.create(response); - if (SDKConstants.OK_RESP_CODE.equals(refundResult.getRespCode())) { - return refundResult; - - } - throw new PayErrorException(new PayException(response.getString(SDKConstants.param_respCode), response.getString(SDKConstants.param_respMsg), response.toJSONString())); - } - throw new PayErrorException(new PayException("failure", "验证签名失败", response.toJSONString())); - } - - /** - * 交易关闭接口 - * - * @param assistOrder 关闭订单 - * @return 返回支付方交易关闭后的结果 - */ - @Override - public Map close(AssistOrder assistOrder) { - return Collections.emptyMap(); - } - - @Override - public UnionRefundResult refund(RefundOrder refundOrder) { - return unionRefundOrConsumeUndo(refundOrder, UnionTransactionType.REFUND); - } - - - /** - * 查询退款 - * - * @param refundOrder 退款订单单号信息 - * @return 返回支付方查询退款后的结果 - */ - @Override - public Map refundquery(RefundOrder refundOrder) { - return Collections.emptyMap(); - } - - /** - * 下载对账单 - * - * @param billDate 账单时间 - * @param fileType 文件类型 文件类型,一般商户填写00即可 - * @return 返回fileContent 请自行将数据落地 - */ - @Override - public Map downloadBill(Date billDate, String fileType) { - return downloadBill(billDate, new UnionPayBillType(fileType)); - } - - /** - * 下载对账单 - * - * @param billDate 账单时间 - * @param billType 账单类型 - * @return 返回fileContent 请自行将数据落地 - */ - @Override - public Map downloadBill(Date billDate, BillType billType) { - - Map params = this.getCommonParam(); - UnionTransactionType.FILE_TRANSFER.convertMap(params); - - params.put(SDKConstants.param_settleDate, DateUtils.formatDate(billDate, DateUtils.MMDD)); - params.put(SDKConstants.param_fileType, billType.getFileType()); - params.remove(SDKConstants.param_backUrl); - params.remove(SDKConstants.param_currencyCode); - this.setSign(params); - String responseStr = getHttpRequestTemplate().postForObject(this.getFileTransUrl(), params, String.class); - JSONObject response = UriVariables.getParametersToMap(responseStr); - if (this.verify(new NoticeParams(response))) { - if (SDKConstants.OK_RESP_CODE.equals(response.get(SDKConstants.param_respCode))) { - return response; - - } - throw new PayErrorException(new PayException(response.get(SDKConstants.param_respCode).toString(), response.get(SDKConstants.param_respMsg).toString(), response.toString())); - - } - throw new PayErrorException(new PayException("failure", "验证签名失败", response.toString())); - } - - - /** - * 创建消息 - * - * @param message 支付平台返回的消息 - * @return 支付消息对象 - */ - @Override - public PayMessage createMessage(Map message) { - return UnionPayMessage.create(message); - } -} diff --git a/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/bean/UnionPayBillType.java b/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/bean/UnionPayBillType.java index 7a3991388..a1c3bf9dd 100644 --- a/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/bean/UnionPayBillType.java +++ b/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/bean/UnionPayBillType.java @@ -1,7 +1,8 @@ package org.dromara.daxpay.channel.union.sdk.bean; +import cn.hutool.core.util.StrUtil; +import lombok.Setter; import org.dromara.daxpay.unisdk.common.bean.BillType; -import org.dromara.daxpay.unisdk.common.util.str.StringUtils; /** * 银联账单类型 @@ -12,6 +13,7 @@ import org.dromara.daxpay.unisdk.common.util.str.StringUtils; * date 2021/2/23 * */ +@Setter public class UnionPayBillType implements BillType { private String fileType = "00"; @@ -46,10 +48,6 @@ public class UnionPayBillType implements BillType { return fileType; } - public void setFileType(String fileType) { - this.fileType = fileType; - } - /** * 自定义属性 * @@ -64,7 +62,7 @@ public class UnionPayBillType implements BillType { } public UnionPayBillType(String fileType) { - if (StringUtils.isNotEmpty(fileType)) { + if (StrUtil.isNotEmpty(fileType)) { this.fileType = fileType; } } diff --git a/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/bean/UnionPayMessage.java b/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/bean/UnionPayMessage.java index 0bd571109..7c0788cd4 100644 --- a/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/bean/UnionPayMessage.java +++ b/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/bean/UnionPayMessage.java @@ -345,7 +345,7 @@ public class UnionPayMessage extends PayMessage { this.accSplitData = accSplitData; } - public static final UnionPayMessage create(Map message) { + public static UnionPayMessage create(Map message) { UnionPayMessage payMessage = new JSONObject(message).toJavaObject(UnionPayMessage.class); payMessage.setPayMessage(message); return payMessage; diff --git a/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/bean/UnionPayOrder.java b/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/bean/UnionPayOrder.java index ca95a3cdf..bc4dcdf18 100644 --- a/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/bean/UnionPayOrder.java +++ b/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/bean/UnionPayOrder.java @@ -1,12 +1,12 @@ package org.dromara.daxpay.channel.union.sdk.bean; -import org.dromara.daxpay.unisdk.common.bean.PayOrder; +import org.dromara.daxpay.unisdk.common.bean.UniOrder; /** * 继承SDK中的类, 防止与系统中的类名称冲突 * @author xxm * @since 2024/3/8 */ -public class UnionPayOrder extends PayOrder { +public class UnionPayOrder extends UniOrder { } diff --git a/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/bean/UnionRefundOrder.java b/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/bean/UnionRefundOrder.java index 2685c3b35..471402563 100644 --- a/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/bean/UnionRefundOrder.java +++ b/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/bean/UnionRefundOrder.java @@ -1,12 +1,12 @@ package org.dromara.daxpay.channel.union.sdk.bean; -import org.dromara.daxpay.unisdk.common.bean.RefundOrder; +import org.dromara.daxpay.unisdk.common.bean.UniRefundOrder; /** * 继承SDK中的类, 防止与系统中的类名称冲突 * @author xxm * @since 2024/3/8 */ -public class UnionRefundOrder extends RefundOrder { +public class UnionRefundOrder extends UniRefundOrder { } diff --git a/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/bean/UnionRefundResult.java b/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/bean/UnionRefundResult.java index 2df0bb207..9600c1445 100644 --- a/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/bean/UnionRefundResult.java +++ b/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/bean/UnionRefundResult.java @@ -318,7 +318,7 @@ public class UnionRefundResult extends BaseRefundResult { this.reserved = reserved; } - public static final UnionRefundResult create(Map result){ + public static UnionRefundResult create(Map result){ UnionRefundResult refundResult = new JSONObject(result).toJavaObject(UnionRefundResult.class); refundResult.setAttrs(result); return refundResult; diff --git a/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/bean/UnionTransactionType.java b/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/bean/UnionTransactionType.java index 98b273737..775fd27a8 100644 --- a/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/bean/UnionTransactionType.java +++ b/daxpay-single-channel/daxpay-single-union/src/main/java/org/dromara/daxpay/channel/union/sdk/bean/UnionTransactionType.java @@ -1,7 +1,7 @@ package org.dromara.daxpay.channel.union.sdk.bean; +import cn.hutool.core.util.StrUtil; import org.dromara.daxpay.unisdk.common.bean.TransactionType; -import org.dromara.daxpay.unisdk.common.util.str.StringUtils; import java.util.Map; @@ -102,7 +102,7 @@ public enum UnionTransactionType implements TransactionType{ //业务类型 contentData.put(SDKConstants.param_bizType,this.getBizType()); //渠道类型 - if(StringUtils.isNotBlank(this.getChannelType())){ + if(StrUtil.isNotBlank(this.getChannelType())){ contentData.put(SDKConstants.param_channelType,this.getChannelType()); } } diff --git a/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/code/WechatPayCode.java b/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/code/WechatPayCode.java index 62ef2592f..32c299efe 100644 --- a/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/code/WechatPayCode.java +++ b/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/code/WechatPayCode.java @@ -40,7 +40,7 @@ public interface WechatPayCode { String CONTENT_TYPE = "Content-Type"; List PRIMARY_API_DOMAIN = - Collections.unmodifiableList(Arrays.asList("api.mch.weixin.qq.com", "api.wechatpay.cn")); + List.of("api.mch.weixin.qq.com", "api.wechatpay.cn"); String SECONDARY_API_DOMAIN = "api2.wechatpay.cn"; } diff --git a/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/param/pay/WxPayCodepayRequest.java b/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/param/pay/WxPayCodepayRequest.java index 84633bf34..84cd2f7d6 100644 --- a/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/param/pay/WxPayCodepayRequest.java +++ b/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/param/pay/WxPayCodepayRequest.java @@ -531,6 +531,7 @@ public class WxPayCodepayRequest implements Serializable { @Data @NoArgsConstructor public static class GoodsDetail implements Serializable { + @Serial private static final long serialVersionUID = 1L; /** *
diff --git a/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/result/pay/WxPayCodepayResult.java b/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/result/pay/WxPayCodepayResult.java
index e8a3d933a..cfcae4c58 100644
--- a/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/result/pay/WxPayCodepayResult.java
+++ b/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/result/pay/WxPayCodepayResult.java
@@ -572,6 +572,7 @@ public class WxPayCodepayResult implements Serializable {
     @Data
     @NoArgsConstructor
     public static class GoodsDetail implements Serializable {
+        @Serial
         private static final long serialVersionUID = 1L;
         /**
          * 
diff --git a/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/result/transfer/WxPayTransferBatchesNotifyV3Result.java b/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/result/transfer/WxPayTransferBatchesNotifyV3Result.java
index b6953ca26..01cee5c4c 100644
--- a/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/result/transfer/WxPayTransferBatchesNotifyV3Result.java
+++ b/daxpay-single-channel/daxpay-single-wechat/src/main/java/org/dromara/daxpay/channel/wechat/result/transfer/WxPayTransferBatchesNotifyV3Result.java
@@ -6,6 +6,7 @@ import com.google.gson.annotations.SerializedName;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.io.Serial;
 import java.io.Serializable;
 
 /**
@@ -17,6 +18,7 @@ import java.io.Serializable;
 @Data
 @NoArgsConstructor
 public class WxPayTransferBatchesNotifyV3Result implements Serializable, WxPayBaseNotifyV3Result {
+  @Serial
   private static final long serialVersionUID = -1L;
   /**
    * 源数据
@@ -30,6 +32,7 @@ public class WxPayTransferBatchesNotifyV3Result implements Serializable, WxPayBa
   @Data
   @NoArgsConstructor
   public static class DecryptNotifyResult implements Serializable {
+    @Serial
     private static final long serialVersionUID = -1L;
     /**
      * 
diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/common/context/MchAppLocal.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/common/context/MchAppLocal.java
index 3f38c4685..67c9b2c6a 100644
--- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/common/context/MchAppLocal.java
+++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/common/context/MchAppLocal.java
@@ -17,7 +17,7 @@ import java.math.BigDecimal;
 public class MchAppLocal {
 
     /** 应用号 */
-    private String appId;;
+    private String appId;
 
     /** 签名方式 */
     private String signType;
diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/notice/callback/MerchantCallbackSendService.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/notice/callback/MerchantCallbackSendService.java
index 17075efe9..877813e9c 100644
--- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/notice/callback/MerchantCallbackSendService.java
+++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/notice/callback/MerchantCallbackSendService.java
@@ -74,7 +74,7 @@ public class MerchantCallbackSendService {
         if (StrUtil.equalsIgnoreCase(body, "SUCCESS")){
             task.setSendCount(task.getSendCount() + 1)
                     .setLatestTime(sendTime)
-                    .setSuccess(true);;
+                    .setSuccess(true);
             record.setSuccess(true);
             // 如果为自动发送且延迟次数, 延迟次数也+1
             if (autoSend && Objects.nonNull(task.getDelayCount())){
diff --git a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/reconcile/ReconcileStatementService.java b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/reconcile/ReconcileStatementService.java
index a3056a6a4..2002cde91 100644
--- a/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/reconcile/ReconcileStatementService.java
+++ b/daxpay-single/daxpay-single-service/src/main/java/org/dromara/daxpay/service/service/reconcile/ReconcileStatementService.java
@@ -373,35 +373,31 @@ public class ReconcileStatementService {
                         .setChannelTradeTime(LocalDateTimeUtil.format(discrepancyTrade.getChannelTradeTime(), DatePattern.CHINESE_DATE_TIME_PATTERN))
                 );
                 // 处理远程短单
-                case REMOTE_NOT_EXISTS -> {
-                    tradeExcels.add(new ReconcileTradeExcel()
-                            .setResult(ReconcileDiscrepancyTypeEnum.REMOTE_NOT_EXISTS.getName())
-                            .setTradeNo(discrepancyTrade.getTradeNo())
-                            .setBizTradeNo(discrepancyTrade.getBizTradeNo())
-                            .setOutTradeNo(discrepancyTrade.getOutTradeNo())
-                            .setTradeType(TradeTypeEnum.findByCode(discrepancyTrade.getTradeType()).getName())
-                            .setTradeAmount(discrepancyTrade.getTradeAmount().toString())
-                            .setTradeStatus(discrepancyTrade.getTradeStatus())
-                            .setTradeTime(LocalDateTimeUtil.format(discrepancyTrade.getTradeTime(), DatePattern.CHINESE_DATE_TIME_PATTERN))
-                    );
-                }
+                case REMOTE_NOT_EXISTS -> tradeExcels.add(new ReconcileTradeExcel()
+                        .setResult(ReconcileDiscrepancyTypeEnum.REMOTE_NOT_EXISTS.getName())
+                        .setTradeNo(discrepancyTrade.getTradeNo())
+                        .setBizTradeNo(discrepancyTrade.getBizTradeNo())
+                        .setOutTradeNo(discrepancyTrade.getOutTradeNo())
+                        .setTradeType(TradeTypeEnum.findByCode(discrepancyTrade.getTradeType()).getName())
+                        .setTradeAmount(discrepancyTrade.getTradeAmount().toString())
+                        .setTradeStatus(discrepancyTrade.getTradeStatus())
+                        .setTradeTime(LocalDateTimeUtil.format(discrepancyTrade.getTradeTime(), DatePattern.CHINESE_DATE_TIME_PATTERN))
+                );
                 // 处理信息不一致订单
-                case NOT_MATCH -> {
-                    tradeExcels.add(new ReconcileTradeExcel()
-                            .setResult(ReconcileDiscrepancyTypeEnum.NOT_MATCH.getName())
-                            .setTradeNo(discrepancyTrade.getTradeNo())
-                            .setBizTradeNo(discrepancyTrade.getBizTradeNo())
-                            .setOutTradeNo(discrepancyTrade.getOutTradeNo())
-                            .setTradeType(TradeTypeEnum.findByCode(discrepancyTrade.getTradeType()).getName())
-                            .setTradeAmount(discrepancyTrade.getTradeAmount().toString())
-                            .setTradeStatus(discrepancyTrade.getTradeStatus())
-                            .setTradeTime(LocalDateTimeUtil.format(discrepancyTrade.getTradeTime(), DatePattern.CHINESE_DATE_TIME_PATTERN))
-                            .setChannelTradeNo(discrepancy.getChannelTradeNo())
-                            .setChannelTradeAmount(discrepancy.getChannelTradeAmount().toString())
-                            .setChannelTradeStatus(discrepancy.getChannelTradeStatus())
-                            .setChannelTradeTime(LocalDateTimeUtil.format(discrepancy.getChannelTradeTime(), DatePattern.CHINESE_DATE_TIME_PATTERN))
-                    );
-                }
+                case NOT_MATCH -> tradeExcels.add(new ReconcileTradeExcel()
+                        .setResult(ReconcileDiscrepancyTypeEnum.NOT_MATCH.getName())
+                        .setTradeNo(discrepancyTrade.getTradeNo())
+                        .setBizTradeNo(discrepancyTrade.getBizTradeNo())
+                        .setOutTradeNo(discrepancyTrade.getOutTradeNo())
+                        .setTradeType(TradeTypeEnum.findByCode(discrepancyTrade.getTradeType()).getName())
+                        .setTradeAmount(discrepancyTrade.getTradeAmount().toString())
+                        .setTradeStatus(discrepancyTrade.getTradeStatus())
+                        .setTradeTime(LocalDateTimeUtil.format(discrepancyTrade.getTradeTime(), DatePattern.CHINESE_DATE_TIME_PATTERN))
+                        .setChannelTradeNo(discrepancy.getChannelTradeNo())
+                        .setChannelTradeAmount(discrepancy.getChannelTradeAmount().toString())
+                        .setChannelTradeStatus(discrepancy.getChannelTradeStatus())
+                        .setChannelTradeTime(LocalDateTimeUtil.format(discrepancy.getChannelTradeTime(), DatePattern.CHINESE_DATE_TIME_PATTERN))
+                );
             }
         }
         return tradeExcels;
diff --git a/daxpay-single/daxpay-single-unisdk/pom.xml b/daxpay-single/daxpay-single-unisdk/pom.xml
index 1669eff3b..fe0160199 100644
--- a/daxpay-single/daxpay-single-unisdk/pom.xml
+++ b/daxpay-single/daxpay-single-unisdk/pom.xml
@@ -10,21 +10,20 @@
     
 
     daxpay-single-unisdk
+    统一支付SDK基础包
+    jar
 
     
-        21
-        21
-        UTF-8
-
-        4.5.4
+        4.5.14
         1.2.83_noneautotype
     
 
     
+        
         
-            cn.bootx.platform
-            bootx-platform-core
-            ${bootx-platform.version}
+            org.dromara.daxpay
+            daxpay-single-core
+            ${daxpay.version}
         
         
         
@@ -32,18 +31,13 @@
             httpmime
             ${httpmime.version}
         
-        
+        
         
             com.alibaba
             fastjson
             ${fastjson.version}
         
 
-        
-        
-            org.slf4j
-            slf4j-api
-        
     
 
 
diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/BasePayService.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/BasePayService.java
index 6dbd02b0b..d1032c468 100644
--- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/BasePayService.java
+++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/BasePayService.java
@@ -1,5 +1,7 @@
 package org.dromara.daxpay.unisdk.common.api;
 
+import cn.hutool.core.codec.Base64;
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.Consts;
@@ -7,11 +9,10 @@ import org.dromara.daxpay.unisdk.common.bean.*;
 import org.dromara.daxpay.unisdk.common.http.HttpConfigStorage;
 import org.dromara.daxpay.unisdk.common.http.HttpRequestTemplate;
 import org.dromara.daxpay.unisdk.common.util.sign.SignUtils;
-import org.dromara.daxpay.unisdk.common.util.str.StringUtils;
 
 import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
 import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 import java.util.*;
 
 /**
@@ -24,13 +25,10 @@ import java.util.*;
  *   
*/ @Slf4j -public abstract class BasePayService implements PayService { +public abstract class BasePayService implements UniPayService { protected PC payConfigStorage; protected HttpRequestTemplate requestTemplate; - protected int retrySleepMillis = 1000; - - protected int maxRetryTimes = 5; /** * 支付消息处理器 */ @@ -38,7 +36,7 @@ public abstract class BasePayService implements Pay /** * 支付消息拦截器 */ - protected List> interceptors = new ArrayList<>(); + protected List> interceptors = new ArrayList<>(); private Charset inputCharset = Consts.UTF_8; @@ -51,7 +49,7 @@ public abstract class BasePayService implements Pay public BasePayService setPayConfigStorage(PC payConfigStorage) { this.payConfigStorage = payConfigStorage; - if (StringUtils.isNotEmpty(payConfigStorage.getInputCharset())) { + if (StrUtil.isNotEmpty(payConfigStorage.getInputCharset())) { this.inputCharset = Charset.forName(payConfigStorage.getInputCharset()); } return this; @@ -100,12 +98,7 @@ public abstract class BasePayService implements Pay */ protected String authorizationString(String user, String password) { String base64ClientID = null; - try { - base64ClientID = org.dromara.daxpay.unisdk.common.util.sign.encrypt.Base64.encode(String.format("%s:%s", user, password).getBytes("UTF-8")); - } - catch (UnsupportedEncodingException e) { - log.error("", e); - } + base64ClientID = Base64.encode(String.format("%s:%s", user, password).getBytes(StandardCharsets.UTF_8)); return base64ClientID; } @@ -142,11 +135,11 @@ public abstract class BasePayService implements Pay * @return 对应页面重定向信息 */ @Override - public String toPay(O order) { - if (StringUtils.isNotEmpty(order.getSubject()) && order.getSubject().contains("'")) { + public String toPay(O order) { + if (StrUtil.isNotEmpty(order.getSubject()) && order.getSubject().contains("'")) { order.setSubject(order.getSubject().replace("'", "")); } - if (StringUtils.isNotEmpty(order.getBody()) && order.getBody().contains("'")) { + if (StrUtil.isNotEmpty(order.getBody()) && order.getBody().contains("'")) { order.setBody(order.getBody().replace("'", "")); } Map orderInfo = orderInfo(order); @@ -161,7 +154,7 @@ public abstract class BasePayService implements Pay * @return 对应app所需参数信息 */ @Override - public Map app(O order) { + public Map app(O order) { return orderInfo(order); } @@ -173,7 +166,7 @@ public abstract class BasePayService implements Pay * @return 返回支付结果 */ @Override - public Map jsApi(O order) { + public Map jsApi(O order) { return Collections.emptyMap(); } @@ -196,7 +189,7 @@ public abstract class BasePayService implements Pay sb.append(values[i]).append((i == len - 1) ? "" : ','); } String valueStr = sb.toString(); - if (StringUtils.isNotEmpty(payConfigStorage.getInputCharset()) && !valueStr.matches("\\w+")) { + if (StrUtil.isNotEmpty(payConfigStorage.getInputCharset()) && !valueStr.matches("\\w+")) { if (valueStr.equals(new String(valueStr.getBytes(Consts.ISO_8859_1), Consts.ISO_8859_1))) { valueStr = new String(valueStr.getBytes(Consts.ISO_8859_1), inputCharset); } @@ -238,7 +231,7 @@ public abstract class BasePayService implements Pay * @return 对应的转账结果 */ @Override - public Map transfer(TransferOrder order) { + public Map transfer(UniTransferOrder order) { return Collections.emptyMap(); } @@ -246,7 +239,7 @@ public abstract class BasePayService implements Pay * 设置支付消息处理器,这里用于处理具体的支付业务 * * @param handler 消息处理器 - * 配合{@link PayService#payBack(Map, InputStream)}进行使用 + * 配合{@link UniPayService#payBack(Map, InputStream)}进行使用 *

* 默认使用{@link DefaultPayMessageHandler }进行实现 */ @@ -257,7 +250,7 @@ public abstract class BasePayService implements Pay /** * 获取支付消息处理器,这里用于处理具体的支付业务 - * 配合{@link PayService#payBack(Map, InputStream)}进行使用 + * 配合{@link UniPayService#payBack(Map, InputStream)}进行使用 *

* * @return 默认使用{@link DefaultPayMessageHandler }进行实现 @@ -273,7 +266,7 @@ public abstract class BasePayService implements Pay * 设置支付消息拦截器 * * @param interceptor 消息拦截器 - * 配合{@link PayService#payBack(Map, InputStream)}进行使用, 做一些预前处理 + * 配合{@link UniPayService#payBack(Map, InputStream)}进行使用, 做一些预前处理 */ @Override public void addPayMessageInterceptor(PayMessageInterceptor interceptor) { diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/Callback.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/Callback.java deleted file mode 100644 index 3f16e3b99..000000000 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/Callback.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2017 the original egan - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -package org.dromara.daxpay.unisdk.common.api; - -import java.util.Map; - -/** - * 回调,可用于类型转换 - * @author egan - *

- *     email egzosn@gmail.com
- *     date 2017/3/7 18:55
- *  
- */ -public interface Callback { - /** - * 执行者 - * @param map 需要转化的map - * @return 处理过后的类型对象 - */ - T perform(Map map); - -} diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/DefaultPayMessageHandler.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/DefaultPayMessageHandler.java index 2f80f41bc..e7bb1398a 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/DefaultPayMessageHandler.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/DefaultPayMessageHandler.java @@ -21,7 +21,7 @@ import java.util.Map; *
*/ @Slf4j -public class DefaultPayMessageHandler implements PayMessageHandler { +public class DefaultPayMessageHandler implements PayMessageHandler { protected final Logger LOG = LoggerFactory.getLogger(DefaultPayMessageHandler.class); /** @@ -31,9 +31,9 @@ public class DefaultPayMessageHandler implements PayMessageHandler context, PayService payService) throws PayErrorException { + public PayOutMessage handle(PayMessage payMessage, Map context, UniPayService payService) throws PayErrorException { if (log.isInfoEnabled()) { - log.info("回调支付消息处理器,回调消息:" + JSON.toJSONString(payMessage)); + log.info("回调支付消息处理器,回调消息:{}", JSON.toJSONString(payMessage)); } return payService.successPayOutMessage(payMessage); } diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/PayMessageHandler.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/PayMessageHandler.java index 8b7e75568..bcbfe5cbf 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/PayMessageHandler.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/PayMessageHandler.java @@ -19,7 +19,7 @@ import java.util.Map; * source Daniel Qian *
*/ -public interface PayMessageHandler { +public interface PayMessageHandler { /** * 处理支付回调消息的处理器接口 diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/PayMessageInterceptor.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/PayMessageInterceptor.java index 242787412..20313dfa5 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/PayMessageInterceptor.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/PayMessageInterceptor.java @@ -18,7 +18,7 @@ import java.util.Map; * source Daniel Qian * */ -public interface PayMessageInterceptor { +public interface PayMessageInterceptor { /** * 拦截微信消息 diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/PayMessageRouter.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/PayMessageRouter.java index 5886dd87a..b5bfb38b3 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/PayMessageRouter.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/PayMessageRouter.java @@ -52,11 +52,11 @@ public class PayMessageRouter { /** * 规则集 */ - private final List rules = new ArrayList(); + private final List rules = new ArrayList<>(); /** * 支付服务 */ - private final PayService payService; + private final UniPayService payService; /** * 异步线程处理器 * -- SETTER -- @@ -89,7 +89,7 @@ public class PayMessageRouter { * * @param payService 支付服务 */ - public PayMessageRouter(PayService payService) { + public PayMessageRouter(UniPayService payService) { this.payService = payService; this.executorService = Executors.newFixedThreadPool(DEFAULT_THREAD_POOL_SIZE); this.exceptionHandler = new LogExceptionHandler(); @@ -136,7 +136,7 @@ public class PayMessageRouter { */ public PayOutMessage route(final PayMessage payMessage) { - final List matchRules = new ArrayList(); + final List matchRules = new ArrayList<>(); // 收集匹配的规则 for (final PayMessageRouterRule rule : rules) { if (rule.test(payMessage)) { @@ -152,7 +152,7 @@ public class PayMessageRouter { } PayOutMessage res = null; - final List futures = new ArrayList(); + final List futures = new ArrayList<>(); for (final PayMessageRouterRule rule : matchRules) { // 返回最后一个非异步的rule的执行结果 if (rule.isAsync()) { @@ -166,7 +166,7 @@ public class PayMessageRouter { res = rule.service(payMessage, payService, exceptionHandler); // 在同步操作结束,session访问结束 if (log.isDebugEnabled()) { - log.debug("End session access: async=false, fromPay=" + payMessage.getFromPay()); + log.debug("End session access: async=false, fromPay={}", payMessage.getFromPay()); } } } @@ -176,13 +176,10 @@ public class PayMessageRouter { for (Future future : futures) { try { future.get(); - log.debug("End session access: async=true, fromPay=" + payMessage.getFromPay()); + log.debug("End session access: async=true, fromPay={}", payMessage.getFromPay()); } - catch (InterruptedException e) { - log.error("Error happened when wait task finish", e); - } - catch (ExecutionException e) { + catch (InterruptedException | ExecutionException e) { log.error("Error happened when wait task finish", e); } } diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/PayMessageRouterRule.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/PayMessageRouterRule.java index 1fd901529..32c1ee32d 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/PayMessageRouterRule.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/PayMessageRouterRule.java @@ -69,10 +69,10 @@ public class PayMessageRouterRule { private boolean reEnter = false; @Setter - private List handlers = new ArrayList(); + private List handlers = new ArrayList<>(); @Setter - private List interceptors = new ArrayList(); + private List interceptors = new ArrayList<>(); public PayMessageRouterRule(PayMessageRouter routerBuilder) { this.routerBuilder = routerBuilder; @@ -274,12 +274,12 @@ public class PayMessageRouterRule { * @return 支付响应消息 */ protected PayOutMessage service(PayMessage payMessage, - PayService payService, + UniPayService payService, PayErrorExceptionHandler exceptionHandler) { try { - Map context = new HashMap(); + Map context = new HashMap<>(); // 如果拦截器不通过 for (PayMessageInterceptor interceptor : this.interceptors) { if (!interceptor.intercept(payMessage, context, payService)) { diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/TransferService.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/TransferService.java index f4d8dd78d..0d2c10f80 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/TransferService.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/TransferService.java @@ -1,7 +1,7 @@ package org.dromara.daxpay.unisdk.common.api; import org.dromara.daxpay.unisdk.common.bean.AssistOrder; -import org.dromara.daxpay.unisdk.common.bean.TransferOrder; +import org.dromara.daxpay.unisdk.common.bean.UniTransferOrder; import java.util.Map; @@ -22,7 +22,7 @@ public interface TransferService { * @param transferOrder 转账订单 * @return 结果 */ - Map transfer(TransferOrder transferOrder); + Map transfer(UniTransferOrder transferOrder); /** * 转账查询 diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/PayService.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/UniPayService.java similarity index 86% rename from daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/PayService.java rename to daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/UniPayService.java index bf1c4e215..2830da207 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/PayService.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/api/UniPayService.java @@ -16,7 +16,7 @@ import java.util.Map; * date 2016-5-18 14:09:01 * */ -public interface PayService { +public interface UniPayService { /** @@ -25,7 +25,7 @@ public interface PayService { * @param payConfigStorage 支付配置 * @return 支付服务 */ - PayService setPayConfigStorage(PC payConfigStorage); + UniPayService setPayConfigStorage(PC payConfigStorage); /** * 获取支付配置 @@ -47,7 +47,7 @@ public interface PayService { * @param configStorage http请求配置 * @return 支付服务 */ - PayService setRequestTemplateConfigStorage(HttpConfigStorage configStorage); + UniPayService setRequestTemplateConfigStorage(HttpConfigStorage configStorage); /** * 回调校验 @@ -64,9 +64,9 @@ public interface PayService { * @param order 支付订单 * @param 预订单类型 * @return 订单信息 - * @see PayOrder 支付订单信息 + * @see UniOrder 支付订单信息 */ - Map orderInfo(O order); + Map orderInfo(O order); /** * 页面转跳支付, 返回对应页面重定向信息 @@ -75,7 +75,7 @@ public interface PayService { * @param 预订单类型 * @return 对应页面重定向信息 */ - String toPay(O order); + String toPay(O order); /** * app支付 @@ -84,7 +84,7 @@ public interface PayService { * @param 预订单类型 * @return 对应app所需参数信息 */ - Map app(O order); + Map app(O order); /** * 创建签名 @@ -139,7 +139,7 @@ public interface PayService { * @param 预订单类型 * @return 返回二维码信息,,支付时需要的 */ - String getQrPay(O order); + String getQrPay(O order); /** * 小程序支付,返回小程序所需的订单构建信息 @@ -148,7 +148,7 @@ public interface PayService { * @param 预订单类型 * @return 返回支付结果 */ - Map jsApi(O order); + Map jsApi(O order); /** * 刷卡付,pos主动扫码付款(条码付) * 刷脸付 @@ -157,7 +157,7 @@ public interface PayService { * @param 预订单类型 * @return 返回支付结果 */ - Map microPay(O order); + Map microPay(O order); /** @@ -195,7 +195,7 @@ public interface PayService { * @param refundOrder 退款订单信息 * @return 返回支付方申请退款后的结果 */ - RefundResult refund(RefundOrder refundOrder); + RefundResult refund(UniRefundOrder refundOrder); /** @@ -204,7 +204,7 @@ public interface PayService { * @param refundOrder 退款订单单号信息 * @return 返回支付方查询退款后的结果 */ - Map refundquery(RefundOrder refundOrder); + Map refundquery(UniRefundOrder refundOrder); /** * 下载对账单 @@ -231,7 +231,7 @@ public interface PayService { * @param order 转账订单 * @return 对应的转账结果 */ - Map transfer(TransferOrder order); + Map transfer(UniTransferOrder order); /** * 回调处理 @@ -246,7 +246,7 @@ public interface PayService { * 设置支付消息处理器,这里用于处理具体的支付业务 * * @param handler 消息处理器 - * 配合{@link org.dromara.daxpay.unisdk.common.api.PayService#payBack(NoticeRequest)}进行使用 + * 配合{@link UniPayService#payBack(NoticeRequest)}进行使用 *

* 默认使用{@link org.dromara.daxpay.unisdk.common.api.DefaultPayMessageHandler }进行实现 */ @@ -256,7 +256,7 @@ public interface PayService { * 设置支付消息处理器,这里用于处理具体的支付业务 * * @param interceptor 消息拦截器 - * 配合{@link org.dromara.daxpay.unisdk.common.api.PayService#payBack(NoticeRequest)}进行使用 + * 配合{@link UniPayService#payBack(NoticeRequest)}进行使用 *

* 默认使用{@link org.dromara.daxpay.unisdk.common.api.DefaultPayMessageHandler }进行实现 */ diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/BasePayType.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/BasePayType.java deleted file mode 100644 index de6a439b2..000000000 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/BasePayType.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.dromara.daxpay.unisdk.common.bean; - -/** - * 基础的支付类型 - * @author egan - *

- *     email egzosn@gmail.com
- *     date 2016/11/20 0:47
- *  
- */ -public interface BasePayType { - - - /** - * 根据支付类型获取交易类型 - * @param transactionType 类型值 - * @return 交易类型 - */ - TransactionType getTransactionType(String transactionType); - -} diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/CertStoreType.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/CertStoreType.java index ad51cec20..76e9a0ff0 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/CertStoreType.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/CertStoreType.java @@ -6,6 +6,7 @@ import org.dromara.daxpay.unisdk.common.exception.PayErrorException; import org.dromara.daxpay.unisdk.common.http.HttpRequestTemplate; import java.io.*; +import java.nio.charset.StandardCharsets; /** * 证书存储类型 @@ -25,10 +26,9 @@ public enum CertStoreType implements CertStore { * * @param cert 证书信息 * @return 输入流 - * @throws IOException 找不到文件异常 */ @Override - public InputStream getInputStream(Object cert) throws IOException { + public InputStream getInputStream(Object cert) { return null; } }, @@ -73,11 +73,10 @@ public enum CertStoreType implements CertStore { * * @param cert 证书信息 * @return 输入流 - * @throws IOException 找不到文件异常 */ @Override - public InputStream getInputStream(Object cert) throws IOException { - return new ByteArrayInputStream(((String) cert).getBytes("ISO-8859-1")); + public InputStream getInputStream(Object cert) { + return new ByteArrayInputStream(((String) cert).getBytes(StandardCharsets.ISO_8859_1)); } }, @@ -90,10 +89,9 @@ public enum CertStoreType implements CertStore { * * @param cert 证书信息 * @return 输入流 - * @throws IOException 找不到文件异常 */ @Override - public InputStream getInputStream(Object cert) throws IOException { + public InputStream getInputStream(Object cert) { return (InputStream) cert; } }, @@ -107,10 +105,9 @@ public enum CertStoreType implements CertStore { * * @param url 获取证书信息的URL * @return 输入流 - * @throws IOException 找不到文件异常 */ @Override - public InputStream getInputStream(Object url) throws IOException { + public InputStream getInputStream(Object url) { return new HttpRequestTemplate().getForObject((String) url, InputStream.class); } }, @@ -137,8 +134,5 @@ public enum CertStoreType implements CertStore { } } - }; - - - + } } diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/OrderParaStructure.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/OrderParaStructure.java index 4fd598d04..f1e5e22b9 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/OrderParaStructure.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/OrderParaStructure.java @@ -1,7 +1,7 @@ package org.dromara.daxpay.unisdk.common.bean; -import org.dromara.daxpay.unisdk.common.util.DateUtils; -import org.dromara.daxpay.unisdk.common.util.str.StringUtils; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; import java.util.Date; import java.util.Map; @@ -20,7 +20,7 @@ public final class OrderParaStructure { } public static Map loadParameters(Map parameters, String key, String value) { - if (StringUtils.isNotEmpty(value)) { + if (StrUtil.isNotEmpty(value)) { parameters.put(key, value); } return parameters; @@ -36,7 +36,7 @@ public final class OrderParaStructure { } public static Map loadDateParameters(Map parameters, String key, Order order, String datePattern) { - return OrderParaStructure.loadParameters(parameters, key, DateUtils.formatDate((Date) order.getAttr(key), datePattern)); + return OrderParaStructure.loadParameters(parameters, key, DateUtil.format((Date) order.getAttr(key), datePattern)); } diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/TransferType.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/TransferType.java index d89b6afc8..dd408fbbc 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/TransferType.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/TransferType.java @@ -16,5 +16,5 @@ public interface TransferType extends TransactionType{ * @param order 转账订单 * @return 属性对象 */ - Map setAttr(Map attr, TransferOrder order); + Map setAttr(Map attr, UniTransferOrder order); } diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/PayOrder.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/UniOrder.java similarity index 95% rename from daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/PayOrder.java rename to daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/UniOrder.java index 67aca5abf..a1bd325c2 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/PayOrder.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/UniOrder.java @@ -17,7 +17,7 @@ import java.util.Date; */ @Setter @Getter -public class PayOrder extends AssistOrder { +public class UniOrder extends AssistOrder { /** * 商品名称 */ diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/RefundOrder.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/UniRefundOrder.java similarity index 76% rename from daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/RefundOrder.java rename to daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/UniRefundOrder.java index 87906d287..d2ebdc2e4 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/RefundOrder.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/UniRefundOrder.java @@ -17,7 +17,7 @@ import java.util.Date; */ @Setter @Getter -public class RefundOrder extends AssistOrder { +public class UniRefundOrder extends AssistOrder { /** * 退款单号,每次进行退款的单号,此处唯一 */ @@ -54,23 +54,23 @@ public class RefundOrder extends AssistOrder { */ private String refundUrl; - public RefundOrder() { + public UniRefundOrder() { } - public RefundOrder(String refundNo, String tradeNo, BigDecimal refundAmount) { + public UniRefundOrder(String refundNo, String tradeNo, BigDecimal refundAmount) { this.refundNo = refundNo; setTradeNo(tradeNo); this.refundAmount = refundAmount; } - public RefundOrder(String tradeNo, String outTradeNo, BigDecimal refundAmount, BigDecimal totalAmount) { + public UniRefundOrder(String tradeNo, String outTradeNo, BigDecimal refundAmount, BigDecimal totalAmount) { setTradeNo(tradeNo); setOutTradeNo(outTradeNo); this.refundAmount = refundAmount; this.totalAmount = totalAmount; } - public RefundOrder(String refundNo, String tradeNo, String outTradeNo, BigDecimal refundAmount, BigDecimal totalAmount) { + public UniRefundOrder(String refundNo, String tradeNo, String outTradeNo, BigDecimal refundAmount, BigDecimal totalAmount) { this.refundNo = refundNo; setTradeNo(tradeNo); setOutTradeNo(outTradeNo); diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/TransferOrder.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/UniTransferOrder.java similarity index 97% rename from daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/TransferOrder.java rename to daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/UniTransferOrder.java index 43c473464..8bc1b2e3c 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/TransferOrder.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/UniTransferOrder.java @@ -16,7 +16,7 @@ import java.util.Map; * date 2018/1/31 * */ -public class TransferOrder implements Order { +public class UniTransferOrder implements Order { /** * 转账批次订单单号 diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/outbuilder/JsonBuilder.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/outbuilder/JsonBuilder.java index 6262ed2f1..93ffa1ff5 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/outbuilder/JsonBuilder.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/bean/outbuilder/JsonBuilder.java @@ -14,7 +14,7 @@ import org.dromara.daxpay.unisdk.common.bean.PayOutMessage; */ @Getter public class JsonBuilder extends BaseBuilder{ - JSONObject json = null; + JSONObject json; public JsonBuilder(JSONObject json) { this.json = json; diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/http/ClientHttpRequest.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/http/ClientHttpRequest.java index f70798566..19320f857 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/http/ClientHttpRequest.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/http/ClientHttpRequest.java @@ -1,23 +1,22 @@ package org.dromara.daxpay.unisdk.common.http; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONException; import com.alibaba.fastjson.JSONObject; import lombok.Setter; import lombok.extern.slf4j.Slf4j; -import org.dromara.daxpay.unisdk.common.bean.MethodType; -import org.dromara.daxpay.unisdk.common.bean.result.PayException; -import org.dromara.daxpay.unisdk.common.exception.PayErrorException; -import org.dromara.daxpay.unisdk.common.util.XML; -import org.dromara.daxpay.unisdk.common.util.str.StringUtils; import org.apache.http.*; -import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpResponseException; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; import org.apache.http.util.EntityUtils; +import org.dromara.daxpay.unisdk.common.bean.MethodType; +import org.dromara.daxpay.unisdk.common.bean.result.PayException; +import org.dromara.daxpay.unisdk.common.exception.PayErrorException; +import org.dromara.daxpay.unisdk.common.util.XML; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -88,7 +87,7 @@ public class ClientHttpRequest extends HttpEntityEnclosingRequestBase impleme public ClientHttpRequest(URI uri, MethodType method, Object request, String defaultCharset) { this(uri, method); setParameters(request); - if (StringUtils.isNotEmpty(defaultCharset)) { + if (StrUtil.isNotEmpty(defaultCharset)) { setDefaultCharset(Charset.forName(defaultCharset)); } @@ -218,7 +217,7 @@ public class ClientHttpRequest extends HttpEntityEnclosingRequestBase impleme case HttpHeader entity -> { if (null != entity.getHeaders()) { if (log.isDebugEnabled()) { - log.debug("header : " + JSON.toJSONString(entity.getHeaders())); + log.debug("header : {}", JSON.toJSONString(entity.getHeaders())); } for (Header header : entity.getHeaders()) { addHeader(header); @@ -231,7 +230,7 @@ public class ClientHttpRequest extends HttpEntityEnclosingRequestBase impleme } if (null != entity.getHeaders()) { if (log.isDebugEnabled()) { - log.debug("header : " + JSON.toJSONString(entity.getHeaders())); + log.debug("header : {}", JSON.toJSONString(entity.getHeaders())); } for (Header header : entity.getHeaders()) { addHeader(header); @@ -242,14 +241,14 @@ public class ClientHttpRequest extends HttpEntityEnclosingRequestBase impleme case Map map -> { String parameters = getMapToParameters(map); if (log.isDebugEnabled()) { - log.debug("Parameter : " + parameters); + log.debug("Parameter : {}", parameters); } StringEntity entity = new StringEntity(parameters, APPLICATION_FORM_URLENCODED_UTF_8); setEntity(entity); } case String s -> { if (log.isDebugEnabled()) { - log.debug("Parameter : " + request); + log.debug("Parameter : {}", request); } StringEntity entity = new StringEntity(s, APPLICATION_FORM_URLENCODED_UTF_8); setEntity(entity); @@ -257,7 +256,7 @@ public class ClientHttpRequest extends HttpEntityEnclosingRequestBase impleme default -> { String body = JSON.toJSONString(request); if (log.isDebugEnabled()) { - log.debug("body : " + request); + log.debug("body : {}", request); } StringEntity entity = new StringEntity(body, ContentType.APPLICATION_JSON); setEntity(entity); @@ -270,14 +269,14 @@ public class ClientHttpRequest extends HttpEntityEnclosingRequestBase impleme @Override - public T handleResponse(HttpResponse response) throws ClientProtocolException, IOException { + public T handleResponse(HttpResponse response) throws IOException { final StatusLine statusLine = response.getStatusLine(); final HttpEntity entity = response.getEntity(); if (null == entity){ return null; } - String[] value = null; + String[] value; if (null == entity.getContentType()) { value = new String[]{"application/x-www-form-urlencoded"}; } else { diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/http/HttpRequestTemplate.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/http/HttpRequestTemplate.java index 0d25e2a2c..766163df6 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/http/HttpRequestTemplate.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/http/HttpRequestTemplate.java @@ -1,5 +1,6 @@ package org.dromara.daxpay.unisdk.common.http; +import cn.hutool.core.util.StrUtil; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.apache.http.Header; @@ -23,7 +24,6 @@ import org.apache.http.ssl.SSLContexts; import org.dromara.daxpay.unisdk.common.bean.MethodType; import org.dromara.daxpay.unisdk.common.bean.result.PayException; import org.dromara.daxpay.unisdk.common.exception.PayErrorException; -import org.dromara.daxpay.unisdk.common.util.str.StringUtils; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; @@ -169,7 +169,7 @@ public class HttpRequestTemplate { public CredentialsProvider createCredentialsProvider(HttpConfigStorage configStorage) { - if (StringUtils.isBlank(configStorage.getAuthUsername())) { + if (StrUtil.isBlank(configStorage.getAuthUsername())) { return null; } @@ -197,7 +197,7 @@ public class HttpRequestTemplate { return null; } if (log.isInfoEnabled()) { - log.info(String.format("Initialize the PoolingHttpClientConnectionManager -- maxTotal:%s, defaultMaxPerRoute:%s", configStorage.getMaxTotal(), configStorage.getDefaultMaxPerRoute())); + log.info("Initialize the PoolingHttpClientConnectionManager -- maxTotal:{}, defaultMaxPerRoute:{}", configStorage.getMaxTotal(), configStorage.getDefaultMaxPerRoute()); } Registry socketFactoryRegistry = RegistryBuilder.create() .register("https", createSSL(configStorage)) @@ -219,7 +219,7 @@ public class HttpRequestTemplate { public HttpRequestTemplate setHttpConfigStorage(HttpConfigStorage configStorage) { this.configStorage = configStorage; - if (null != configStorage && StringUtils.isNotBlank(configStorage.getHttpProxyHost())) { + if (null != configStorage && StrUtil.isNotBlank(configStorage.getHttpProxyHost())) { //http代理地址设置 httpProxy = new HttpHost(configStorage.getHttpProxyHost(), configStorage.getHttpProxyPort()); ; @@ -424,9 +424,9 @@ public class HttpRequestTemplate { public ResponseEntity doExecuteEntity(URI uri, Object request, Class responseType, MethodType method) { if (log.isDebugEnabled()) { - log.debug(String.format("uri:%s, httpMethod:%s ", uri, method.name())); + log.debug("uri:{}, httpMethod:{} ", uri, method.name()); } - ClientHttpRequest httpRequest = new ClientHttpRequest(uri, method, request, null == configStorage ? null : configStorage.getCharset()); + ClientHttpRequest httpRequest = new ClientHttpRequest<>(uri, method, request, null == configStorage ? null : configStorage.getCharset()); //判断是否有代理设置 if (null != httpProxy) { httpRequest.setProxy(httpProxy); diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/http/HttpStringEntity.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/http/HttpStringEntity.java index 5a7283708..000b6aef3 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/http/HttpStringEntity.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/http/HttpStringEntity.java @@ -1,11 +1,11 @@ package org.dromara.daxpay.unisdk.common.http; +import cn.hutool.core.util.StrUtil; import lombok.Getter; import org.apache.http.Header; import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; import org.apache.http.message.BasicHeader; -import org.dromara.daxpay.unisdk.common.util.str.StringUtils; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; @@ -64,7 +64,7 @@ public class HttpStringEntity extends StringEntity { } public void requestIsEmpty(String request) { - if (StringUtils.isEmpty(request)) { + if (StrUtil.isEmpty(request)) { this.isEmpty = true; } diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/http/UriVariables.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/http/UriVariables.java index c8e5a41c3..7035f1d70 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/http/UriVariables.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/http/UriVariables.java @@ -1,10 +1,10 @@ package org.dromara.daxpay.unisdk.common.http; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.dromara.daxpay.unisdk.common.bean.result.PayException; import org.dromara.daxpay.unisdk.common.exception.PayErrorException; -import org.dromara.daxpay.unisdk.common.util.str.StringUtils; import java.io.UnsupportedEncodingException; import java.net.URI; @@ -193,13 +193,13 @@ public final class UriVariables { private static void putKeyValueToMap(StringBuilder temp, boolean isKey, String key, Map map) { if (isKey) { key = temp.toString(); - if (key.length() == 0) { + if (key.isEmpty()) { throw new PayErrorException(new PayException("QString format illegal", "内容格式有误")); } map.put(key, ""); } else { - if (key.length() == 0) { + if (key.isEmpty()) { throw new PayErrorException(new PayException("QString format illegal", "内容格式有误")); } map.put(key, temp.toString()); @@ -227,14 +227,14 @@ public final class UriVariables { * @return 去除域名的标准url */ public static String getCanonicalUrl(String url) { - if (StringUtils.isEmpty(url)) { + if (StrUtil.isEmpty(url)) { return url; } try { URI uri = new URI(url); String path = uri.getPath(); String encodedQuery = uri.getQuery(); - if (StringUtils.isNotEmpty(encodedQuery)) { + if (StrUtil.isNotEmpty(encodedQuery)) { path += QUESTION.concat(encodedQuery); } return path; diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/DateUtils.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/DateUtils.java deleted file mode 100644 index 829be1555..000000000 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/DateUtils.java +++ /dev/null @@ -1,146 +0,0 @@ -package org.dromara.daxpay.unisdk.common.util; - -import lombok.extern.slf4j.Slf4j; -import org.apache.http.util.Args; - -import java.lang.ref.SoftReference; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.TimeZone; - -/** - * 日期转换运算工具 - * - * @author egan - *
- *         email egzosn@gmail.com
- *         date 2018-11-21 16:43:20
- *         
- */ -@Slf4j -public final class DateUtils { - - private DateUtils() { - } - - static final class DateFormatHolder { - private static final ThreadLocal>> THREADLOCAL_FORMATS = new ThreadLocal>>(); - - DateFormatHolder() { - } - - public static SimpleDateFormat formatFor(String pattern) { - SoftReference> ref = THREADLOCAL_FORMATS.get(); - Map formats = ref == null ? null : ref.get(); - if (formats == null) { - formats = new HashMap(); - THREADLOCAL_FORMATS.set(new SoftReference(formats)); - } - - SimpleDateFormat format = formats.get(pattern); - - if (format == null) { - format = new SimpleDateFormat(pattern); - format.setTimeZone(TimeZone.getTimeZone("GMT+8")); - ((Map) formats).put(pattern, format); - } - - return format; - } - - public static void clearThreadLocal() { - THREADLOCAL_FORMATS.remove(); - } - } - - public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; - public static final String YYYY_MM_DD_T_HH_MM_SS_SSSXXX = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"; - public static final String YYYY_MM_DD_T_HH_MM_SS_XX = "yyyy-MM-dd'T'HH:mm:ssXXX"; - public static final String YYYY_MM_DD = "yyyy-MM-dd"; - public static final String YYYYMMDD = "yyyyMMdd"; - public static final String YYYYMMDDHHMMSS = "yyyyMMddHHmmss"; - public static final String MMDD = "MMdd"; - public static final String YYYYMM = "yyyyMM"; - public static final String YYYY_MM = "yyyy-MM"; - - - public static String formatDate(Date date, String pattern) { - Args.notNull(date, "Date"); - Args.notNull(pattern, "Pattern"); - SimpleDateFormat formatFor = DateFormatHolder.formatFor(pattern); - return formatFor.format(date); - } - - public static Date parseDate(String date, String pattern) { - Args.notNull(date, "Date"); - Args.notNull(pattern, "Pattern"); - SimpleDateFormat formatFor = DateFormatHolder.formatFor(pattern); - try { - return formatFor.parse(date); - } - catch (ParseException e) { - log.error("", e); - } - return null; - } - - public static Date parse(String date) { - return parseDate(date, YYYY_MM_DD_HH_MM_SS); - } - - public static String format(Date date) { - return formatDate(date, YYYY_MM_DD_HH_MM_SS); - } - - public static Date parseDay(String date) { - return parseDate(date, YYYY_MM_DD); - } - - public static String formatDay(Date date) { - return formatDate(date, YYYY_MM_DD); - } - - /** - * 剩余分钟数 - * - * @param date 结束点日期 - * @return 分钟数 - */ - public static long minutesRemaining(Date date) { - return (date.getTime() / 1000 / 60 - DateUtils.toEpochSecond() / 60); - } - - /** - * 剩余小时 - * - * @param date 结束点日期 - * @return 小时数 - */ - public static long remainingHours(Date date) { - return minutesRemaining(date) / 60; - } - - /** - * 剩余天数 - * - * @param date 结束点日期 - * @return 天数 - */ - public static long remainingDays(Date date) { - return remainingHours(date) / 24; - } - - /** - * 将此日期时间转换为从epoch开始的秒数 - * - * @return epoch开始的秒数 - */ - public static long toEpochSecond() { - return System.currentTimeMillis() / 1000; - } - - -} diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/Util.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/Util.java index 1eaf8c512..f110cc5e4 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/Util.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/Util.java @@ -1,5 +1,8 @@ package org.dromara.daxpay.unisdk.common.util; +import cn.hutool.core.util.StrUtil; + +import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.math.BigInteger; import java.math.RoundingMode; @@ -15,7 +18,7 @@ public class Util { */ public static byte[] intToBytes(int num) { byte[] bytes = new byte[4]; - bytes[0] = (byte) (0xff & (num >> 0)); + bytes[0] = (byte) (0xff & (num)); bytes[1] = (byte) (0xff & (num >> 8)); bytes[2] = (byte) (0xff & (num >> 16)); bytes[3] = (byte) (0xff & (num >> 24)); @@ -31,7 +34,7 @@ public class Util { public static int byteToInt(byte[] bytes) { int num = 0; int temp; - temp = (0x000000ff & (bytes[0])) << 0; + temp = (0x000000ff & (bytes[0])); num = num | temp; temp = (0x000000ff & (bytes[1])) << 8; num = num | temp; @@ -42,6 +45,23 @@ public class Util { return num; } + /** + * @param content 需要加密串 + * @param charset 字符集 + * @return 加密后的字节数组 + */ + public static byte[] getContentBytes(String content, String charset) { + if (StrUtil.isEmpty(charset)) { + return content.getBytes(); + } + try { + return content.getBytes(charset); + } + catch (UnsupportedEncodingException e) { + throw new RuntimeException("转码过程中出现错误,指定的编码集不对,您目前指定的编码集是:" + charset); + } + } + /** * 长整形转换成网络传输的字节流(字节数组)型数据 * @@ -337,14 +357,14 @@ public class Util { int result = 0; for (int i = max; i > 0; i--) { char c = hex.charAt(i - 1); - int algorism = 0; + int algorism; if (c >= '0' && c <= '9') { algorism = c - '0'; } else { algorism = c - 55; } - result += Math.pow(16, max - i) * algorism; + result += (int) (Math.pow(16, max - i) * algorism); } return result; } @@ -433,7 +453,7 @@ public class Util { for (int i = max; i > 0; i--) { char c = binary.charAt(i - 1); int algorism = c - '0'; - result += Math.pow(2, max - i) * algorism; + result += (int) (Math.pow(2, max - i) * algorism); } return result; } @@ -465,10 +485,8 @@ public class Util { * @return 补充结果 */ public static String patchHexString(String str, int maxLength) { - StringBuilder temp = new StringBuilder(); - temp.append("0".repeat(Math.max(0, maxLength - str.length()))); - temp.append(str); - return temp.toString(); + return "0".repeat(Math.max(0, maxLength - str.length())) + + str; } @@ -557,7 +575,7 @@ public class Util { public static byte[] subByte(byte[] input, int startIndex, int length) { byte[] bt = new byte[length]; - System.arraycopy(input, 0 + startIndex, bt, 0, length); + System.arraycopy(input, startIndex, bt, 0, length); return bt; } diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/XML.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/XML.java index ccac9e059..c6b1527fb 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/XML.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/XML.java @@ -1,12 +1,12 @@ package org.dromara.daxpay.unisdk.common.util; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.dromara.daxpay.unisdk.common.bean.result.PayException; import org.dromara.daxpay.unisdk.common.exception.PayErrorException; -import org.dromara.daxpay.unisdk.common.util.str.StringUtils; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; @@ -27,6 +27,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.StringWriter; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Map; @@ -87,7 +88,7 @@ public class XML { */ public static JSONObject toJSONObject(String content, Charset charset) { - if (StringUtils.isEmpty(content)) { + if (StrUtil.isEmpty(content)) { return null; } return toJSONObject(content.getBytes(charset)); @@ -123,10 +124,10 @@ public class XML { */ public static T toBean(String content, Class clazz) { - if (StringUtils.isEmpty(content)) { + if (StrUtil.isEmpty(content)) { return null; } - try (InputStream in = new ByteArrayInputStream(content.getBytes("UTF-8"))) { + try (InputStream in = new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8))) { return inputStream2Bean(in, clazz); } catch (IOException e) { @@ -220,29 +221,27 @@ public class XML { if (null == m) { m = new JSONObject(); } - try { + try (in) { DocumentBuilder documentBuilder = newDocumentBuilder(); Document doc = documentBuilder.parse(in); - doc.getDocumentElement().normalize(); - NodeList children = doc.getDocumentElement().getChildNodes(); + doc.getDocumentElement() + .normalize(); + NodeList children = doc.getDocumentElement() + .getChildNodes(); for (int idx = 0; idx < children.getLength(); ++idx) { Node node = children.item(idx); NodeList nodeList = node.getChildNodes(); int length = nodeList.getLength(); - if (node.getNodeType() == Node.ELEMENT_NODE && (length > 1 || length == 1 && nodeList.item(0).hasChildNodes())) { + if (node.getNodeType() == Node.ELEMENT_NODE && (length > 1 || length == 1 && nodeList.item(0) + .hasChildNodes())) { m.put(node.getNodeName(), getChildren(nodeList)); - } - else if (node.getNodeType() == Node.ELEMENT_NODE) { + } else if (node.getNodeType() == Node.ELEMENT_NODE) { m.put(node.getNodeName(), node.getTextContent()); } } - } - catch (ParserConfigurationException | SAXException e) { + } catch (ParserConfigurationException | SAXException e) { throw new PayErrorException(new PayException("XML failure", "XML解析失败\n" + e.getMessage())); } - finally { - in.close(); - } return m; } diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/CertDescriptor.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/CertDescriptor.java index a86af0a32..5d7dafc71 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/CertDescriptor.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/CertDescriptor.java @@ -14,8 +14,8 @@ */ package org.dromara.daxpay.unisdk.common.util.sign; +import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; -import org.dromara.daxpay.unisdk.common.util.str.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -63,7 +63,7 @@ public class CertDescriptor { */ private static X509Certificate initCert(InputStream certIn) { X509Certificate encryptCertTemp = null; - CertificateFactory cf = null; + CertificateFactory cf; try { cf = CertificateFactory.getInstance("X.509"); encryptCertTemp = (X509Certificate) cf.generateCertificate(certIn); @@ -97,8 +97,7 @@ public class CertDescriptor { */ private static X509Certificate initCert(String path) { X509Certificate encryptCertTemp = null; - CertificateFactory cf = null; - FileInputStream in = null; + FileInputStream in; try { in = new FileInputStream(path); encryptCertTemp = initCert(in); @@ -227,7 +226,7 @@ public class CertDescriptor { log.warn("Load RSA CertPath,Pwd=[{}],type=[{}]", keyPwd, type); } - char[] nPassword = null; + char[] nPassword; nPassword = null == keyPwd || keyPwd.trim() .isEmpty() ? null : keyPwd.toCharArray(); ks.load(fxKeyFile, nPassword); @@ -257,7 +256,7 @@ public class CertDescriptor { * @return */ private String getCertIdIdByStore(KeyStore keyStore) { - Enumeration aliasenum = null; + Enumeration aliasenum; try { aliasenum = keyStore.aliases(); String keyAlias = null; @@ -281,7 +280,7 @@ public class CertDescriptor { * @param certPath 证书地址 */ public void initPublicCert(String certPath) { - if (!StringUtils.isEmpty(certPath)) { + if (!StrUtil.isEmpty(certPath)) { publicKeyCert = initCert(certPath); if (log.isInfoEnabled()) { log.info("Load PublicKeyCert Successful"); @@ -315,7 +314,7 @@ public class CertDescriptor { * @param certPath 证书地址 */ public void initRootCert(String certPath) { - if (!StringUtils.isEmpty(certPath)) { + if (!StrUtil.isEmpty(certPath)) { try { initRootCert(new FileInputStream(certPath)); } diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/SignTextUtils.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/SignTextUtils.java index 924bf774e..8ae5b7bc2 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/SignTextUtils.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/SignTextUtils.java @@ -1,6 +1,6 @@ package org.dromara.daxpay.unisdk.common.util.sign; -import org.dromara.daxpay.unisdk.common.util.str.StringUtils; +import cn.hutool.core.util.StrUtil; import org.apache.http.message.BasicNameValuePair; import java.util.*; @@ -83,7 +83,7 @@ public final class SignTextUtils { } sb.append(entry.getKey()).append("=").append(valStr).append(separator); } - if (sb.length() > 0 && !"".equals(separator)) { + if (!sb.isEmpty() && !"".equals(separator)) { sb.deleteCharAt(sb.length() - 1); } return sb.toString(); @@ -98,7 +98,7 @@ public final class SignTextUtils { private static String sortMapParameterText(Map parameters, String separator, boolean ignoreNullValue, String... ignoreKey) { StringBuilder sb = new StringBuilder(); // TODO 2016/11/11 10:14 author: egan 未排序须处理 - List keys = new ArrayList(parameters.keySet()); + List keys = new ArrayList<>(parameters.keySet()); //排序 Collections.sort(keys); for (String k : keys) { @@ -120,12 +120,12 @@ public final class SignTextUtils { else { valueStr = new StringBuilder(o.toString()); } - if (StringUtils.isBlank(valueStr.toString()) || (null != ignoreKey && Arrays.binarySearch(ignoreKey, k) >= 0)) { + if (StrUtil.isBlank(valueStr.toString()) || (null != ignoreKey && Arrays.binarySearch(ignoreKey, k) >= 0)) { continue; } sb.append(k).append("=").append(valueStr).append(separator); } - if (sb.length() > 0) { + if (!sb.isEmpty()) { sb.deleteCharAt(sb.length() - 1); } return sb.toString(); @@ -156,18 +156,9 @@ public final class SignTextUtils { } } - return StringUtils.isBlank(sb.toString()) ? "" : sb.deleteCharAt(sb.length() - 1).toString(); + return StrUtil.isBlank(sb.toString()) ? "" : sb.deleteCharAt(sb.length() - 1).toString(); } - /** - * 获取随机字符串 - * - * @return 随机字符串 - */ - public static String randomStr() { - return StringUtils.randomStr(); - } - } diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/Base64.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/Base64.java deleted file mode 100644 index 31a96507a..000000000 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/Base64.java +++ /dev/null @@ -1,25 +0,0 @@ - - -package org.dromara.daxpay.unisdk.common.util.sign.encrypt; -/** - * Base64 - * @author egan - *
- * email egzosn@gmail.com
- *
- * create 2019/05/15 12:50
- * 
- */ -public class Base64 { - - private Base64() {} - - public static byte[] decode(String str) { - return org.apache.commons.codec.binary.Base64.decodeBase64(str); - } - - public static String encode(byte[] bytes) { - return org.apache.commons.codec.binary.Base64.encodeBase64String(bytes); - } - -} diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/HmacSha256.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/HmacSha256.java index cdd422664..e22656fdd 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/HmacSha256.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/HmacSha256.java @@ -29,7 +29,7 @@ public class HmacSha256 { * @return 签名值 */ public static String createSign(String content, String key, String characterEncoding) { - Mac sha256HMAC = null; + Mac sha256HMAC; try { sha256HMAC = Mac.getInstance("HmacSHA256"); SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(characterEncoding), "HmacSHA256"); diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/MD5.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/MD5.java index c7e691b26..39ef86ef1 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/MD5.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/MD5.java @@ -1,10 +1,9 @@ package org.dromara.daxpay.unisdk.common.util.sign.encrypt; -import org.dromara.daxpay.unisdk.common.util.str.StringUtils; -import org.apache.commons.codec.digest.DigestUtils; - -import static org.dromara.daxpay.unisdk.common.util.str.StringUtils.getContentBytes; +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.digest.DigestUtil; +import org.dromara.daxpay.unisdk.common.util.Util; /** * MD5签名工具 @@ -26,7 +25,7 @@ public class MD5 { public static String sign(String text, String key, String inputCharset) { //拼接key text = text + key; - return DigestUtils.md5Hex(getContentBytes(text, inputCharset)); + return DigestUtil.md5Hex(Util.getContentBytes(text, inputCharset)); } /** @@ -40,7 +39,7 @@ public class MD5 { */ public static boolean verify(String text, String sign, String key, String inputCharset) { //判断是否一样 - return StringUtils.equals(sign(text, key, inputCharset).toUpperCase(), sign.toUpperCase()); + return StrUtil.equals(sign(text, key, inputCharset).toUpperCase(), sign.toUpperCase()); } diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/RSA.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/RSA.java index d43b0a4d9..c25d9b4a5 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/RSA.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/RSA.java @@ -1,6 +1,7 @@ package org.dromara.daxpay.unisdk.common.util.sign.encrypt; +import cn.hutool.core.codec.Base64; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -220,7 +221,7 @@ public class RSA { byte[] buf = new byte[128]; int bufl; while ((bufl = ins.read(buf)) != -1) { - byte[] block = null; + byte[] block; if (buf.length == bufl) { block = buf; @@ -286,7 +287,7 @@ public class RSA { public static PublicKey getPublicKey(InputStream inputStream, String keyAlgorithm) throws IOException, GeneralSecurityException { try (BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));) { StringBuilder sb = new StringBuilder(); - String readLine = null; + String readLine; while ((readLine = br.readLine()) != null) { if (readLine.charAt(0) == '-') { continue; diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/RSA2.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/RSA2.java index a29d4b833..5651efbc9 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/RSA2.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/RSA2.java @@ -1,6 +1,8 @@ package org.dromara.daxpay.unisdk.common.util.sign.encrypt; +import cn.hutool.core.codec.Base64; + import java.io.IOException; import java.security.GeneralSecurityException; import java.security.PrivateKey; diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/SHA1.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/SHA1.java index ee4bce447..ed8cb1aee 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/SHA1.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/SHA1.java @@ -1,7 +1,8 @@ package org.dromara.daxpay.unisdk.common.util.sign.encrypt; -import org.dromara.daxpay.unisdk.common.util.str.StringUtils; +import cn.hutool.core.util.StrUtil; import org.apache.commons.codec.digest.DigestUtils; +import org.dromara.daxpay.unisdk.common.util.Util; /** @@ -28,7 +29,7 @@ public class SHA1 { public static String sign(String text, String key, String inputCharset) { //拼接key text = text + key; - return DigestUtils.sha1Hex( StringUtils.getContentBytes(text, inputCharset)); + return DigestUtils.sha1Hex(Util.getContentBytes(text, inputCharset)); } @@ -43,7 +44,7 @@ public class SHA1 { */ public static boolean verify(String text, String sign, String key, String inputCharset) { //判断是否一样 - return StringUtils.equals(sign(text, key, inputCharset).toUpperCase(), sign.toUpperCase()); + return StrUtil.equals(sign(text, key, inputCharset).toUpperCase(), sign.toUpperCase()); } } diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/SHA256.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/SHA256.java index 414656208..c857a90f7 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/SHA256.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/SHA256.java @@ -1,5 +1,6 @@ package org.dromara.daxpay.unisdk.common.util.sign.encrypt; +import cn.hutool.core.util.StrUtil; import org.dromara.daxpay.unisdk.common.util.str.StringUtils; import org.apache.commons.codec.digest.DigestUtils; @@ -42,7 +43,7 @@ public class SHA256 { */ public static boolean verify(String text, String sign, String key, String inputCharset) { //判断是否一样 - return StringUtils.equals(sign(text, key, inputCharset).toUpperCase(), sign.toUpperCase()); + return StrUtil.equals(sign(text, key, inputCharset).toUpperCase(), sign.toUpperCase()); } } diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/sm3/SM3.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/sm3/SM3.java index 860751426..bd7ee3681 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/sm3/SM3.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/sm3/SM3.java @@ -167,10 +167,8 @@ public class SM3 { } private static int P0(int X) { - int y = rotateLeft(X, 9); - y = bitCycleLeft(X, 9); - int z = rotateLeft(X, 17); - z = bitCycleLeft(X, 17); + int y = bitCycleLeft(X, 9); + int z = bitCycleLeft(X, 17); return X ^ y ^ z; } @@ -193,7 +191,7 @@ public class SM3 { k += 1; byte[] padd = new byte[k / 8]; padd[0] = (byte) 0x80; - long n = in.length * 8 + bLen * 512; + long n = in.length * 8L + bLen * 512L; byte[] out = new byte[in.length + k / 8 + 64 / 8]; int pos = 0; System.arraycopy(in, 0, out, 0, in.length); diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/sm3/SM3Digest.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/sm3/SM3Digest.java index b935a4508..56dae7164 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/sm3/SM3Digest.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/sign/encrypt/sm3/SM3Digest.java @@ -14,7 +14,7 @@ public class SM3Digest { /** * 缓冲区长度 */ - private static final int BUFFER_LENGTH = BLOCK_LENGTH * 1; + private static final int BUFFER_LENGTH = BLOCK_LENGTH; /** * 缓冲区 diff --git a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/str/StringUtils.java b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/str/StringUtils.java index 49b5dd374..826bc50b0 100644 --- a/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/str/StringUtils.java +++ b/daxpay-single/daxpay-single-unisdk/src/main/java/org/dromara/daxpay/unisdk/common/util/str/StringUtils.java @@ -3,126 +3,19 @@ package org.dromara.daxpay.unisdk.common.util.str; import cn.hutool.core.util.StrUtil; import java.io.UnsupportedEncodingException; -import java.util.UUID; /** * Created by ZaoSheng on 2016/6/4. */ public class StringUtils { - /** - * 比较两个字符串(大小写敏感)。 - *
-     * StringUtil.equals(null, null)   = true
-     * StringUtil.equals(null, "abc")  = false
-     * StringUtil.equals("abc", null)  = false
-     * StringUtil.equals("abc", "abc") = true
-     * StringUtil.equals("abc", "ABC") = false
-     * 
- * - * @param str1 要比较的字符串1 - * @param str2 要比较的字符串2 - * @return 如果两个字符串相同,或者都是null,则返回true - */ - public static boolean equals(String str1, String str2) { - if (str1 == null) { - return str2 == null; - } - - return str1.equals(str2); - } - // Empty checks - //----------------------------------------------------------------------- - - /** - *

Checks if a CharSequence is empty ("") or null.

- *
-     * StringUtils.isEmpty(null)      = true
-     * StringUtils.isEmpty("")        = true
-     * StringUtils.isEmpty(" ")       = false
-     * StringUtils.isEmpty("bob")     = false
-     * StringUtils.isEmpty("  bob  ") = false
-     * 
- * - * @param cs the CharSequence to check, may be null - * @return {@code true} if the CharSequence is empty or null - */ - public static boolean isEmpty(CharSequence cs) { - return cs == null || cs.length() == 0; - } - - /** - *

Checks if a CharSequence is not empty ("") and not null.

- * - *
-     * StringUtils.isNotEmpty(null)      = false
-     * StringUtils.isNotEmpty("")        = false
-     * StringUtils.isNotEmpty(" ")       = true
-     * StringUtils.isNotEmpty("bob")     = true
-     * StringUtils.isNotEmpty("  bob  ") = true
-     * 
- * - * @param cs the CharSequence to check, may be null - * @return {@code true} if the CharSequence is not empty and not null - */ - public static boolean isNotEmpty(CharSequence cs) { - return !StrUtil.isEmpty(cs); - } - - /** - *

Checks if a CharSequence is whitespace, empty ("") or null.

- * - *
-     * StringUtils.isBlank(null)      = true
-     * StringUtils.isBlank("")        = true
-     * StringUtils.isBlank(" ")       = true
-     * StringUtils.isBlank("bob")     = false
-     * StringUtils.isBlank("  bob  ") = false
-     * 
- * - * @param cs the CharSequence to check, may be null - * @return {@code true} if the CharSequence is null, empty or whitespace - * @since 2.0 - */ - public static boolean isBlank(CharSequence cs) { - int strLen; - if (cs == null || (strLen = cs.length()) == 0) { - return true; - } - for (int i = 0; i < strLen; i++) { - if (!Character.isWhitespace(cs.charAt(i))) { - return false; - } - } - return true; - } - - /** - *

Checks if a CharSequence is not empty (""), not null and not whitespace only.

- * - *
-     * StringUtils.isNotBlank(null)      = false
-     * StringUtils.isNotBlank("")        = false
-     * StringUtils.isNotBlank(" ")       = false
-     * StringUtils.isNotBlank("bob")     = true
-     * StringUtils.isNotBlank("  bob  ") = true
-     * 
- * - * @param cs the CharSequence to check, may be null - * @return {@code true} if the CharSequence is - * not empty and not null and not whitespace - */ - public static boolean isNotBlank(CharSequence cs) { - return !StringUtils.isBlank(cs); - } - /** * @param content 需要加密串 * @param charset 字符集 * @return 加密后的字节数组 */ public static byte[] getContentBytes(String content, String charset) { - if (StringUtils.isEmpty(charset)) { + if (StrUtil.isEmpty(charset)) { return content.getBytes(); } try { @@ -133,45 +26,4 @@ public class StringUtils { } } - /** - * 对 subject body 进行 trim 运算, - * 以防止在签名是可能造成的签名错误问题 - * - * @param str 字符 - * @return 去除空格之后的字符 - */ - public static String tryTrim(String str) { - return str == null ? null : str.trim(); - } - - - /** - * 字符串数组拼接为字符串 - * - * @param separator 分隔符 - * @param str 字符数组 - * @return 字符串 - */ - public static String joining(String separator, String... str) { - StringBuilder builder = new StringBuilder(); - for (String s : str) { - if (null == s) { - continue; - } - - builder.append(s).append(separator); - } - return builder.toString(); - } - - /** - * 获取随机字符串 - * - * @return 随机字符串 - */ - public static String randomStr() { - return UUID.randomUUID().toString().replace("-", ""); - } - - }