不能。
先把前提说死:包月、包年放在同一个订阅组,并且你在 App Store Connect 里,把包年设置成【更高等级(Upgrade)】(这个等级排序是你自己在后台配置的)
例子:包月 10 元 / 月,包年 100 元 / 年,用户刚买包月,只用了 10 天,还剩 20 天包月有效期,现在下单买包年:
- ✅ 立刻扣 100 元(包年全款)
- ✅ 同时给用户原路退回包月剩下 20 天对应的按比例退款
包月 10 元 30 天,剩余 20 天 → 退款 ≈ 6.67 元 - ✅ 包月直接失效,包年立刻生效,新的续费日就是今天,往后推 1 年
- ❌ 不会叠加时长,不会变成:剩余 20 天包月 + 1 年包年
一句话:升级 = 收高价新品全款 + 旧周期没用完的钱按比例退,旧订阅当场作废。
反过来:先买包年,没到期,再买包月(降级)
这个是降级 Downgrade,规则完全不一样:
- 不会立刻扣费、不会立刻切换
- 当前这个包年周期继续走完,包年权益保留到包年到期日
- 等到包年到期那天,才开始扣包月 10 元,之后走包月周期
- 中间不会退款。
一个非常关键的坑:等级是你在后台排的!
同组内的订阅等级顺序,由你在 App Store Connect 手动设置:
- 你把包年排等级更高 → 包月→包年 = 升级(立刻切换 + 按比例退款)
- 你把包月排等级更高 → 包年→包月 = 升级(立刻切换 + 退款)
绝大多数 App 都是:包年 > 包月,包年等级更高
如果你想要【包月包年可以同时生效、时长叠加】
同订阅组做不到!
必须拆成两个独立订阅组:
Group1:包月;Group2:包年
此时两个互相独立:
- 买包月扣 10,再买包年扣 100,两笔都扣,不退款,时长叠加,两个订阅各自独立到期,
latest_receipt_info里面两条记录。