RVS概述
下图显示了带有收据验证的购买工作流程。RVS在IAP API完成购买并将购买收据返回给应用后启动。
下表中的步骤与上图中的标注匹配:
只要是通过亚马逊购买,您还可以使用RVS访问在其他平台(如您的网站)上购买的订阅。以下情景描述了此工作流程:
- 应用用户从您的公司网站上通过亚马逊购买订阅。
- 应用收到所购买订阅的收据
- 为允许访问,应用会向您的服务器发送收据中的信息。最后,服务器通过查询RVS来验证此交易。
RVS请求语法
使用RVS来验证PurchaseResponse对象或PurchaseUpdatesResponse对象。可以从这些响应对象中提取一个UserId,它表示用户的唯一标识符。PurchaseResponse对象包含ReceiptId,它与UserId联合用于对购买执行带外服务器端验证。出于安全原因,来自您的服务器的请求需要传递共享密钥以确认您的身份。
这些请求使用以下格式:
- Protocol:用于与服务器或沙盒通信的协议,如https:。
- Server: 您要与之通信的RVS服务器URL。
- sandbox:使用值“sandbox”。
- Operation_version_number:
verifyReceiptId操作版本号。此版本号独立于IAP版本号。当前verifyReceiptId版本号为“1.0”。 - Shared_secret: 用于标识发出请求的开发者的共享密钥。可在亚马逊应用商店中您的开发者账户“Shared Key”(共享密钥)页面上找到共享密钥:https://developer.amazon.com/sdk/shared-key.html。对于RVSSandbox,共享密钥可以是任何非空字符串。
- UserId: 代表亚马逊应用商店应用中不同亚马逊客户的ID:
PurchaseResponse.getUserData().getUserId()。 - ReceiptId: 购买的唯一ID:
PurchaseResponse.getReceipt().getReceiptId()或PurchaseUpdatesResponse.getReceipts()→Receipt.getReceiptId()。
RVS响应语法
RVS提供了RESTful JSON API接口。作为最佳实践,使用JSON解析器类从RVS服务器读取JSON响应。 发出验证交易的请求后,RVS服务器或沙盒会返回响应代码来指示请求是否成功。如果成功,则返回的JSON响应包括有关交易的信息。 下例展示了一个成功响应:RVS响应代码
收据验证服务会使用以下代码之一进行响应,这些代码可以指示验证检查的结果:成功交易的RVS响应字段
下表列出并描述了成功交易的RVS响应中包含的字段。取消日期和续订日期
renewalDate字段包含自动续订订阅购买下一次需要续订的日期。此字段仅适用于订阅购买。如果客户按月订阅,则订阅会每月在与客户首次订阅相同的日期续订。如果下个月不包括该确切日期,则预订日期为距其最近的前一个日期。例如:
- 如果客户在1月2日订阅,则接下来的三个续订日期为2月2日、3月2日和4月2日。
- 如果客户在1月31日订阅,接下来的三个续订日期为2月28日(如果是闰年,则为2月29日)、3月31日和4月30日。
cancelDate字段包含订阅购买到期的日期或亚马逊客户服务取消购买的日期。取消日期表示客户失去相应内容访问权限的日期。如果客户通过关闭自动续订来取消其订阅,则取消日期是之前原定的续订日期。
renewalDate和cancelDate字段以毫秒为单位存储。可以使用java.util.Date(timeInMillis) 将值转换为日期对象。
消费品或权利购买
在有效的收据中,取消日期和续订日期都包含null值。如果取消日期字段不为null,则会包含亚马逊客户服务取消购买的日期。
订阅购买
在有效的订阅收据中,取消日期为null。如果cancelDate字段不为null,则会包含订阅到期的日期或亚马逊客户服务取消购买的日期。
renewalDate字段包含自动续订订阅购买下一次需要续订的日期。如果订阅未设置为自动续订,则字段值为null。
在以下示例中,用户拥有已取消的订阅:
- 订阅的有效期为从2016年1月1日到2016年3月1日。在此收据中,此订阅的purchaseDate设置为2016/01/01,cancelDate设置为2016/03/01。
- 如果此订阅后来于2016年4月1日重新激活,则订阅会具有第二个收据。第二个收据会显示purchaseDate为2016年4月1日,cancelDate为null。

