You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自动续期订阅校验:是否需同时检查cancellation_date_ms与expires_date_ms?

Apple自动续期订阅:取消后的到期时间与有效性判断

嘿,这个问题问到点子上了,我之前处理订阅逻辑的时候也纠结过这俩字段,给你详细拆解下:

1. 用户通过Apple支持取消订阅后,expires_date_ms会变吗?

答案是不会。Apple支持处理的取消通常分两种场景:

  • 「取消自动续订,但保留当前周期权益」:用户只是不想后续被扣费,但当前订阅期的服务还能用到原本的到期时间,这时候expires_date_ms完全不变,只是auto_renew_status会变成0。
  • 「立即取消并退款」:这种情况用户申请了全额退款,Apple支持批准后,expires_date_ms还是原来的到期时间,但会新增cancellation_date_ms字段标记取消操作的时间。

简单说:无论哪种取消方式,expires_date_ms都不会被修改,它始终代表原本订阅周期的结束时间。

2. 要不要额外检查cancellation_date_ms?

必须要,这是判断订阅有效性的关键补充项!

你的原逻辑只看expires_date_ms和status,会漏掉「用户已经通过Apple支持取消并退款,权益立即失效」的场景。正确的判断逻辑应该是这样的:

  • 第一步:从latest_receipt_info里筛选出status为0的有效收据记录(排除无效收据)
  • 第二步:找到其中expires_date_ms最大的那条记录(这是用户最新的订阅周期记录)
  • 第三步:重点检查这条记录是否存在cancellation_date_ms:
    • 如果存在:说明这个订阅已经被Apple官方取消(通常是退款场景),无论expires_date_ms是否还没到,都应该判定为非活跃订阅,停止提供服务。
    • 如果不存在:再对比当前时间和expires_date_ms,如果当前时间小于到期时间,就是活跃订阅;反之则订阅已过期。

另外补充个细节:如果是用户自己在iOS设置里取消自动续订,不会生成cancellation_date_ms,只会把auto_renew_status设为0,这时候用户当前周期的服务还是有效的,直到expires_date_ms到期,这种情况你的原逻辑是能覆盖的,但结合auto_renew_status可以提前告知用户后续不会自动续订。

内容的提问来源于stack exchange,提问作者Dmitry Klochkov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:50:37