From d78ec194afb77d068a095a4b799e98428ec7bf3c Mon Sep 17 00:00:00 2001 From: shanshanzhong Date: Tue, 10 Mar 2026 21:53:14 -0700 Subject: [PATCH] =?UTF-8?q?feat:=20IAP=20=E5=AF=B9=E8=B4=A6=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E5=9C=A8=E6=BF=80=E6=B4=BB=E8=AE=A2=E5=8D=95=E5=89=8D?= =?UTF-8?q?=E6=98=BE=E5=BC=8F=E6=9B=B4=E6=96=B0=E8=AE=A2=E5=8D=95=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E4=B8=BA=E5=B7=B2=E6=94=AF=E4=BB=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- queue/logic/iap/reconcileLogic.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/queue/logic/iap/reconcileLogic.go b/queue/logic/iap/reconcileLogic.go index 54fd0d3..d0c2678 100644 --- a/queue/logic/iap/reconcileLogic.go +++ b/queue/logic/iap/reconcileLogic.go @@ -85,7 +85,11 @@ func (l *ReconcileLogic) reconcileByTradeNo(ctx context.Context, apiCfg *iapappl } return } - // 正常已付款交易 → enqueue 激活 + // 正常已付款交易 → 先将状态改为已支付,再 enqueue 激活 + if statusErr := l.svc.OrderModel.UpdateOrderStatus(ctx, ord.OrderNo, 2); statusErr != nil { + logger.Errorf("[IAPReconcile] update order status to paid error: orderNo=%s err=%v", ord.OrderNo, statusErr) + return + } payload, _ := json.Marshal(queueTypes.ForthwithActivateOrderPayload{OrderNo: ord.OrderNo}) task := asynq.NewTask(queueTypes.ForthwithActivateOrder, payload) if _, e = l.svc.Queue.EnqueueContext(ctx, task); e != nil { @@ -144,6 +148,13 @@ func (l *ReconcileLogic) reconcileByAppAccountToken(ctx context.Context, apiCfg logger.Errorf("[IAPReconcile-Fallback] update trade_no error: orderNo=%s err=%v", ord.OrderNo, updateErr) } + // 先将订单状态改为已支付(status=2),activateOrderLogic 要求 status=2 才会处理 + if statusErr := l.svc.OrderModel.UpdateOrderStatus(ctx, ord.OrderNo, 2); statusErr != nil { + logger.Errorf("[IAPReconcile-Fallback] update order status to paid error: orderNo=%s err=%v", ord.OrderNo, statusErr) + return + } + logger.Infof("[IAPReconcile-Fallback] order status updated to paid: %s", ord.OrderNo) + // enqueue 激活 payload, _ := json.Marshal(queueTypes.ForthwithActivateOrderPayload{OrderNo: ord.OrderNo}) task := asynq.NewTask(queueTypes.ForthwithActivateOrder, payload)