feat: IAP 对账逻辑在激活订单前显式更新订单状态为已支付。
All checks were successful
Build docker and publish / build (20.15.1) (push) Successful in 7m16s

This commit is contained in:
shanshanzhong 2026-03-10 21:53:14 -07:00
parent 48383fa0a9
commit d78ec194af

View File

@ -85,7 +85,11 @@ func (l *ReconcileLogic) reconcileByTradeNo(ctx context.Context, apiCfg *iapappl
} }
return 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}) payload, _ := json.Marshal(queueTypes.ForthwithActivateOrderPayload{OrderNo: ord.OrderNo})
task := asynq.NewTask(queueTypes.ForthwithActivateOrder, payload) task := asynq.NewTask(queueTypes.ForthwithActivateOrder, payload)
if _, e = l.svc.Queue.EnqueueContext(ctx, task); e != nil { 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) logger.Errorf("[IAPReconcile-Fallback] update trade_no error: orderNo=%s err=%v", ord.OrderNo, updateErr)
} }
// 先将订单状态改为已支付status=2activateOrderLogic 要求 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 激活 // enqueue 激活
payload, _ := json.Marshal(queueTypes.ForthwithActivateOrderPayload{OrderNo: ord.OrderNo}) payload, _ := json.Marshal(queueTypes.ForthwithActivateOrderPayload{OrderNo: ord.OrderNo})
task := asynq.NewTask(queueTypes.ForthwithActivateOrder, payload) task := asynq.NewTask(queueTypes.ForthwithActivateOrder, payload)