This commit is contained in:
@@ -733,9 +733,8 @@ func (l *ActivateOrderLogic) Renewal(ctx context.Context, orderInfo *order.Order
|
||||
}
|
||||
|
||||
if iapExpireAt > 0 {
|
||||
// Apple IAP 续费:attachTransactionLogic 已通过 payload 传入 Apple 端计算的到期时间,
|
||||
// 直接使用该时间,避免在现有 expire_time 基础上再叠加天数导致双重计算。
|
||||
if err = l.updateSubscriptionWithIAPExpire(ctx, userSub, sub, iapExpireAt); err != nil {
|
||||
// Apple IAP 续费:按“累计加时”语义处理,避免连续购买时仅覆盖到期时间。
|
||||
if err = l.updateSubscriptionWithIAPExpire(ctx, userSub, sub, orderInfo, iapExpireAt); err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
@@ -776,11 +775,20 @@ func (l *ActivateOrderLogic) getUserSubscription(ctx context.Context, token stri
|
||||
return userSub, nil
|
||||
}
|
||||
|
||||
// updateSubscriptionWithIAPExpire 用于 Apple IAP 续费:直接将 Apple 服务端计算的
|
||||
// 到期时间写入订阅,同时处理流量重置和 FinishedAt 清零,不再叠加天数。
|
||||
func (l *ActivateOrderLogic) updateSubscriptionWithIAPExpire(ctx context.Context, userSub *user.Subscribe, sub *subscribe.Subscribe, iapExpireAt int64) error {
|
||||
// updateSubscriptionWithIAPExpire 用于 Apple IAP 续费:按累计加时语义更新到期时间。
|
||||
func (l *ActivateOrderLogic) updateSubscriptionWithIAPExpire(ctx context.Context, userSub *user.Subscribe, sub *subscribe.Subscribe, orderInfo *order.Order, iapExpireAt int64) error {
|
||||
now := time.Now()
|
||||
newExpire := time.Unix(iapExpireAt, 0)
|
||||
baseTime := userSub.ExpireTime
|
||||
if baseTime.Before(now) {
|
||||
baseTime = now
|
||||
}
|
||||
newExpire := tool.AddTime(sub.UnitTime, orderInfo.Quantity, baseTime)
|
||||
if iapExpireAt > 0 {
|
||||
appleExpire := time.Unix(iapExpireAt, 0)
|
||||
if appleExpire.After(newExpire) {
|
||||
newExpire = appleExpire
|
||||
}
|
||||
}
|
||||
today := now.Day()
|
||||
resetDay := newExpire.Day()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user