From a94d1b36264d4081809ec72944bf2f7414d1b62f Mon Sep 17 00:00:00 2001 From: wuKong Date: Thu, 20 Aug 2026 17:20:26 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20fix(pay):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E5=AE=9D=E6=94=AF=E4=BB=98=E5=9B=9E=E8=B0=83?= =?UTF-8?q?=E4=B8=AD=E6=B8=A0=E9=81=93=E7=94=A8=E6=88=B7ID=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 更新注释说明渠道用户编号字段包含微信openid和支付宝buyerId(buyerOpenId) - 引入CharSequenceUtil工具类替换StrUtil进行字符串格式化 - 根据支付宝官方文档修改渠道用户ID获取逻辑,优先使用buyer_open_id,备选buyer_id - 添加支付宝异步通知参数相关注释链接供参考 Closes #YCTY-4452 --- .../yudao/module/pay/dal/dataobject/order/PayOrderDO.java | 2 +- .../core/client/impl/alipay/AbstractAlipayPayClient.java | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/yudao-module-pay/yudao-module-pay-server/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/order/PayOrderDO.java b/yudao-module-pay/yudao-module-pay-server/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/order/PayOrderDO.java index 4eea1cc4e..499c85c27 100644 --- a/yudao-module-pay/yudao-module-pay-server/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/order/PayOrderDO.java +++ b/yudao-module-pay/yudao-module-pay-server/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/order/PayOrderDO.java @@ -136,7 +136,7 @@ public class PayOrderDO extends BaseDO { /** * 渠道用户编号 * - * 例如说,微信 openid、支付宝账号 + * 例如说,微信 openid、支付宝 buyerId(buyerOpenId) */ private String channelUserId; /** diff --git a/yudao-module-pay/yudao-module-pay-server/src/main/java/cn/iocoder/yudao/module/pay/framework/pay/core/client/impl/alipay/AbstractAlipayPayClient.java b/yudao-module-pay/yudao-module-pay-server/src/main/java/cn/iocoder/yudao/module/pay/framework/pay/core/client/impl/alipay/AbstractAlipayPayClient.java index 15540a9f3..21a219841 100644 --- a/yudao-module-pay/yudao-module-pay-server/src/main/java/cn/iocoder/yudao/module/pay/framework/pay/core/client/impl/alipay/AbstractAlipayPayClient.java +++ b/yudao-module-pay/yudao-module-pay-server/src/main/java/cn/iocoder/yudao/module/pay/framework/pay/core/client/impl/alipay/AbstractAlipayPayClient.java @@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.map.MapUtil; +import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; import cn.iocoder.yudao.framework.common.util.json.JsonUtils; @@ -92,9 +93,12 @@ public abstract class AbstractAlipayPayClient extends AbstractPayClient) () -> { - throw new IllegalArgumentException(StrUtil.format("body({}) 的 trade_status 不正确", body)); + throw new IllegalArgumentException(CharSequenceUtil.format("body({}) 的 trade_status 不正确", body)); }); - return PayOrderRespDTO.of(status, bodyObj.get("trade_no"), bodyObj.get("seller_id"), parseTime(params.get("gmt_payment")), + // https://opendocs.alipay.com/open/00dn78?pathHash=fef00e6d#%E5%BC%82%E6%AD%A5%E9%80%9A%E7%9F%A5%E5%8F%82%E6%95%B0 + // buyer_id(buyer_open_id)买家支付宝用户号,seller_id 卖家支付宝用户号 + String channelUserId = CharSequenceUtil.nullToDefault(bodyObj.get("buyer_open_id"), bodyObj.get("buyer_id")); + return PayOrderRespDTO.of(status, bodyObj.get("trade_no"), channelUserId, parseTime(params.get("gmt_payment")), bodyObj.get("out_trade_no"), body); }