我如何使用RMStore或Apple API获得最后的收据数据



我正在测试应用内购买功能,卡在收据验证步骤。我的收据验证是定制的,基于我在服务器端进行的检查次数(调用我的服务器API),其中一个是transactionID唯一性确认支付的条件。所以,使用RMStore我成功地获得收据和addPayment函数返回唯一的交易成功块。之后,我在成功块内运行verifyTransaction和调用receiptURL。不幸的是,看起来我总是使用receiptURL获得相同的收据,当我将它发送到我的服务器时,它响应我错误,transactionID已经存在于DB中,并且transactionID不是唯一的。这个错误表明我发送相同的收据,即使我做新的付款。请注意,我用的是消耗品。

有人能告诉我正确的工作流程,我提供以下功能(?):

  1. [RMStore productRequest] -我在init函数中调用它。
  2. [RMStore addPayment] -这是我需要理解的后果的开始。
  3. [[[RMStore defaultStore]。transactionPersistor consumeProductOfIdentifier pID):——我需要调用这个函数吗?每次我支付时,苹果都会给我发送唯一的transactinID,调用这个函数没有影响。
  4. [[[RMStore] defaultStore]。receiptVerificator verifyTransaction事务):—我需要调用交易验证吗?
  5. [RMStore receiptURL]或[[NSBundle mainBundle] appstoreeceipturl]这些方法获得receiptURL相等吗?
  6. [NSData datawithcontenttofurl:receiptURL] -这是我遇到的主要问题。在使用上面提到的函数组合进行不同尝试之后,此方法总是返回具有相同transactionID的收据。这让我想到,在运行#5和#6之前,我需要刷新现金,以获得最后的收据,但我不清楚如何做到这一点。

所以,RMStore wiki看起来不错,但我总是期望库会给我一个机会,不完全理解下面发生了什么。不幸的是,RMStore我必须调查苹果在应用程序购买API的工作原理。如果提供函数调用的结果,则可以解决此问题,但我在任何地方都找不到它(!)

有没有人可以检查一下我提供的功能列表,并帮助我将它们按正确的顺序排列,让我解决我在购买后获得最后收据的问题?

我的问题有两个答案:

  1. 代码:

    NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];

    工作正常(即它返回正确的收据体),但是由于某种原因,Apple可以返回两个(甚至数组[])付款,其中第一个transactionID可以与您之前获得的相同。正如我的服务器开发人员所说,这是意想不到的行为。当我获得收据并将收据发送到服务器时,它只读取第一个transactionID这可能和你之前得到的一样。结果,服务器返回FALSE作为验证结果(看起来您尝试支付两次)。所以,由于不清楚为什么Apple在收据中向我发送两个或更多交易记录,但作为解决方案,我要求服务器端开发人员检查收据中的所有交易是否有唯一的transactionID。要了解苹果的行为,还需要更多的调查,但这可能需要更多的时间。我没有找到答案,现在就继续吧。

  2. 与RMStore工作流程相关的是什么我意识到实际上我们只有两个最重要的功能:addPayment和verifyTransaction。addPayment函数将隐式调用verifyTransaction。您应该重载verifyTransaction并在其中调用serverAPI验证函数。如果验证是成功的,你去addPayment的success block做你需要成功支付的事情。如果没有,那就做点别的。我的错误是在addPayment成功块中调用verifyTransaction,这意味着调用它两次。

最新更新