开发者控制台

适用于消费品和权利的RVS

适用于消费品和权利的RVS

适用于亚马逊应用商店计费兼容性SDK的收据验证服务 (RVS) 可让您验证您应用的用户进行的购买。有关RVS的概述,请参阅收据验证服务概述

适用于亚马逊应用商店计费兼容性SDK的RVS有两个REST API,一个用于验证消费品和权利购买,另一个用于验证订阅购买。本页描述了用于消费品和权利购买的REST API的请求和响应。

purchases.products.get API请求

使用purchases.products.get API来验证通过亚马逊应用商店计费兼容性SDK进行的消费品或权利购买的收据。成功购买商品后,亚马逊应用商店计费兼容性SDK会返回Purchase对象。要对购买进行服务器端验证,请从该对象中提取购买令牌并将其连同应用程序包名称、商品ID(您用于创建应用程序内商品的SKU值)和共享密钥一起传递至RVS服务器。出于安全考虑,当您从服务器发出请求时,必须传递共享密钥以确认您的身份。

请求使用以下格式:

https://appstore-sdk.amazon.com/version/{operation-version-number}/get/developer/{shared-secret}/applications/{package-name}/purchases/products/{product-id}/tokens/{token}

花括号包含请求参数的占位符。在您的请求中,将占位符替换为要验证的交易的值。下表列出了请求参数的描述。

请求参数 描述
operation-version-number purchases.products.get操作的版本号。此版本号独立于亚马逊应用商店计费兼容性SDK版本号。当前purchases.products.get的版本号为“1.0”。
shared-secret 用于标识发出请求的开发者的共享密钥。可在开发者控制台共享密钥页面上找到共享密钥:https://developer.amazon.com/zh/sdk/shared-key.html
package-name 用于销售应用内产品的应用程序的程序包名称。例如“com.amazon.sample.iap.consumable”。您可以通过调用getApplicationContext().getPackageName()从您的应用中获取程序包名称,也可以在AndroidManifest.xml文件中找到它。
product-id 您在开发者控制台中为应用创建的应用内产品SKU。例如“iapsamplev2.gold_medal”。对于订阅商品,可使用期限SKU。您可以使用Purchase.getSkus().get(0) 方法从Purchase对象提取商品ID。
token Purchase对象的getPurchaseToken() 方法中获得的购买的唯一ID。

purchases.products.get API响应

purchases.products.get API提供了一个RESTful JSON API接口。作为最佳实践,使用JSON解析器类(例如OkHttpApache HttpClient)从RVS服务器读取JSON响应。

向RVS服务器发出验证交易的请求后,RVS服务器会返回响应代码来指示请求是否成功。如果成功,则返回的JSON响应包括有关交易的信息。

下例展示了一个成功响应:

{
    "cancelDate": null,
    "cancelReason": null,
    "kind": "androidpublisher#productPurchase",
    "parentProductId": null,
    "productId": "com.amazon.iapsamplev2.expansion_set_1",
    "productType": "ENTITLED",
    "purchaseState": 0,
    "purchaseTimeMillis": "1399070753509",
    "purchaseToken": "mINy5VRd1FqjVOz-WBtTqw9FBGWhnuVx07kzTBMR600=:2:11",
    "purchaseType": null,
    "quantity": 1,
    "testTransaction": false
}

响应代码和错误消息

收据验证服务会使用以下代码之一进行响应,这些代码可以指示验证检查的结果。

HTTP响应代码 描述
200 此次购买有效。
400 购买令牌或商品ID无效。
401 开发者密钥无效或与给定的购买令牌不匹配。
404 程序包名称无效或与给定的购买令牌不匹配。
410 receiptId表示的交易不再有效。请将其作为已取消的收据。
429 该请求已被限制节流。请降低您的调用速率并稍后重试。
500 出现内部服务器错误。

成功交易的响应字段

下表描述了成功交易的purchases.products.get响应中包含的字段。有些字段的名称和数据类型与Google的purchases.products.get API相同。这些字段列在与Google的purchases.products.get API相匹配的字段下。其他字段下列出的字段与Google API不同,它们显示了亚马逊应用商店提供的购买详情。

字段 数据类型 描述
与Google的purchases.products.get API匹配的字段
kind 字符串 表示androidpublisher服务中的ProductPurchase对象。
purchaseTimeMillis 字符串 购买商品的时间,以纪元(1970年1月1日)以后的毫秒数计算。
purchaseState 整数 订单的购买状态。可能的值:
0 - 已购买
1 - 已取消
purchaseType 整数 应用程序内商品的购买类型。仅当此购买不是使用标准应用内购买流程进行时,才会设置此字段。可能的值:
0 - 测试(通过许可证测试账户购买)。
purchaseToken 字符串 购买的唯一标识符。
productId 字符串 您在应用中为此商品定义的SKU。
quantity 整数 购买的数量。始终为null或1。
其他字段
parentProductId 字符串 Null。预留以供将来使用。
productType 字符串 所购买商品的类型。有效的商品类型为CONSUMABLEENTITLED
cancelDate 长整数 取消购买的日期。时间以毫秒为单位。在有效收据中,取消日期包含空值。如果取消日期字段不为null,则会包含亚马逊客户服务取消购买的日期。
cancelReason 整数 指示取消产品的原因。可能的值为null012,其中每个整数分别代表一项取消原因:
null - 购买未取消。
0 - 当前无法提供取消原因,将在之后提供。
1 - 客户取消了订单。
2 - 亚马逊系统取消了购买。如果亚马逊客户支持部门应客户要求取消订单,也会返回此代码。
testTransaction 布尔值 表明此购买是否作为亚马逊发布和测试过程的一部分进行。

purchases.products.get API不支持的字段

亚马逊应用商店计费兼容性RVS API在响应中不支持Google Play开发者API提供的以下字段。

  • consumptionState
  • regionCode
  • orderId
  • developerPayload
  • acknowledgementState
  • obfuscatedExternalAccountId
  • obfuscatedExternalProfileId

本页面的部分内容基于Google创建和共享的作品进行了修改,并且在使用相应内容时依照知识共享署名4.0许可中所述的条款。资料来源:https://developers.google.com/android-publisher/api-ref/rest/v3/purchases.products/get, https://developers.google.com/android-publisher/api-ref/rest/v3/purchases.products.


Last updated: 2024年5月22日