diff --git a/internal/logic/public/iap/apple/attachTransactionLogic.go b/internal/logic/public/iap/apple/attachTransactionLogic.go index 614df2c..6d61e5e 100644 --- a/internal/logic/public/iap/apple/attachTransactionLogic.go +++ b/internal/logic/public/iap/apple/attachTransactionLogic.go @@ -59,12 +59,26 @@ func (l *AttachTransactionLogic) Attach(req *types.AttachAppleTransactionRequest tier = m.Tier subscribeId = m.SubscribeId } else { - if req.DurationDays <= 0 || req.SubscribeId <= 0 { + // fallback from order_no if provided + if req.OrderNo != "" { + if ord, e := l.svcCtx.OrderModel.FindOneByOrderNo(l.ctx, req.OrderNo); e == nil && ord != nil && ord.Id != 0 { + duration = ord.Quantity + subscribeId = ord.SubscribeId + } + } + // final fallback: use request fields + if duration <= 0 { + duration = req.DurationDays + } + if tier == "" { + tier = req.Tier + } + if subscribeId <= 0 { + subscribeId = req.SubscribeId + } + if duration <= 0 || subscribeId <= 0 { return nil, errors.Wrapf(xerr.NewErrCode(xerr.ERROR), "unknown product") } - duration = req.DurationDays - tier = req.Tier - subscribeId = req.SubscribeId } exp := iapapple.CalcExpire(txPayload.PurchaseDate, duration) sum := sha256.Sum256([]byte(req.SignedTransactionJWS))