开发人员控制台

适用于网页应用的IAP API方法


适用于网页应用的IAP API方法

为了实现应用内购买,您的网页应用需为Amazon Services库提供一套响应处理程序。

应用内购买API主要由两部分组成:Amazon Services库(一个javascript库)和响应处理程序(由您实现并在初始化时将其作为参数传递给Amazon Services库)。

要包括该库,请在您的网页应用中添加以下<script>标签:

<script src="https://resources.amazonwebapps.com/v1/latest/Amazon-Web-App-API.min.js">
</script>

Amazon Services库

Amazon Services库包含以下方法:

  • AmazonIapV2.addListener(listener)
    • 在使用此类之前,您必须注册观察器
    • 需要在onLoad()生命周期方法中调用此方法
  • AmazonIapV2.purchase(sku)
    • 此方法用于发起特定SKU的购买
    • 此方法适用于所有类型的可购买商品
    • 用户显示界面使用为SKU配置的信息来确定客户购买流程
    • 您可随时从应用中调用此方法
  • AmazonIapV2.getProductData(skus)
    • 此方法用于检索一整套SKU的商品数据
    • 此方法适用于所有类型的可购买商品
    • 您可随时从应用中调用此方法
    • 参数skus是SKU字符串数组
  • AmazonIapV2.getPurchaseUpdates(reset)
    • 此方法用于跨设备同步以前购买和撤销的权利。
    • 请在活动的onStart()或onResume()方法中实现getPurchaseUpdates()。此外,为防止过度履行订单,请根据receiptId对收据删重。要了解对于消费品、权利和订阅,实现该方法有何具体差异,请参阅以下内容。
    • 消费品​: 对于消费品,getPurchaseUpdates()方法返回未履行和已取消的购买收据。在IAP 2.0中实现getPurchaseUpdatesResponse()时,请注意以下事项:
      • 请在应用中添加逻辑来处理从getPurchaseUpdates()返回的购买收据的履行问题。相应的PurchaseUpdatesResponse()回调随时可能会发生,包括在您的应用打开时,所以请谨慎引用可能不可用的用户界面(UI)元素或对象。
      • reset设置为true可返回所有购买收据,将reset设置为false可返回自上次调用getPurchaseUpdates()之后新生成的购买收据。
    • 权利:对于权利和订阅,onPurchaseUpdatesResponse()返回已取消和仍有效的购买收据。可使用receipt.isCanceled()检查购买是否取消。在IAP 1.0中,对PurchaseUpdatesResponse对象调用getRevokedSkus(),可返回已取消权利和订阅的收据。
    • 订阅: 与权利相同。
  • AmazonIapV2.getUserData()
    • 此方法用于检索当前登录用户的应用特定ID
    • 需要在onLoad()方法中调用此方法
  • AmazonIapV2.notifyFulfillment(receiptId, fulfillmentResult)
    • IAP 2.0提供了新的API,可用于跟踪购买的履行状态。要跟踪购买的履行状态,请实现notifyFulfillment() API。在履行商品后,实现此调用,来将购买状态发送给亚马逊。
    • 在履行商品后,如果您没有使用FULFILLED状态调用notifyFulfillment(),交付将保持挂起状态。在这种情况下,您下次调用getPurchaseUpdates()时,将通过onPurchaseUpdatesResponse()回调继续进行交付尝试。​最终,如果亚马逊未收到使用此API对履行进行的明确确认,则可能会取消订单。
    • 如果您无法履行商品,请使用UNAVAILABLE状态。​随时可以从您的应用中使用UNAVAILABLE状态调用notifyFulfillment()。
    • 此调用是不可变的。如果通过notifyFulfillment()将订单标记为FULFILLED或UNAVAILABLE,则无法再次更改状态

ProductData

产品数据不仅表示可购买商品,还可为您的店面提供信息。最佳实践是让客户在下单之前,先检索并浏览可购买商品的价格。ProductData类可用于获取商品的当地价格、名称和描述字符串。价格字符串不仅包括币种符号,还会根据区域设置将其设置为适当的格式。

PurchaseReceipt

每次购买都会生成一个PurchaseReceipt。每个收据都包含一个recieptId,可通过Receipt Verification Service,用它来验证购买。收据是安全的,您可以仅凭借它向用户授权应用内容或功能的访问权限。作为开发者,您有权访问特定购买的userData、receiptId和SKU。每次返回收据数据时,会动态生成recieptId。它具有独特价值,可验证响应对象中返回的收据数据。且在任何给定时间,每个recieptId都可根据Receipt Verification Service成功验证。

Reset

请使用boolean reset参数,不要使用offset参数1.0。将reset设置为true可返回所有购买收据,设置为false可返回自上次调用getPurchaseUpdates()之后新生成的购买收据

响应对象

每次通过Amazon Services库发出调用,每个适用于addListener()方法的相应响应处理程序都会收到响应。每次响应都会使用一个响应对象。下面详细介绍这些响应:

  • GetUserDataResponse - 为当前登录到亚马逊客户端的用户提供应用特定的UserData
  • PurchaseUpdatesResponse - 将偏移传递到发起请求后,提供收据和不可用SKU的分页列表。收据会以无序的形式成组返回。
  • ProductDataResponse - 提供以SKU为键的商品数据。
  • PurchaseResponse - 提供应用内发起的购买状态。对开发者而言,任何与购买有关的错误都是不可见的,您无需在应用中对错误进行任何处理;这归应用内购买API管理。

购买处理程序

您必须实现以下响应处理程序并在addListener方法中向Amazon Services库注册它们:

  • getUserDataResponse(userDataResponse) - 为响应GetUserData而调用。
  • getProductDataResponse(productDataResponse) - 为响应getProductData而调用。data.productDataMap以SKU为键,是productData对象的散列表。
  • purchaseResponse(purchaseResponse) - 为报告购买操作的状态而调用。purchaseResponse.status包含响应的状态。如果还未传递购买响应,应用会话就关闭了,将调用此函数,以使应用产生新的会话,来注册购买处理程序。
  • getPurchaseUpdateResponse(data) - 使用已授予用户权利的列表,可调用此程序。data.receipts包含一个以SKU为键的散列表,其中包括已授予用户的IAP的收据。

处理收据

对每个收据实现已履行确认。在处理收据时,请先检验收据是否已取消。根据取消状态,执行以下操作之一:

  • 如果收据已取消,而商品尚未撤销,请撤销该商品。
  • 如果收据未取消:
    • 检查此receiptId是否已履行。如果已履行,请使用FULFILLED状态为receiptId调用notifyFulfillment()。
    • 如果尚未履行,请履行收据。存储receiptId来跟踪已履行的商品,然后使用FULFILLED状态为receiptId调用notifyFulfillment()。
    • 如果因商品适用于以前的游戏状态或游戏不支持该商品而无法履行,请使用状态UNAVAILABLE为receiptId调用notifyFulfillment()。如果您在处理收据过程中遇到临时错误,不要发送此状态