From b51f6f0d5564b843aeb11f088873faa5aa2116ce Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Tue, 23 Jun 2026 22:22:54 +0800
Subject: [PATCH] feat(mall): 为订单支付流程添加订单号生成和更新功能
---
src/main/java/cc/mrbird/febs/pay/service/LwPayService.java | 41 ++++++++++++++++++++++++++++++++++++-----
1 files changed, 36 insertions(+), 5 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/pay/service/LwPayService.java b/src/main/java/cc/mrbird/febs/pay/service/LwPayService.java
index 512eef2..e1133a6 100644
--- a/src/main/java/cc/mrbird/febs/pay/service/LwPayService.java
+++ b/src/main/java/cc/mrbird/febs/pay/service/LwPayService.java
@@ -14,6 +14,8 @@
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.util.Date;
import java.util.Map;
import java.util.TreeMap;
@@ -44,7 +46,16 @@
/** LWPAY 配置字典 type */
private static final String DICT_TYPE = "LWPAY_CONFIG";
/** LWPAY API 基础地址 */
- private static final String LWPAY_BASE_URL = "https://www.lwpay.com";
+ private static final String LWPAY_BASE_URL = "https://lwpay.live";
+
+ /**
+ * 参与签名的字段白名单
+ * 签名只包含这 7 个业务必传字段,pay_productname / pay_attach / pay_md5sign 不参与签名
+ */
+ private static final String[] SIGN_FIELD_KEYS = {
+ "pay_memberid", "pay_orderid", "pay_applydate",
+ "pay_bankcode", "pay_notifyurl", "pay_callbackurl", "pay_amount"
+ };
// ==================== 代收接口 ====================
@@ -70,7 +81,7 @@
params.put("pay_bankcode", bankCode);
params.put("pay_notifyurl", getNotifyUrl());
params.put("pay_callbackurl", getReturnUrl());
- params.put("pay_amount", order.getAmount().toPlainString());
+ params.put("pay_amount", getBRLAmount(order.getAmount()));
params.put("pay_productname", "商品订单-" + order.getOrderNo());
// 通道 968 需要 network 参数
@@ -78,8 +89,15 @@
params.put("pay_attach", "network:" + network);
}
- // 生成签名
- String sign = generateSign(params, secretKey);
+ // 签名:仅使用白名单中的 7 个业务必传字段
+ TreeMap<String, String> signParams = new TreeMap<>();
+ for (String key : SIGN_FIELD_KEYS) {
+ String val = params.get(key);
+ if (StrUtil.isNotBlank(val)) {
+ signParams.put(key, val);
+ }
+ }
+ String sign = generateSign(signParams, secretKey);
params.put("pay_md5sign", sign);
log.info("LWPAY 代收请求: memberId={}, orderNo={}, amount={}, bankCode={}",
@@ -100,6 +118,19 @@
}
return json.getString("payurl");
+ }
+
+ private String getBRLAmount(BigDecimal amount){
+ DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ "MONEY_CHANGE",
+ "BRL"
+ );
+ BigDecimal rate = new BigDecimal("5.18");
+ if (dataDictionaryCustom != null){
+ rate = new BigDecimal(dataDictionaryCustom.getValue());
+ }
+
+ return amount.multiply( rate).setScale(2, RoundingMode.DOWN).toString();
}
// ==================== 回调处理 ====================
@@ -186,7 +217,7 @@
*/
public String generateSign(TreeMap<String, String> params, String secretKey) {
String signStr = buildSignString(params) + "&key=" + secretKey;
- log.debug("LWPAY 待签名字符串: {}", signStr);
+ log.info("LWPAY 待签名字符串: {}", signStr);
return SecureUtil.md5(signStr).toUpperCase();
}
--
Gitblit v1.9.1