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

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

取消订阅

用户或开发者都可以发起订阅取消。

用户发起的取消

用户可以随时使用 Play 商店取消 Google Play 订阅。如果适用,您还必须提供一个选项,让用户可以在您的应用和网站上取消订阅。

让用户自愿取消订阅的最简单方法是在您的应用中提供指向Play 商店的 深层链接 ,用户可以在 Play 商店中查看 和管理自己的订阅。

开发者发起的取消

作为开发者,您可能还需要从后端触发取消。 您可以使用 purchases.subscriptions.cancel API 取消订阅购买交易。 例如,您可以使用此方法停用旧版服务。 取消订阅不会办理退款,用户仍可继续访问相关订阅内容,直到当前结算周期结束为止。

您可以使用此方法在 cancellationType 请求正文参数中指定以下类型的取消:

  • USER_REQUESTED_STOP_RENEWALS:取消订阅,就像用户 从 Play 商店取消订阅一样。在当前合约期内,任何分期付款都将继续。在 Play 商店中,用户可以在订阅到期之前恢复订阅,也可以在订阅到期后重新订阅(如果基础方案支持此功能)。

  • DEVELOPER_REQUESTED_STOP_PAYMENTS:取消订阅并阻止 任何进一步的付款。用户无法从 Play 商店恢复或重新订阅,但您可以允许他们在您的应用中重新订阅。

允许用户恢复未到期的订阅

在某些情况下,您可能会发现,在您作为开发者触发取消后,允许用户从 Play 订阅中心恢复未到期的订阅非常有用。例如,您可能想要提供自定义的应用内取消流程。您可以根据自己的业务逻辑,决定用户可以恢复哪些从后端触发的取消。

如需指明用户可以恢复取消,请向 purchases.subscriptions.cancel API 发出 POST 请求,并将cancellationType 请求参数设置为USER_REQUESTED_STOP_RENEWALS值。

示例:

  • 订阅的购买令牌 1a2b3c4d5e6f7g8h9i0j
  • 应用软件包名称 com.your.app
  • 订阅 ID your-subscription-product

HTTP POST 请求:

https://androidpublisher.googleapis.com/androidpublisher/v3/applications/com.your.app/purchases/subscriptions/your-subscription-product/tokens/1a2b3c4d5e6f7g8h9i0j:cancel

请求正文:

{
  "cancellationType": "USER_REQUESTED_STOP_RENEWALS"
}

允许用户重新订阅已到期的订阅

如需允许重新订阅已到期的订阅,您必须启用 订阅基础方案中的重新订阅选项 ,然后将 cancellationType参数设置为USER_REQUESTED_STOP_RENEWALS值,以取消订阅。

允许用户仅在您的应用中重新订阅

如果您已将 cancellationType 参数设置为 DEVELOPER_REQUESTED_STOP_PAYMENTS 或未设置 cancellationType 参数,则用户无法从 Play 订阅中心恢复订阅。不过,如果需要,用户可以通过您的应用再次订阅。

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

延迟结算

您可以使用 subscriptionsv2.defer 方法延长订阅的使用权期限。如果您延迟包含加购项的订阅,则订阅中的所有商品都会延迟相同的时间。在延迟期内,用户仍会订阅您的内容,但无需为额外的时间付费。如果您延迟订阅的结算,状态信息会相应更新,并且您会在购买状态信息的 expiryTime 字段中看到相应信息:

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

以下是一些有关如何使用延迟结算的示例:

  • 将免费访问权限作为一种特别优惠提供给用户,例如,向填写反馈问卷的现有订阅者提供一周的免费访问权限。
  • 将免费访问权限作为一种客户关怀措施提供给客户,例如,在长时间中断服务后,客户可能无法使用您的服务。

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

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

示例:

  1. FitnessGoals 在线媒体服务想要在 2 月份开展促销活动,以鼓励用户定期锻炼。

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

  3. 他们跟踪挑战的结果,并在 3 月 1 日,针对在 2 月份完成挑战的用户的所有有效订阅购买交易调用 subscriptionsv2.defer 方法。

  4. 这些用户可以免费观看额外 1 个月的定期锻炼视频,并且用户会告诉所有朋友 FitnessGoals 如何帮助他们保持健康!

办理退款和撤消

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

按订单 ID 全额退款

您可以使用 orders.refund API 为购买交易发生后三年内的任何订单办理全额退款。 orders.refund 方法会接收一个撤消参数,该参数用于指明除了提供退款之外,是否还应撤消访问权限。

如果您在订阅购买交易的退款调用中撤消访问权限,则 订阅会立即终止,并触发 SUBSCRIPTION_REVOKED 实时开发者通知和 VoidedPurchaseNotification(记录在 Voided Purchases API 中)。如需了解如何处理这些事件,请参阅订阅生命周期管理指南的撤消部分。

示例:

  1. 为了庆祝新世界杯的开始,电子竞技应用 Football-Not-Soccer 决定在最初 24 小时内向所有购买新球队套装的用户免费赠送虚拟球衣。

  2. Football-Not-Soccer 使用 orders.refund API,但不传递撤消参数,以便向 获奖者退还球衣购买款。

按购买令牌撤消订阅并办理退款

在某些使用情形中,您可能需要撤消用户订阅的访问权限并办理退款。Play 结算服务通过 subscriptionsv2.revoke API 提供撤消方法,包括全额 退款和按比例退款。您可以使用此端点指定 revocationContext ,以确定退款的计算方式。

执行此操作会触发 SUBSCRIPTION_REVOKED 实时开发者 通知和 VoidedPurchaseNotification,并记录在 Voided Purchases API 中。您的应用应按照 撤消中的说明来处理这些取消事件。

示例:

  • 购买交易,购买令牌为 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% 的订阅价格退款,并且对该服务的访问权限已立即终止。