后端服务器中的 Play 结算组件

您刚刚在 Android 应用或渐进式 Web 应用中实现了 Play 结算服务,用户现在可以购买您的数字商品了。现在,您需要在后端服务器中实现一些关键的 Play 结算组件。

Google Play Developer API

Google Play Developer API 包含两个组件:Subscriptions and In-app Purchases APIPublishing API。Subscriptions and In-app Purchases API 包含以下 REST 资源,可帮助您管理商品和购买交易:

您可以直接将 Google Play Developer API 用作 REST API,也可以使用客户端库来快速开始开发。您可以点击此处查看所有受支持语言的客户端库。按照 Google Play Developer API 的入门指南关联您的 API 项目并设置 API 访问客户端。

列出所有应用内商品

在前端(在您的 Android 应用或 Progressive Web 应用中)查询可用的商品详情时,您必须指定商品 ID 列表。您可以使用 Play Developer API inappproducts.list 方法在后端服务器中实现此功能,该方法将列出您在 Play 管理中心内创建的所有应用内商品和订阅。请务必检查每个商品的 status,并仅将 active 的商品发送给应用客户端。

在授予权利前验证购买交易

在 Android 应用或渐进式 Web 应用中实现 Play 结算服务的一个关键环节是,确保在向用户授予权利之前验证购买交易。向用户授予使用权,即授予用户访问其所购商品关联的福利或内容的权限。由于这需要处理敏感数据,因此应在后端服务器上处理。

Google Play Developer API 提供 purchases.products:getpurchases.subscriptions:get 方法。将这些令牌与在应用内检索到的或存储在后端服务器上的购买令牌搭配使用,以验证购买交易是否合法。您应在后端服务器上跟踪购买令牌,以便进行额外的购买交易和用户授权验证。如需详细了解您应采取的步骤,请查看有关验证购买交易的 Google Play 结算服务文档

应用内购买

从客户端收到购买令牌后,您的后端应调用 Google Play Developer API 并验证该令牌是否尚未被消耗。有效购买交易的 purchaseState 字段为 1。

如果购买交易有效,客户端应在收到服务器的响应后确认购买交易并授予使用权。

订阅购买

与验证应用内购买交易类似,您的后端服务器在收到客户端发送的购买令牌后,应调用 Google Play Developer API,并验证订阅是否仍然有效。

如果订阅的 expiryTimeMillis 字段大于当前时间,您的客户端应授予相应使用权。

此外,您还可以趁此机会检查 linkedPurchaseToken 字段,并相应地更新订阅数据库,以处理升级、降级和其他订阅流程。本页的其余部分将详细介绍这些概念。

保持后端状态更新

如果您的应用可在不同平台(可能还使用不同的付款方式)上使用,那么在后端服务器上跟踪用户及其购买交易将有助于确保用户可以在使用您应用的设备和平台上访问其相同的授权。

这可以很简单,例如,您只需拥有一个数据库,用于记录用户及其当前授权。然后,当用户购买商品或使用其权益时,您会相应地更新该数据。当用户下次从其他平台访问您的应用时,您可以从后端检索其适当的授权,以便用户可以访问该应用。

处理订阅状态变化

订阅在其整个生命周期内可能经历多种状态变化,您应确保针对每种变化做出相应响应。详细了解如何处理订阅生命周期,以确保后端始终保持最新状态。

订阅 linkedPurchaseToken

订阅文档中所述,每次新的 Google Play 购买流程(初始购买、升级或降级)都会生成一个新的购买令牌。借助 linkedPurchaseToken 字段,您可以识别多个购买令牌是否属于同一订阅。

每次验证订阅时,后端都应检查 linkedPurchaseToken 字段是否已设置。如果存在,则该字段中的值表示已被替换的先前令牌。您应立即将之前的令牌标记为无效,以免用户使用该令牌访问您的内容。

例如,当后端收到初始购买交易的购买令牌 A(linkedPurchaseToken 字段为空)时,会为该令牌启用使用权。之后,当后端在升级后收到新的购买令牌 B 时,会检查 linkedPurchaseToken 字段,发现该字段设置为 A,然后停用购买令牌 A 的使用权。

如何在订阅升级期间处理关联的购买令牌。

如需详细了解 linkedPurchaseToken 的实现,请参阅正确实现 linkedPurchaseToken 以防止重复订阅

实时开发者通知

Google Play Developer API 的 purchases.subscriptions:get 方法是管理用户订阅的可靠来源。如果您在安全的后端服务器上管理订阅者的状态,则应使其状态与 Google 服务器保持同步。不过,频繁轮询 Google Play Developer API 可能会导致达到 API 配额限制,并延迟接收有关重要用户操作(例如取消或升级订阅)的通知。

实时开发者通知 (RTDN) 是一项 Google Play 结算服务功能,可在订阅者的授权状态发生变化(例如,购买订阅、取消订阅、订阅处于中止状态)时,向您的服务器发送即时通知。借助 RTDN,您只需响应这些通知,即可让订阅者数据库保持同步,而无需定期轮询 Google Play Developer API。

您的后端服务器会针对影响订阅状态的事件(如续订和取消)收到 SubscriptionNotification。然后,使用通知中的购买令牌调用 Google Play Developer API,以获取完整状态并更新您自己的后端状态。

您可以按照这些说明为应用配置 RTDN。然后,您应设置后端服务器以使用这些消息。

如需了解详情,请参阅完整的 RTDN 参考文档