管理订阅和一次性购买

您可能需要对订阅或一次性购买采取管理操作,作为日常业务的一部分。例如,您的客户服务可能需要为用户提供全部或部分退款,或者您可能需要在某些情况下撤销授权。您可以 从 Play 管理中心管理订单,或者如果您想从自己的系统管理它们,可以使用 Google Play 开发者 API

取消订阅

用户可以使用 Play 商店随时取消 Google Play 订阅,但您还必须为用户提供一个选项,让他们可以在您的应用程序中以及您的网站上(如果适用)取消他们的订阅。

让用户能够自愿取消的最简单方法是 深层链接到 Play 商店,在那里他们可以查看和管理他们的订阅。

您可能还需要从后端触发取消。 purchases.subscriptions.cancel 方法允许您取消订阅购买。例如,您可以使用此方法关闭旧的服务。取消订阅不会发出退款,用户将继续拥有访问权限,直到他们的当前计费周期结束。使用此方法取消订阅会阻止用户在 Play 商店中恢复订阅,但用户仍然可以通过您的应用程序再次注册,如果他们需要的话。

执行此操作会触发 SUBSCRIPTION_CANCELED 实时开发者通知。按照 取消 中的描述处理这些取消。

延迟计费

使用 subscriptions.defer 延长订阅的授权期限。在延迟期间,用户仍然订阅您的内容,但不会被收取额外的费用。当您延迟订阅的计费时,状态信息将相应更新,您将在购买状态信息中的 expiryTime 字段中看到反映的内容

  • 对于活跃的定期订阅,延迟计费会延长下一次续订日期。
  • 对于预付费计划,延迟计费会延长到期时间。

以下是您可以使用延迟计费的一些示例

  • 为用户提供免费访问权限作为特殊优惠,例如为现有订阅者提供一周免费访问权限,以填写反馈调查。
  • 为客户提供免费访问权限作为客户服务行动,例如在可能会影响他们使用您的服务的长时间停机后。

每个 API 调用可以延迟计费最短 1 天,最长 1 年。要进一步延迟授权的结束时间,请在新的到期日期到来之前再次调用 API。

执行此操作会触发 SUBSCRIPTION_DEFERRED 实时开发者通知。请参阅 关于订阅 中的 为订阅者延迟计费,了解如何处理这些事件。

示例

  1. FitnessGoals 流媒体服务希望在 2 月份举办促销活动,以鼓励定期锻炼。

  2. 他们决定为在 2 月份至少使用 FitnessGoals 锻炼 10 次的任何订阅用户提供额外一个月服务。

  3. 他们追踪挑战的结果,并在 3 月 1 日为所有在 2 月份完成挑战的用户的活动订阅购买调用 subscriptions.defer API。

  4. 这些用户可以免费获得额外一整月的常规锻炼视频,他们会告诉所有朋友 FitnessGoals 如何帮助他们保持健康!

退款和撤销

在许多情况下,您可能需要为订阅或一次性购买退款或撤销访问权限。

通过订单 ID 全额退款

使用 orders.refund API,您可以为购买后三年内的任何订单进行全额退款。 orders.refund 方法接收一个撤销参数,指示除了提供退款外是否还应撤销访问权限。

如果您在订阅购买的退款调用中发出撤销,订阅将立即终止,并将触发一个 SUBSCRIPTION_REVOKED 实时开发者通知。阅读订阅生命周期管理指南的 撤销部分,了解如何处理这些事件。

示例

  1. 为了庆祝新世界杯的开始,电竞应用 Football-Not-Soccer 决定为所有在头 24 小时内购买新球队球衣的用户抽奖送出免费的虚拟球衣。

  2. Football-Not-Soccer 使用 orders.refund API 在不传递撤销参数的情况下为中奖者退款球衣购买。

通过购买令牌撤销和退款订阅

对于某些用例,您可能需要撤销用户对订阅的访问权限并提供退款。Play 结算提供撤销方法,包括通过 subscriptionsv2.revoke API 进行全额退款和按比例退款。使用此端点,您可以指定 revocationContext 来确定退款的计算方式。

执行此操作将触发一个 SUBSCRIPTION_REVOKED 实时开发者通知。您的应用应按 撤销 中所述处理这些取消。

示例

  • 购买令牌为 1a2b3c4d5e6f7g8h9i0j 的购买
  • 包名为 com.your.app 的应用程序
  • 发出按比例退款的意图

HTTP POST 请求

https://androidpublisher.googleapis.com/androidpublisher/v3/applications/com.your.app/purchases/subscriptionsv2/tokens/1a2b3c4d5e6f7g8h9i0j:revoke

请求主体

{
  "revocationContext": {
    "proratedRefund": {}
  }
}

全额退款

如果您需要终止订阅并退款当前结算周期的全额金额,请发出全额退款。使用 purchases.subscriptionsv2.revoke 函数,并将 "fullRefund": {} 设置为退款类型。

示例

  1. Maria 订阅了 SuperMovies 流媒体每月计划,该计划是自动续订的 30 天订阅。Maria 遇到了无法访问内容的技术问题。她在结算周期的第 3 天联系客户服务,表示她从未获得过订阅的访问权限。

  2. 客户服务在其系统中找到 Maria 的订阅购买详细信息,并触发对 purchases.subscriptionsv2.revoke 的调用,请求全额退款。

  3. 客户服务告诉 Maria,她应该获得订阅价格的 100% 退款,并且她不再订阅该计划。

按比例退款

如果您需要终止订阅并部分退款剩余的授权时间,请发出按比例退款。使用 purchases.subscriptionsv2.revoke 函数,并将 "proratedRefund": {} 设置为退款类型。

示例

  1. Maria 订阅了 SuperMovies 流媒体每月计划,该计划是自动续订的 30 天订阅。她已经愉快地使用该服务一段时间了。Maria 在结算周期的第 15 天联系客户服务,表示她要搬到国外,并且从第二天开始将无法再使用该服务。

  2. 客户服务在其系统中找到 Maria 的订阅购买详细信息,并触发对 purchases.subscriptionsv2.revoke 的调用,请求按比例退款。

  3. 客户服务告诉 Maria,她应该获得订阅价格的 50% 退款,并且对该服务的访问权限将立即终止。