管理订阅和一次性购买交易

在日常业务中,您可能需要对订阅或一次性购买交易执行管理操作。例如,您的客户服务可能需要为用户办理全额退款或部分退款,或者在某些情况下您可能需要撤消权限。您可以通过 Play 管理中心管理订单,或者,如果您想通过自己的系统管理订单,也可以使用 Google Play Developer API 来实现。

取消订阅

用户可以随时通过 Play 商店取消 Google Play 订阅,但您还必须为用户提供在您的应用和网站上取消订阅的选项(如果适用)。

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

您可能还需要从后端触发取消操作。您可以使用 purchases.subscriptions.cancel 方法取消订阅购买交易。例如,您可以使用此方法来停用旧版服务。取消订阅不会发放退款,用户仍可继续享用订阅内容,直到当前结算周期结束为止。通过此方法取消订阅会阻止用户在 Play 商店中恢复订阅,但用户仍然可以根据需要通过您的应用重新注册。

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

延迟结算

使用 subscriptions.defer 延长订阅的权限期限。在推迟期内,用户仍可订阅您的内容,但无需为额外时间付费。如果您延迟订阅结算,系统会相应地更新状态信息,并且您会看到购买状态信息的 expiryTime 字段中反映出来:

  • 对于有效的周期性订阅,推迟结算会延长下一个续订日期。
  • 对于预付费方案,推迟结算会延长到期时间。

以下示例说明了如何使用推迟结算:

  • 将免费访问权限作为一项特别优惠提供给用户,例如为填写反馈调查问卷的现有订阅者提供一周的免费体验。
  • 将客户的免费访问权限作为客户服务提供给客户,例如,在可能影响其服务使用能力的长时间中断后。

每次调用 API,结算最短可推迟一天,最长为一年。如需进一步推迟使用权的结束时间,请在新的到期日期到来之前再次调用该 API。

执行此操作会触发 SUBSCRIPTION_DEFERRED 实时开发者通知。如需了解如何处理这些事件,请参阅订阅简介中的为订阅者推迟结算部分。

示例:

  1. FitnessGoals 流式传输服务想要开展一项促销活动,以鼓励用户在 2 月份定期锻炼。

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

  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 函数,并将 "proratedRefund": {} 设置为退款类型。

示例:

  1. Maria 有一个为期 30 天的 SuperMovies 每月在线播放方案自动续订型订阅。她很高兴地使用该服务一段时间了。 Maria 在结算周期的第 15 天联系了客户服务团队,她声称她正在国外迁移,从次日开始将无法再使用这项服务。

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

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