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

在日常业务中,您可能需要对订阅或一次性购买交易采取管理措施。例如,您的客户服务可能需要为用户办理全额或部分退款,或者您可能需要在某些情况下撤消授权。您可以通过 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. 这些用户可以免费畅享额外整月的常规锻炼视频,并且会告诉所有朋友 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 函数,并将 "fullRefund": {} 设置为退款类型。

示例:

  1. Maria 订阅了 SuperMovies 串流包月方案,该方案为期 30 天,可自动续订。Maria 遇到了一些技术问题,导致她无法访问内容。她在结算周期的第 3 天联系了客户服务团队,声称自己从未获得订阅的使用权限。

  2. 客户服务人员在系统中找到 Maria 的订阅购买详细信息,并触发对 purchases.subscriptionsv2.revoke 的调用,以申请全额退款。

  3. 客户服务人员告知 Maria,她应获得 100% 的订阅价格退款,并且她不再订阅该方案。

按比例折算退款

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

对于自动续订型订阅和时长至少为一周的预付费方案,我们支持按比例退款。

示例:

  1. Maria 订阅了 SuperMovies 串流包月方案,该方案为期 30 天,可自动续订。她很高兴地使用这项服务已经有一段时间了。 在结算周期的第 15 天,Maria 联系了客户服务团队,表示她将移居国外,从次日起将无法再使用该服务。

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

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