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)