管理订阅和一次性购买

您可能需要对订阅或一次性购买采取管理措施作为日常业务的一部分。例如,您的客户服务可能需要为用户提供全部或部分退款,或者您可能需要在某些情况下撤销授权。您可以从 Play 管理中心管理订单,或者如果您想从您自己的系统管理它们,您可以使用Google Play 开发者 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 次的任何订阅者提供额外一个月的服务。

  3. 他们跟踪挑战的结果,在 3 月 1 日,他们为属于 2 月份完成挑战的用户的每个活动订阅购买调用subscriptions.defer API。

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

发行退款和撤销

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

按订单 ID 全额退款

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

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

示例

  1. 为了庆祝新世界杯的开始,“足球而非英式足球”电竞应用程序决定为所有在头 24 小时内购买新球队球衣的用户抽奖赠送免费虚拟球衣。

  2. “足球而非英式足球”使用orders.refund API(不传递 revoke 参数)向获奖者退款购买球衣的费用。

按购买令牌撤销和退款订阅

对于某些用例,您可能需要撤销用户对订阅的访问权限并提供退款。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% 的订阅价格退款,并且对该服务的访问权限已立即终止。