mirror of
https://gitee.com/hhyykk/ipms-sjy.git
synced 2025-07-23 15:35:06 +08:00
优化 支付配置校验方式,优化业务层异常抛出类型,优化支付应用渲染逻辑,添加删除支付商户 支付应用的校验,退款订单去除reqNo字段,支付订单去除 channelExtras 参数展示
This commit is contained in:
@ -1,10 +1,11 @@
|
||||
package cn.iocoder.yudao.framework.pay.core.client;
|
||||
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
|
||||
import com.fasterxml.jackson.annotation.JsonTypeInfo;
|
||||
|
||||
import javax.validation.ConstraintViolation;
|
||||
import javax.validation.ConstraintViolationException;
|
||||
import javax.validation.Validator;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 支付客户端的配置,本质是支付渠道的配置
|
||||
@ -19,8 +20,22 @@ import javax.validation.Validator;
|
||||
public interface PayClientConfig {
|
||||
|
||||
/**
|
||||
* 验证配置参数是否正确
|
||||
* 配置验证参数是
|
||||
*
|
||||
* @param validator 校验对象
|
||||
* @return 配置好的验证参数
|
||||
*/
|
||||
Set<ConstraintViolation<PayClientConfig>> verifyParam(Validator validator);
|
||||
|
||||
/**
|
||||
* 参数校验
|
||||
*
|
||||
* @param validator 校验对象
|
||||
*/
|
||||
void verifyParam(Validator validator);
|
||||
default void validate(Validator validator) {
|
||||
Set<ConstraintViolation<PayClientConfig>> violations = verifyParam(validator);
|
||||
if (!violations.isEmpty()) {
|
||||
throw new ConstraintViolationException(violations);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2,17 +2,12 @@ package cn.iocoder.yudao.framework.pay.core.client.impl.alipay;
|
||||
|
||||
import cn.iocoder.yudao.framework.pay.core.client.PayClientConfig;
|
||||
import lombok.Data;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.validation.ConstraintViolation;
|
||||
import javax.validation.Validator;
|
||||
import javax.validation.constraints.AssertTrue;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
// TODO 芋艿:参数校验
|
||||
|
||||
@ -114,18 +109,9 @@ public class AlipayPayClientConfig implements PayClientConfig {
|
||||
public interface ModeCertificate {
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证配置参数是否正确
|
||||
* @param validator 校验对象
|
||||
*/
|
||||
@Override
|
||||
public void verifyParam(Validator validator) {
|
||||
// 手动调用validate进行验证
|
||||
Set<ConstraintViolation<AlipayPayClientConfig>> validate = validator.validate(this,
|
||||
public Set<ConstraintViolation<PayClientConfig>> verifyParam(Validator validator) {
|
||||
return validator.validate(this,
|
||||
MODE_PUBLIC_KEY.equals(this.getMode()) ? ModePublicKey.class : ModeCertificate.class);
|
||||
|
||||
// 断言没有异常
|
||||
Assert.isTrue(validate.isEmpty(), validate.stream().map(ConstraintViolation::getMessage)
|
||||
.collect(Collectors.joining(",")));
|
||||
}
|
||||
}
|
||||
|
@ -3,7 +3,6 @@ package cn.iocoder.yudao.framework.pay.core.client.impl.wx;
|
||||
import cn.hutool.core.io.IoUtil;
|
||||
import cn.iocoder.yudao.framework.pay.core.client.PayClientConfig;
|
||||
import lombok.Data;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
import javax.validation.ConstraintViolation;
|
||||
import javax.validation.Validator;
|
||||
@ -11,7 +10,6 @@ import javax.validation.constraints.NotBlank;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
// TODO 芋艿:参数校验
|
||||
|
||||
@ -101,19 +99,9 @@ public class WXPayClientConfig implements PayClientConfig {
|
||||
public interface V3 {
|
||||
}
|
||||
|
||||
// TODO @aquan:1)已经有注释,不用重复注释;2)方法名改成 validate,比较适合 validator;3)断言是否有异常,可以封一个 ConstraintViolationException 异常
|
||||
/**
|
||||
* 验证配置参数是否正确
|
||||
* @param validator 校验对象
|
||||
*/
|
||||
@Override
|
||||
public void verifyParam(Validator validator) {
|
||||
// 手动调用validate进行验证
|
||||
Set<ConstraintViolation<PayClientConfig>> validate = validator.validate(this,
|
||||
this.getApiVersion().equals(API_VERSION_V2) ? V2.class : V3.class);
|
||||
// 断言没有异常
|
||||
Assert.isTrue(validate.isEmpty(), validate.stream().map(ConstraintViolation::getMessage)
|
||||
.collect(Collectors.joining(",")));
|
||||
public Set<ConstraintViolation<PayClientConfig>> verifyParam(Validator validator) {
|
||||
return validator.validate(this, this.getApiVersion().equals(API_VERSION_V2) ? V2.class : V3.class);
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws FileNotFoundException {
|
||||
|
@ -17,18 +17,21 @@ import lombok.Getter;
|
||||
@AllArgsConstructor
|
||||
public enum PayChannelEnum {
|
||||
|
||||
WX_PUB("wx_pub", "微信 JSAPI 支付"), // 公众号的网页
|
||||
WX_LITE("wx_lite","微信小程序支付"),
|
||||
WX_APP("wx_app", "微信 App 支付"),
|
||||
/**
|
||||
* 公众号网页
|
||||
*/
|
||||
WX_PUB("wx_pub", "微信 JSAPI 支付", WXPayClientConfig.class),
|
||||
WX_LITE("wx_lite", "微信小程序支付", WXPayClientConfig.class),
|
||||
WX_APP("wx_app", "微信 App 支付", WXPayClientConfig.class),
|
||||
|
||||
ALIPAY_PC("alipay_pc", "支付宝 PC 网站支付"),
|
||||
ALIPAY_WAP("alipay_wap", "支付宝 Wap 网站支付"),
|
||||
ALIPAY_APP("alipay_app", "支付宝App 支付"),
|
||||
ALIPAY_QR("alipay_qr", "支付宝扫码支付");
|
||||
ALIPAY_PC("alipay_pc", "支付宝 PC 网站支付", AlipayPayClientConfig.class),
|
||||
ALIPAY_WAP("alipay_wap", "支付宝 Wap 网站支付", AlipayPayClientConfig.class),
|
||||
ALIPAY_APP("alipay_app", "支付宝App 支付", AlipayPayClientConfig.class),
|
||||
ALIPAY_QR("alipay_qr", "支付宝扫码支付", AlipayPayClientConfig.class);
|
||||
|
||||
/**
|
||||
* 编码
|
||||
*
|
||||
* <p>
|
||||
* 参考 https://www.pingxx.com/api/支付渠道属性值.html
|
||||
*/
|
||||
private String code;
|
||||
@ -37,6 +40,11 @@ public enum PayChannelEnum {
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 配置类
|
||||
*/
|
||||
private Class<? extends PayClientConfig> configClass;
|
||||
|
||||
/**
|
||||
* 微信支付
|
||||
*/
|
||||
@ -50,27 +58,6 @@ public enum PayChannelEnum {
|
||||
public static PayChannelEnum getByCode(String code) {
|
||||
return ArrayUtil.firstMatch(o -> o.getCode().equals(code), values());
|
||||
}
|
||||
|
||||
// TODO @aquan:加一个 configClass 字段,不用 switch 的方式哈。不然新增一个支付方式,需要改的方法有点多
|
||||
/**
|
||||
* 根据编码得到支付类
|
||||
*
|
||||
* @param code 编码
|
||||
* @return 支付配置类
|
||||
*/
|
||||
public static Class<? extends PayClientConfig> findByCodeGetClass(String code) {
|
||||
switch (PayChannelEnum.getByCode(code)){
|
||||
case WX_PUB:
|
||||
case WX_LITE:
|
||||
case WX_APP:
|
||||
return WXPayClientConfig.class;
|
||||
case ALIPAY_PC:
|
||||
case ALIPAY_WAP:
|
||||
case ALIPAY_APP:
|
||||
case ALIPAY_QR:
|
||||
return AlipayPayClientConfig.class;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user