From 95902270049e011dfa58f58385ab8571a9c80331 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Tue, 24 Feb 2026 11:11:55 +0800 Subject: [PATCH] =?UTF-8?q?fix(payment):=20=E8=A7=A3=E5=86=B3=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1=E6=94=AF=E4=BB=98=E6=88=90=E5=8A=9F=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在ShopOrderServiceImpl和WxPayNotifyService中添加OffsetDateTime导入 - 修改支付成功时间处理逻辑,从微信返回的RFC3339格式时间字符串解析本地时间 - 添加异常处理机制,当解析微信支付successTime失败时使用当前时间兜底 - 增加日志记录,便于排查时间解析异常问题 - 关闭MQTT服务启用开关以解决相关配置问题 --- .../payment/service/WxPayNotifyService.java | 20 ++++++- .../service/impl/ShopOrderServiceImpl.java | 58 ++++++++++++------- src/main/resources/application-glt.yml | 2 +- 3 files changed, 58 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/gxwebsoft/payment/service/WxPayNotifyService.java b/src/main/java/com/gxwebsoft/payment/service/WxPayNotifyService.java index 9378dcd..e334dc7 100644 --- a/src/main/java/com/gxwebsoft/payment/service/WxPayNotifyService.java +++ b/src/main/java/com/gxwebsoft/payment/service/WxPayNotifyService.java @@ -17,6 +17,7 @@ import org.springframework.util.StringUtils; import javax.annotation.Resource; import java.math.BigDecimal; import java.time.LocalDateTime; +import java.time.OffsetDateTime; import java.util.Map; /** @@ -212,7 +213,24 @@ public class WxPayNotifyService { // 更新订单状态 order.setPayStatus(true); // 使用Boolean类型 order.setTransactionId(transaction.getTransactionId()); - order.setPayTime(LocalDateTime.parse(transaction.getSuccessTime())); + LocalDateTime payTime = null; + String successTime = transaction.getSuccessTime(); + if (StringUtils.hasText(successTime)) { + try { + // WeChat returns RFC3339 time with offset, e.g. 2018-06-08T10:34:56+08:00 + payTime = OffsetDateTime.parse(successTime).toLocalDateTime(); + } catch (Exception ex) { + log.warn("解析微信支付success_time失败,使用当前时间兜底 - outTradeNo={}, successTime={}", + order.getOrderNo(), successTime, ex); + } + } + if (payTime == null) { + if (!StringUtils.hasText(successTime)) { + log.warn("微信支付回调trade_state=SUCCESS但success_time为空,使用当前时间兜底 - outTradeNo={}", order.getOrderNo()); + } + payTime = LocalDateTime.now(); + } + order.setPayTime(payTime); // 使用专门的更新方法,会触发支付成功后的业务逻辑 shopOrderService.updateByOutTradeNo(order); diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/ShopOrderServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/ShopOrderServiceImpl.java index f52c6c1..cf2f643 100644 --- a/src/main/java/com/gxwebsoft/shop/service/impl/ShopOrderServiceImpl.java +++ b/src/main/java/com/gxwebsoft/shop/service/impl/ShopOrderServiceImpl.java @@ -41,6 +41,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDateTime; +import java.time.OffsetDateTime; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -769,26 +770,43 @@ public class ShopOrderServiceImpl extends ServiceImpl