Voided Purchases API

Google Play Voided Purchases API 提供了一个与用户取消的购买交易相关的应用内订单列表。您可以利用此列表中的信息来实现一个撤消系统,以阻止用户访问这些应用内订单中的产品。

此 API 适用于“购买”。对于“订阅”,请参阅实时开发者通知

用户可以通过以下方式来取消购买交易:

  • 用户针对其订单请求退款。
  • 用户取消其订单。
  • 订单获退款。

通过使用此 API,您可以为应用(尤其是当您的应用为游戏时)的所有用户创建更平衡且公平的体验。

获得访问权限

要使用 Voided Purchases API,您必须拥有查看财务信息的权限。您可以使用 OAuth 客户端或服务帐号来提供授权。如果您使用的是服务帐号,请在此帐号中启用“查看财务报表”权限。

要详细了解如何获授权访问 Google Play Developer API,请参阅以下指南:

查看取消的购买交易

使用 GET 方法请求提供与应用内订单相关的已取消购买交易的列表。在请求中,请加入您应用的完全限定软件包名称(如 com.google.android.apps.maps),以及您在获取 API 访问权限时收到的授权令牌。

GET https://www.googleapis.com/androidpublisher/v3/applications/
your_package_name/purchases/voidedpurchases?access_token=your_auth_token

您还可以在请求中加入以下参数(每个均为可选):

startTime

您想在响应中看到的应用内商品最早的取消购买交易的时间(以自 UNIX 公元纪年以来的毫秒数表示)。默认情况下,startTime 设为 30 天以前。

此 API 只能显示在过去 30 天内发生的取消购买交易。更早的取消购买交易并不包含在响应中,无论您为 startTime 提供的值是什么。

endTime

您想在响应中看到的应用内商品最晚的取消购买交易的时间(以自 UNIX 公元纪年以来的毫秒数表示)。默认情况下,endTime 设为当前时间。

maxResults
每个响应中出现的取消购买交易的数量上限。默认情况下,此值为 1000。请注意,此参数的最大值也是 1000。
token
之前响应中的继续令牌;可让您查看更多结果。

响应是一个 JSON 字符串,其中包含与应用内订单相关的取消购买交易列表。如果结果数量超过了在 maxResults 请求参数中指定的数量,则响应将包含一个 nextPageToken 值,您可以将该值传递给后续请求以查看更多结果。列表中的第一个结果显示的是应用内商品的最早取消购买交易。

{
  "tokenPagination": {
    "nextPageToken": "next_page_token"
  },
  "voidedPurchases": [
    {
      "kind": "androidpublisher#voidedPurchase",
      "purchaseToken": "some_purchase_token",
      "purchaseTimeMillis": "1468825200000",
      "voidedTimeMillis": "1469430000000"
    },
    {
      "kind": "androidpublisher#voidedPurchase",
      "purchaseToken": "some_other_purchase_token",
      "purchaseTimeMillis": "1468825100000",
      "voidedTimeMillis": "1470034800000"
    },
  ]
}

配额

Voided Purchases API 会针对每个软件包设置以下配额:

  • 每天 500 次查询(一天是从太平洋时间午夜开始,并于次日同一时间结束)。
  • 在任何时长为 30 秒的期限内查询 30 次。

初次请求指南

在初次提交 API 请求时,您可能需要获取您应用的所有可用数据。虽然不太可能实现,但此流程还是有可能会将您的每日配额消耗一空。要以更安全、更统一的方式来取得取消购买交易数据,请按以下最佳做法操作:

  • 使用 maxResults 参数的默认值。这样一来,如果您将一天的整个查询配额用尽,便可检索 100000 次取消购买交易的详细信息。
  • 如果响应包含 nextPageToken 的值,请在下次提交请求期间将此值分配给 token 参数。
  • 尽可能减少使用可选请求参数的值进行的实验,因为错误请求仍会计入每个配额。

最佳做法

在您确定如何在应用中使用此 API 时,请注意,取消购买交易的原因是多种多样的,并没有任何单一的解决方案可以适用于所有情况。在设计撤消政策和策略时,您应该时刻为用户着想。为此,您应该应用以下推荐做法:

  • 使用此 API 作为综合策略中的许多要素之一来应对不良行为。与以下各项结合时,撤消对应用内商品的访问权限通常会更有效:应用内购买商品价格合理的应用,有助于阻止不良行为的应用设计,或所受文化不支持这类不良行为的强大用户群,以及响应迅速且富有效率的用户支持渠道。
  • 统一管理撤消政策,确保对所有用户的公平性。
  • 在解决不良行为时,考虑创建分阶段策略。例如,对早期违规行为先进行应用内警告,然后在用户继续进行不良行为时升级响应措施。万不得已时,您可以彻底阻止用户与您的应用互动。
  • 在引入撤消政策后,每当您更新此政策时,都请使用您应用的推广渠道通知用户相关更改。先为用户留出充足的时间来清楚了解这些更改,然后再让更改在应用中生效。
  • 对用户开诚布公,并在每次采取措施时通知用户,例如撤消用户对某个应用内商品的访问权限。理想情况下,用户应该能够针对您的决定提出异议,并且此类异议应受到公平对待。
  • 监控反馈表单和社区论坛,了解促使用户采取不良行为方式的原因,及其执行此类行为的方式。根据这些数据分析采取措施,并以此作为第一道防线。