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

您可能需要对订阅或一次性购买交易执行管理操作 并将其融入到了日常业务中。例如,您的客户服务人员可能需要 为用户办理全额退款或部分退款,或者您可能需要撤消 使用权。您可以通过 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. 他们决定为任意订阅者额外提供一个月的服务 该月至少进行了 10 次 FitnessGoal 运动 2 月。

  3. 他们跟踪挑战的结果,在 3 月 1 日,他们将 subscriptions.defer API,针对属于的所有有效订阅购买交易 2 月份符合挑战的用户数量。

  4. 这些用户可享受额外一整月的定期锻炼福利 而且用户可以告诉所有朋友 FitnessGoals 帮助他们保持健康!

办理退款和撤消订单

在很多情况下,您可能希望针对以下项目执行退款或撤消操作: 订阅内容或一次性购买交易的访问权限。

按订单 ID 全额退款

使用 orders.refund API 提供的退款服务,您可以针对购买后三年内的任何订单办理全额退款。 orders.refund 方法会收到一个撤消参数,指示是否 并应撤消其访问权限。

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

示例:

  1. 为庆祝全新世界杯开幕,电竞应用闪亮登场 “足球之非足球”决定为所有用户提供免费的虚拟球衣抽奖机会 。

  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 拥有为期 30 天的超级电影在线播放订阅服务 包月方案。Maria 遇到了一些技术问题 访问内容的源头。她在结算第 3 天联系了客户服务人员 一个周期声明,她从来没有获得过订阅。

  2. 客户服务人员在以下位置找到玛丽亚的订阅购买详情: 其系统并触发对 purchases.subscriptionsv2.revoke 的调用 申请全额退款。

  3. 客户服务人员告诉 Maria,她应该全力以赴 订阅价格已退还,且她不再订阅该方案。

按比例退款

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

示例:

  1. Maria 拥有为期 30 天的超级电影在线播放订阅服务 包月方案。她很高兴使用了该服务一段时间。 Maria 在结算周期的第 15 天联系了客户服务人员,称她 即将搬到国外, 次日。

  2. 客户服务人员在以下位置找到玛丽亚的订阅购买详情: 其系统并触发对 purchases.subscriptionsv2.revoke 的调用 申请按比例退款。

  3. 客户服务人员告诉 Maria,她应该得到大约 50% 的 订阅价格已退还,用户对服务的使用权限已终止 。