混合应用程序中的IAP(cordova) - iTunes收据仅包含第一笔交易

时间:2015-10-16 08:03:03

标签: ios cordova in-app-purchase phonegap-plugins

这就是事情,几天来我正试图找出IAP (应用程序中的苹果ios)在hybdrid应用程序中。

一切似乎都在起作用,交易正在触发结束...... 但是当谈到服务器端收据验证时,奇怪的开始了。

正如我所提到的,在应用程序本身中,新事务是使用新的唯一ID进行的。 但是,当我向服务器发送收据并且我的服务器要求苹果进行验证时,信息apple正在返回仅包含第一个已完成的交易,没有当前的指示交易或在第一个交易之后完成的任何其他交易。

有人经历过类似的事吗?

其他信息:

  1. 一切都发生在沙箱中(它只能是沙盒的东西吗?而且它可能会神奇地开始工作吗?)
  2. 在应用程序本身,当我要求收据时,我可以稍后将其发送到我的服务器,收据总是一样的。从我所读到的,自ios7以来是正确的
  3. 我正在使用此插件:https://github.com/j3k0/cordova-plugin-purchase
  4. 关闭交易的自动完成(cordova插件选项)
  5. 我用于收据验证的服务器端lib:https://github.com/chrismaddern/iOS-Receipt-Validator-PHP/blob/master/itunesReceiptValidator.php

2 个答案:

答案 0 :(得分:2)

问题解决了:))

显然,有一种机制可以在cordova-plugin-purchase中缓存收据,这种机制不需要,实际上会导致我的问题。

所以解决方法是致电:

storekit.setAppStoreReceipt(null);
在获取收据之前

storekit.loadReceipts(function (receipts) {
     ...
})

将强制插件删除缓存的收据并始终获取最新版本。

答案 1 :(得分:0)

有两种iTunes收据:

  1. SKPaymentTransaction#transactionReceipt(已弃用)和;
  2. Apple Grand Unified Receipt,可从appStoreReceiptURL
  3. 访问

    您最有可能使用transactionReceipt属性。

    cordova-plugin-purchase似乎实现了appStoreReceiptURL here,可以通过IAP.onPurchase方法进行访问。

    编辑:

    在仔细查看插件代码之后,应该有一个全局storekit对象公开loadReceipts方法,如此

    storekit.loadReceipts(function (receipts) {
      console.log('Receipt for appStore = ' + receipts.appStoreReceipt);
      console.log('Receipt for ' + productId + ' = ' + receipts.forProduct(productId));
    });
    

    它是您要发送到服务器的receipts.appStoreReceipt属性。