fix(wechat): 优化了微信支付方式的判断逻辑,提高了系统稳定性

-
This commit is contained in:
DaxPay
2024-11-07 11:14:00 +08:00
parent 9c216ffec0
commit 7446aa0a14
4 changed files with 42 additions and 26 deletions

View File

@@ -11,6 +11,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
/**
@@ -26,6 +27,14 @@ public class WechatPayService {
* 校验
*/
public void validation(PayParam payParam, WechatPayParam wechatPayParam, WechatPayConfig weChatPayConfig) {
// 判断是否是支持的支付方式
String method = payParam.getMethod();
PayMethodEnum methodEnum = PayMethodEnum.findByCode(method);
if (List.of(PayMethodEnum.APP,PayMethodEnum.BARCODE,PayMethodEnum.WAP,PayMethodEnum.QRCODE,PayMethodEnum.JSAPI).contains(methodEnum)) {
throw new ValidationFailedException("不支持的支付方式");
}
// 支付金额是否超限
if (BigDecimalUtil.isGreaterThan(payParam.getAmount(),weChatPayConfig.getLimitAmount())) {
throw new AmountExceedLimitException("微信支付金额超限");

View File

@@ -2,18 +2,6 @@ package org.dromara.daxpay.channel.wechat.service.pay;
import cn.bootx.platform.common.spring.exception.RetryableException;
import cn.bootx.platform.core.util.JsonUtil;
import org.dromara.daxpay.channel.wechat.entity.config.WechatPayConfig;
import org.dromara.daxpay.channel.wechat.param.pay.WechatPayParam;
import org.dromara.daxpay.channel.wechat.service.config.WechatPayConfigService;
import org.dromara.daxpay.channel.wechat.util.WechatPayUtil;
import org.dromara.daxpay.core.enums.PayMethodEnum;
import org.dromara.daxpay.core.enums.PayStatusEnum;
import org.dromara.daxpay.core.exception.TradeFailException;
import org.dromara.daxpay.core.result.trade.pay.PaySyncResult;
import org.dromara.daxpay.core.util.PayUtil;
import org.dromara.daxpay.service.bo.trade.PayResultBo;
import org.dromara.daxpay.service.entity.order.pay.PayOrder;
import org.dromara.daxpay.service.service.trade.pay.PaySyncService;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.extra.spring.SpringUtil;
@@ -30,6 +18,19 @@ import com.github.binarywang.wxpay.service.WxPayService;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.dromara.daxpay.channel.wechat.entity.config.WechatPayConfig;
import org.dromara.daxpay.channel.wechat.param.pay.WechatPayParam;
import org.dromara.daxpay.channel.wechat.service.config.WechatPayConfigService;
import org.dromara.daxpay.channel.wechat.util.WechatPayUtil;
import org.dromara.daxpay.core.enums.PayMethodEnum;
import org.dromara.daxpay.core.enums.PayStatusEnum;
import org.dromara.daxpay.core.exception.MethodNotExistException;
import org.dromara.daxpay.core.exception.TradeFailException;
import org.dromara.daxpay.core.result.trade.pay.PaySyncResult;
import org.dromara.daxpay.core.util.PayUtil;
import org.dromara.daxpay.service.bo.trade.PayResultBo;
import org.dromara.daxpay.service.entity.order.pay.PayOrder;
import org.dromara.daxpay.service.service.trade.pay.PaySyncService;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@@ -78,6 +79,8 @@ public class WechatPayV2Service {
else if (payMethodEnum == PayMethodEnum.BARCODE) {
this.barCodePay(payOrder, wechatPayParam.getAuthCode(), config, payInfo);
return payInfo;
} else {
throw new MethodNotExistException("不支持的支付方式");
}
payInfo.setPayBody(payBody);
return payInfo;

View File

@@ -2,20 +2,6 @@ package org.dromara.daxpay.channel.wechat.service.pay;
import cn.bootx.platform.common.spring.exception.RetryableException;
import cn.bootx.platform.core.util.JsonUtil;
import org.dromara.daxpay.channel.wechat.entity.config.WechatPayConfig;
import org.dromara.daxpay.channel.wechat.param.pay.WechatPayParam;
import org.dromara.daxpay.channel.wechat.param.pay.WxPayCodepayRequest;
import org.dromara.daxpay.channel.wechat.result.pay.WxPayCodepayResult;
import org.dromara.daxpay.channel.wechat.service.config.WechatPayConfigService;
import org.dromara.daxpay.channel.wechat.util.WechatPayUtil;
import org.dromara.daxpay.core.enums.PayMethodEnum;
import org.dromara.daxpay.core.enums.PayStatusEnum;
import org.dromara.daxpay.core.exception.TradeFailException;
import org.dromara.daxpay.core.result.trade.pay.PaySyncResult;
import org.dromara.daxpay.core.util.PayUtil;
import org.dromara.daxpay.service.bo.trade.PayResultBo;
import org.dromara.daxpay.service.entity.order.pay.PayOrder;
import org.dromara.daxpay.service.service.trade.pay.PaySyncService;
import cn.hutool.extra.spring.SpringUtil;
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderV3Request;
import com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderV3Result;
@@ -29,6 +15,21 @@ import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.daxpay.channel.wechat.entity.config.WechatPayConfig;
import org.dromara.daxpay.channel.wechat.param.pay.WechatPayParam;
import org.dromara.daxpay.channel.wechat.param.pay.WxPayCodepayRequest;
import org.dromara.daxpay.channel.wechat.result.pay.WxPayCodepayResult;
import org.dromara.daxpay.channel.wechat.service.config.WechatPayConfigService;
import org.dromara.daxpay.channel.wechat.util.WechatPayUtil;
import org.dromara.daxpay.core.enums.PayMethodEnum;
import org.dromara.daxpay.core.enums.PayStatusEnum;
import org.dromara.daxpay.core.exception.MethodNotExistException;
import org.dromara.daxpay.core.exception.TradeFailException;
import org.dromara.daxpay.core.result.trade.pay.PaySyncResult;
import org.dromara.daxpay.core.util.PayUtil;
import org.dromara.daxpay.service.bo.trade.PayResultBo;
import org.dromara.daxpay.service.entity.order.pay.PayOrder;
import org.dromara.daxpay.service.service.trade.pay.PaySyncService;
import org.springframework.retry.annotation.Backoff;
import org.springframework.retry.annotation.Retryable;
import org.springframework.scheduling.annotation.Async;
@@ -79,6 +80,8 @@ public class WechatPayV3Service {
// 付款码支付
else if (payMethodEnum == PayMethodEnum.BARCODE) {
this.barCodePay(payOrder, wechatPayParam.getAuthCode(), config, payResult);
} else {
throw new MethodNotExistException("不支持的支付方式");
}
payResult.setPayBody(payBody);
return payResult;

View File

@@ -64,6 +64,7 @@ public class PayParam extends PaymentCommonParam {
/**
* 支付方式编码
* @see org.dromara.daxpay.core.enums.PayMethodEnum
*/
@Schema(description = "支付方式编码")
@NotBlank(message = "支付方式不可为空")