所有文章
Deep dive阅读需 9 分钟

Apple 按月付费、承诺 12 个月的订阅,一次退款可能终止全年,也可能只退一个月

Apple 按月付费、承诺 12 个月的订阅把退款分成两种情况。退还过去某个月,扣费照常继续。退还当前月,承诺期立即终止。本文说明每种情况如何到达你的服务器、造成多少损失,以及应该向 Apple 发送什么。

一本被撕掉一个月的年历挂在墙上,旁边是一部智能手机,表示按月付费、承诺 12 个月的订阅发生退款

要点

  • 在 Apple 按月付费、承诺 12 个月的订阅中,对过去某个计费周期的退款只会撤销该月的交易,客户仍保持订阅,扣费按计划进行。
  • 当 Apple 退还按月付费、承诺 12 个月订阅的当前计费周期时,承诺期立即终止,剩余的月付款项不再扣费。
  • 客户取消 12 个月承诺方案时,取消的是承诺期的续订,而不是剩余付款。Apple 会继续每月扣费,并在第 12 个周期结束后才发送 EXPIRED。
  • 计费宽限期(Billing Grace Period)不适用于按月付费、承诺 12 个月的订阅。Apple 要求开发者在收到 DID_FAIL_TO_RENEW 时撤销访问权限,并在收到子类型为 BILLING_RECOVERY 的 DID_RENEW 时恢复。
  • 如果 Apple 在 90 天内无法追回 12 个月承诺方案中某笔失败的月付款项,承诺期即告终止,撤销成为最终结果。
  • 承诺方案上的退款申请会触发 CONSUMPTION_REQUEST,Apple 要求你在 12 小时内提供该计费周期的消费数据和退款偏好。
  • 从 12 个月承诺方案升级到更高档位会立即终止承诺期,客户可能获得当前周期未使用部分的按比例退款。

在 Apple 按月付费、承诺 12 个月的订阅上,一笔获批的退款可能只收回一次付款,也可能取消当年剩下的所有付款。结果取决于一个大多数服务器代码从不检查的细节:被退款的月份是否是当前月份。Apple 的文档写得很清楚。对过去计费周期的退款不影响承诺期。对当前周期的退款会让承诺期立即终止。如果两种情况一视同仁,你要么会切断一个仍在付费的客户,要么会继续为一个已经不付费的客户提供服务。

Apple 的 12 个月承诺方案如何计费

Apple 于 2026 年 4 月推出这一选项。它不是一种新的产品类型。你在 App Store Connect 中为现有的一年期自动续期订阅添加按月计费方案,产品 ID 保持不变。客户每月付款,承诺共付 12 次,最后一次付款完成后,承诺期会自动续订为新的 12 个月,除非客户提前取消。

规则Apple 文档的说明
销售范围除美国和新加坡以外的所有店面
设备与 SDKOS 26.4 或更高版本,不含 watchOS,且应用须使用 26.5 SDK 或更高版本构建
价格限制12 个月总价不得低于一次性年付价格,也不得超过其 1.5 倍
前提条件必须先在某个国家或地区开通一次性年付,才能在当地提供按月计费
在数据中的体现billingPlanType 为 MONTHLY,commitmentInfo 包含 billingPeriodNumber、totalBillingPeriods、commitmentExpiresDate 和 commitmentPrice
如果你移除该选项现有客户在承诺期结束时不再续订,新客户无法再选择该选项

每个计费周期都会生成一笔独立的交易,并授予一个月的访问权限。正是这个细节决定了退款的行为方式。Apple 退款的对象是交易,而在承诺方案中,每个月都是一笔单独的交易。

退款对 12 个月承诺期的影响

Apple 关于承诺期生命周期的指南把退款分成两种情况。区别在于退款对应的是哪个计费周期。

退款对应承诺期会怎样在哪里看到你的服务器应该怎么做
过去的某个计费周期继续,不受影响。扣费按计划进行该周期交易上的 revocationDate只撤销该笔交易。保持订阅有效
当前计费周期立即终止最新交易上的 revocationDate终止访问。之后不会再有付款
升级到更高档位立即终止,新方案开始DID_CHANGE_RENEWAL_PREF,子类型 UPGRADE切换权益。随后可能有未使用周期的按比例退款

第二个月的退款会取消全年剩余部分吗?

不会,只要第二个月已经过去。假设客户正处于第五个月,Apple 退还了其第二个月的付款。Apple 会撤销第二个月的交易,客户仍保持订阅。第六个月到第十二个月的扣费照常进行。Apple 在这一点上说得很明确:检查受影响交易上的 revocationDate,但不要把它解读为承诺期被取消。

退款何时会终止承诺期

如果退款对应的是当前计费周期,承诺期会立即终止。信号是最新交易上出现 revocationDate。它的存在意味着当前周期已被撤销,之后不会再有付款,因此访问权限也随之结束。

升级也可能带来退款

Apple 指出,客户不仅在主动申请后可能获得退款,在更改方案后也可能获得退款。从承诺方案升级到更高档位的订阅会立即生效。承诺期终止,新方案开始,客户可能获得承诺期当前周期未使用部分的按比例退款。降级则相反,要等 12 个月承诺期完成后才生效。

取消不等于退款

在 12 个月承诺方案上点击“取消”的客户并没有停止付款。Apple 说明,他们取消的是承诺期的续订,而不是当前期限内的剩余付款。你的服务器会收到以下内容。

  • Apple 发送 DID_CHANGE_RENEWAL_STATUS,子类型为 AUTO_RENEW_DISABLED。
  • 承诺期的自动续订状态变为 0,因此期限结束时承诺期不会续订。
  • 订阅续订信息中的 willAutoRenew 仍显示为 1,因为按月扣费仍在继续。
  • 剩余每个月仍会收到 DID_RENEW 通知。EXPIRED 在第 12 个周期之后才到达,那时访问权限才结束。

Apple 要求开发者在执行常规取消逻辑之前先检查计费方案类型。如果是 MONTHLY,不要撤销任何内容。剩余的每个计费周期都要照常履行。

有一个地区性例外。App Store Connect Help 指出,取消的客户会继续付款直到承诺期结束,但某些地区除外,并链接到 Apple 关于在德国、以色列、南非和土耳其取消订阅的页面。在这四个国家,客户有权随时取消订阅并立即生效,同时获得按比例退款。

付款失败会立即终止访问

承诺方案取消了你在其他地方可能依赖的一张安全网。计费宽限期(Billing Grace Period)不适用。当某次月度续订失败时,Apple 要求你在订阅处于计费重试期间撤销访问权限,并且只有在付款追回后才恢复。

通知它告诉你什么应该怎么做
DID_FAIL_TO_RENEWisInBillingRetryPeriod 为 true立即撤销访问权限
DID_RENEW,子类型 BILLING_RECOVERYcommitmentExpiresDate 会调整,以反映追回日期恢复访问权限,并保存新的结束日期
EXPIRED,子类型 BILLING_RETRYApple 未能在 90 天内追回付款承诺期已结束。你之前的撤销即为最终结果

付款追回后,从最新交易中读取 commitmentExpiresDate。它不会与原来的结束日期一致,之后的每次续订都会按调整后的时间表进行。

深夜,一位开发者坐在笔记本电脑前,在服务器仪表板上查看订阅通知,键盘旁放着一部智能手机

承诺方案的退款让你损失多少

下面用示例价格算一笔账。假设你的一次性年付方案价格为 €59.99,按月承诺选项为 €6.99,12 个月共计 €83.88。这在 Apple 规定的一次性价格 1.5 倍上限之内。

场景(客户处于第 4 个月)被退还的付款损失的未来付款损失的承诺总价值
Apple 退还第 2 个月€6.99无。第 5 至 12 个月照常扣费€6.99
Apple 退还第 4 个月,即当前周期€6.99€55.92,八笔付款不再扣费€62.91
客户取消,无退款无无。第 5 至 12 个月照常扣费€0
德国客户取消第 4 个月的按比例部分€55.92最多 €62.91

以上都是客户支付的价格。你真正损失的是每笔付款中你的那一份。在订阅者付费服务的第一年,Apple 支付订阅价格的 70%(扣除适用税费),此后或对于 App Store 小型企业计划的成员,则支付 85%。

退款只是账单的一半。一个月的访问并不是零成本。如果你的应用运行 AI 生成、调用付费的第三方 API 或存储客户文件,那么在被退款的那个月里,算力、调用和存储的费用都是你付的。过去月份的退款会把付款退回去,而这些成本留给你承担。当前月份的退款同样如此,还会把当年剩余的收入从你的预测中抹掉。

如何回应承诺方案的 CONSUMPTION_REQUEST

这是你唯一能发表意见的环节。当客户对承诺方案申请退款时,Apple 会向你的 App Store Server Notifications V2 端点发送 CONSUMPTION_REQUEST。你通过 Send Consumption Information 回应,Apple 要求你在 12 小时内回复。回复内容包括该计费周期的消费数据和你的退款偏好,而不是针对整个承诺期。

  • 仅在客户同意的情况下发送数据。Apple 的文档指出,如果没有获得同意,你根本不应回应该请求。
  • 不要填写 consumptionPercentage。对自动续期订阅发送该字段时,API 会返回 ConsumptionPercentageAutoRenewableSubscriptionError。
  • 根据该月的使用情况决定退款偏好。在有争议的月份里执行了 300 次付费生成的客户,留下了真实成本的记录。从未打开过应用的客户则没有。
  • 看清请求对应的是哪个周期。针对当前周期的请求一旦被 Apple 批准,承诺期就会终止。针对过去周期的请求则不会。

你的服务器需要处理的事项

  • 在每笔交易和每条续订通知上读取 billingPlanType。MONTHLY 表示适用承诺期规则。
  • 根据交易的 expirationDate 授予访问权限。Apple 指出,commitmentInfo 中的到期日期用于显示进度,而不是用于判断访问权限。
  • 收到退款时,先检查最新交易是否带有 revocationDate,再决定是否终止订阅。
  • 收到取消时,保留访问权限,直到第 12 个周期之后收到 EXPIRED。
  • 收到 DID_FAIL_TO_RENEW 时,立即撤销。不要等待一个不会到来的宽限期。
  • 每次 BILLING_RECOVERY 之后,重新保存 commitmentExpiresDate。

App Store 的每一笔退款都由 Apple 决定,因此 CONSUMPTION_REQUEST 是你把使用数据摆到 Apple 面前的唯一机会。RefundHalt 会在 12 小时窗口内自动回应这些请求,并记录每笔退款对应的计费周期,因此过去月份的退款永远不会被误判为流失了一位订阅者。

常见问题解答

Apple 退还按月付费、承诺 12 个月订阅中的一笔付款时,会发生什么?
取决于计费周期。对过去周期的退款只撤销该月的交易,承诺期继续,扣费按计划进行。对当前周期的退款会立即终止承诺期,剩余付款不再扣费。
客户可以提前取消 Apple 按月付费、承诺 12 个月的订阅吗?
可以取消,但取消只是让承诺期不再续订,并不停止剩余付款。扣费会持续全部 12 个周期,访问权限也随之持续。App Store Connect Help 提到某些地区存在例外,Apple 的支持页面说明,德国、以色列、南非和土耳其的客户可以取消并立即生效,同时获得按比例退款。
计费宽限期(Billing Grace Period)适用于 12 个月承诺方案吗?
不适用。Apple 表示计费宽限期不适用于按月付费、承诺 12 个月的订阅。收到 DID_FAIL_TO_RENEW 时撤销访问权限,收到子类型为 BILLING_RECOVERY 的 DID_RENEW 时恢复,并把 90 天后到达的子类型为 BILLING_RETRY 的 EXPIRED 视为最终结果。
12 个月承诺方案会收到 CONSUMPTION_REQUEST 吗?
会。承诺方案上的退款申请会向你的 App Store Server Notifications V2 端点发送 CONSUMPTION_REQUEST。请在 12 小时内回复该计费周期的消费数据和你的退款偏好,前提是客户已同意与 Apple 共享数据。
按月付费、承诺 12 个月的订阅在美国可用吗?
不可用。Apple 在除美国和新加坡以外的所有 App Store 店面提供该选项,要求 OS 26.4 或更高版本(不含 watchOS),且应用须使用 26.5 SDK 或更高版本构建。

来源和延伸阅读

RefundHalt

App Store 和 Google Play 退款自动驾驶

继续阅读

下一项退款请求已经在路上。

读完又一封关于未能申辩退款的支持邮件所需的时间,足够您完成 RefundHalt 设置。