From 10fcc0b3c9c245e1f195bcd30e41e50aa066fa2e Mon Sep 17 00:00:00 2001 From: huang Date: Tue, 7 Apr 2026 09:55:06 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=BC=BA=E5=85=85?= =?UTF-8?q?=E5=9C=BA=E6=99=AF=E5=B9=82=E7=AD=89=20key=20=E5=9C=A8=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1=E6=94=AF=E4=BB=98=E5=A4=B1=E8=B4=A5=E6=97=B6=E6=9C=AA?= =?UTF-8?q?=E8=A2=AB=E6=B8=85=E9=99=A4=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将 markClientPurchaseCreated 移至 CreateJSAPIPayment 成功之后调用, 确保支付失败时 defer 能可靠地删除幂等 key,避免用户无法重新下单。 原顺序:创建充值单 → markClientPurchaseCreated → CreateJSAPIPayment 修复后:创建充值单 → CreateJSAPIPayment → markClientPurchaseCreated → *created=true Co-authored-by: Sisyphus --- internal/service/client_order/service.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/service/client_order/service.go b/internal/service/client_order/service.go index 9eb3b51..f64a44b 100644 --- a/internal/service/client_order/service.go +++ b/internal/service/client_order/service.go @@ -366,13 +366,13 @@ func (s *Service) createForceRechargeOrder( return nil, errors.Wrap(errors.CodeDatabaseError, err, "创建充值记录失败") } - s.markClientPurchaseCreated(ctx, redisKey, recharge.RechargeNo) - paymentResult, err := paymentProvider.CreateJSAPIPayment(ctx, recharge.RechargeNo, "余额充值", openID, int(recharge.Amount)) if err != nil { return nil, err } + // 微信支付创建成功后才标记幂等 key,确保支付失败时 defer 能正确清除 key + s.markClientPurchaseCreated(ctx, redisKey, recharge.RechargeNo) *created = true return &dto.ClientCreateOrderResponse{