fix: 修复 BigDecimal 类型数据序列化和签名异常问题, 修复微信支付方式判断逻辑

This commit is contained in:
DaxPay
2024-11-11 10:16:22 +08:00
parent 7446aa0a14
commit 2c94841e4f
5 changed files with 8 additions and 5 deletions

View File

@@ -30,7 +30,7 @@ public class WechatPayService {
// 判断是否是支持的支付方式 // 判断是否是支持的支付方式
String method = payParam.getMethod(); String method = payParam.getMethod();
PayMethodEnum methodEnum = PayMethodEnum.findByCode(method); PayMethodEnum methodEnum = PayMethodEnum.findByCode(method);
if (List.of(PayMethodEnum.APP,PayMethodEnum.BARCODE,PayMethodEnum.WAP,PayMethodEnum.QRCODE,PayMethodEnum.JSAPI).contains(methodEnum)) { if (!List.of(PayMethodEnum.APP,PayMethodEnum.BARCODE,PayMethodEnum.WAP,PayMethodEnum.QRCODE,PayMethodEnum.JSAPI).contains(methodEnum)) {
throw new ValidationFailedException("不支持的支付方式"); throw new ValidationFailedException("不支持的支付方式");
} }

View File

@@ -17,6 +17,7 @@ import lombok.experimental.UtilityClass;
public class JsonUtil { public class JsonUtil {
private final JSONConfig JSON_CONFIG = JSONConfig.create() private final JSONConfig JSON_CONFIG = JSONConfig.create()
.setDateFormat(DatePattern.NORM_DATETIME_PATTERN); .setDateFormat(DatePattern.NORM_DATETIME_PATTERN);
// .setStripTrailingZeros(false);
/** /**
* 转换为实体 * 转换为实体

View File

@@ -77,7 +77,7 @@ public class PaySignUtil {
// BigDecimal类型 // BigDecimal类型
else if (field.getType().equals(BigDecimal.class)) { else if (field.getType().equals(BigDecimal.class)) {
BigDecimal bigDecimal = (BigDecimal) fieldValue; BigDecimal bigDecimal = (BigDecimal) fieldValue;
String decimalString = bigDecimal.toString(); String decimalString = bigDecimal.stripTrailingZeros().toPlainString();;
map.put(fieldName, decimalString); map.put(fieldName, decimalString);
} }
// 集合类型 // 集合类型

View File

@@ -11,6 +11,7 @@ import cn.daxpay.single.sdk.param.channel.WechatPayParam;
import cn.daxpay.single.sdk.param.trade.pay.PayParam; import cn.daxpay.single.sdk.param.trade.pay.PayParam;
import cn.daxpay.single.sdk.response.DaxPayResult; import cn.daxpay.single.sdk.response.DaxPayResult;
import cn.daxpay.single.sdk.util.JsonUtil; import cn.daxpay.single.sdk.util.JsonUtil;
import cn.daxpay.single.sdk.util.PaySignUtil;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -29,7 +30,7 @@ public class PayOrderTest {
DaxPayConfig config = DaxPayConfig.builder() DaxPayConfig config = DaxPayConfig.builder()
.serviceUrl("http://127.0.0.1:9999") .serviceUrl("http://127.0.0.1:9999")
.signSecret("123456") .signSecret("123456")
.appId("M7934041241299655") .appId("M8207639754663343")
.signType(SignTypeEnum.HMAC_SHA256) .signType(SignTypeEnum.HMAC_SHA256)
.build(); .build();
DaxPayKit.initConfig(config); DaxPayKit.initConfig(config);
@@ -45,7 +46,7 @@ public class PayOrderTest {
param.setBizOrderNo("SDK_"+ System.currentTimeMillis()); param.setBizOrderNo("SDK_"+ System.currentTimeMillis());
param.setTitle("测试微信扫码支付"); param.setTitle("测试微信扫码支付");
param.setDescription("这是支付备注"); param.setDescription("这是支付备注");
param.setAmount(BigDecimal.valueOf(0.01)); param.setAmount(BigDecimal.valueOf(1.00));
param.setChannel(ChannelEnum.WECHAT.getCode()); param.setChannel(ChannelEnum.WECHAT.getCode());
param.setMethod(PayMethodEnum.QRCODE.getCode()); param.setMethod(PayMethodEnum.QRCODE.getCode());
param.setAttach("{回调参数}"); param.setAttach("{回调参数}");
@@ -55,6 +56,7 @@ public class PayOrderTest {
DaxPayResult<PayResultModel> execute = DaxPayKit.execute(param); DaxPayResult<PayResultModel> execute = DaxPayKit.execute(param);
System.out.println(JsonUtil.toJsonStr(execute)); System.out.println(JsonUtil.toJsonStr(execute));
System.out.println(PaySignUtil.hmacSha256Sign(execute, "123456"));
} }
/** /**

View File

@@ -78,7 +78,7 @@ public class PaySignUtil {
// BigDecimal类型 // BigDecimal类型
else if (field.getType().equals(BigDecimal.class)) { else if (field.getType().equals(BigDecimal.class)) {
BigDecimal bigDecimal = (BigDecimal) fieldValue; BigDecimal bigDecimal = (BigDecimal) fieldValue;
String decimalString = bigDecimal.toString(); String decimalString = bigDecimal.stripTrailingZeros().toPlainString();
map.put(fieldName, decimalString); map.put(fieldName, decimalString);
} }
// 集合类型 // 集合类型