您可能需要对订阅或一次性购买采取管理操作,作为日常业务的一部分。例如,您的客户服务可能需要为用户提供全部或部分退款,或者您可能需要在某些情况下撤销授权。您可以 从 Play 管理中心管理订单,或者如果您想从自己的系统管理它们,可以使用 Google Play 开发者 API。
取消订阅
用户可以使用 Play 商店随时取消 Google Play 订阅,但您还必须为用户提供一个选项,让他们可以在您的应用程序中以及您的网站上(如果适用)取消他们的订阅。
让用户能够自愿取消的最简单方法是 深层链接到 Play 商店,在那里他们可以查看和管理他们的订阅。
您可能还需要从后端触发取消。 purchases.subscriptions.cancel
方法允许您取消订阅购买。例如,您可以使用此方法关闭旧的服务。取消订阅不会发出退款,用户将继续拥有访问权限,直到他们的当前计费周期结束。使用此方法取消订阅会阻止用户在 Play 商店中恢复订阅,但用户仍然可以通过您的应用程序再次注册,如果他们需要的话。
执行此操作会触发 SUBSCRIPTION_CANCELED
实时开发者通知。按照 取消 中的描述处理这些取消。
延迟计费
使用 subscriptions.defer
延长订阅的授权期限。在延迟期间,用户仍然订阅您的内容,但不会被收取额外的费用。当您延迟订阅的计费时,状态信息将相应更新,您将在购买状态信息中的 expiryTime
字段中看到反映的内容
- 对于活跃的定期订阅,延迟计费会延长下一次续订日期。
- 对于预付费计划,延迟计费会延长到期时间。
以下是您可以使用延迟计费的一些示例
- 为用户提供免费访问权限作为特殊优惠,例如为现有订阅者提供一周免费访问权限,以填写反馈调查。
- 为客户提供免费访问权限作为客户服务行动,例如在可能会影响他们使用您的服务的长时间停机后。
每个 API 调用可以延迟计费最短 1 天,最长 1 年。要进一步延迟授权的结束时间,请在新的到期日期到来之前再次调用 API。
执行此操作会触发 SUBSCRIPTION_DEFERRED
实时开发者通知。请参阅 关于订阅 中的 为订阅者延迟计费,了解如何处理这些事件。
示例
FitnessGoals 流媒体服务希望在 2 月份举办促销活动,以鼓励定期锻炼。
他们决定为在 2 月份至少使用 FitnessGoals 锻炼 10 次的任何订阅用户提供额外一个月服务。
他们追踪挑战的结果,并在 3 月 1 日为所有在 2 月份完成挑战的用户的活动订阅购买调用
subscriptions.defer
API。这些用户可以免费获得额外一整月的常规锻炼视频,他们会告诉所有朋友 FitnessGoals 如何帮助他们保持健康!
退款和撤销
在许多情况下,您可能需要为订阅或一次性购买退款或撤销访问权限。
通过订单 ID 全额退款
使用 orders.refund
API,您可以为购买后三年内的任何订单进行全额退款。 orders.refund
方法接收一个撤销参数,指示除了提供退款外是否还应撤销访问权限。
如果您在订阅购买的退款调用中发出撤销,订阅将立即终止,并将触发一个 SUBSCRIPTION_REVOKED
实时开发者通知。阅读订阅生命周期管理指南的 撤销部分,了解如何处理这些事件。
示例
为了庆祝新世界杯的开始,电竞应用 Football-Not-Soccer 决定为所有在头 24 小时内购买新球队球衣的用户抽奖送出免费的虚拟球衣。
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": {}
设置为退款类型。
示例
Maria 订阅了 SuperMovies 流媒体每月计划,该计划是自动续订的 30 天订阅。Maria 遇到了无法访问内容的技术问题。她在结算周期的第 3 天联系客户服务,表示她从未获得过订阅的访问权限。
客户服务在其系统中找到 Maria 的订阅购买详细信息,并触发对
purchases.subscriptionsv2.revoke
的调用,请求全额退款。客户服务告诉 Maria,她应该获得订阅价格的 100% 退款,并且她不再订阅该计划。
按比例退款
如果您需要终止订阅并部分退款剩余的授权时间,请发出按比例退款。使用 purchases.subscriptionsv2.revoke
函数,并将 "proratedRefund": {}
设置为退款类型。
示例
Maria 订阅了 SuperMovies 流媒体每月计划,该计划是自动续订的 30 天订阅。她已经愉快地使用该服务一段时间了。Maria 在结算周期的第 15 天联系客户服务,表示她要搬到国外,并且从第二天开始将无法再使用该服务。
客户服务在其系统中找到 Maria 的订阅购买详细信息,并触发对
purchases.subscriptionsv2.revoke
的调用,请求按比例退款。客户服务告诉 Maria,她应该获得订阅价格的 50% 退款,并且对该服务的访问权限将立即终止。