在我们针对沙箱的购买测试期间,我们有一个设备似乎已在大型统一收据中购买了未能在支付队列中恢复的购买,因为我们无法在队列中看到它无法完成,但它们继续出现在我们在服务器上验证的苹果收据中,无限期地指示付款到期 . 我们如何完成PaymentQueue中缺少的付款的交易,而不是通过restoreCompletedTransactions流程恢复?

这里的应用程序是签名的 生产环境 分发,使用沙箱用户进行测试 .

1)在应用程序启动时,我们在支付队列中注册:

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];

2)没有交易报告通过

updatedTransactions:(NSArray *)transactions

3)我们向沙箱提交新购买,购买正常

[[SKPaymentQueue defaultQueue] addPayment:payment]

然后弹出作为唯一的交易

updatedTransactions:(NSArray *)transactions

4)我们检索付款收据并将此交易发送到要验证的服务器

我们只支持ios8:

NSBundle* mainBundle = [NSBundle mainBundle];
NSURL* appStoreReceiptURL = [mainBundle appStoreReceiptURL];
receipt = [NSData dataWithContentsOfURL:appStoreReceiptURL];

现在......在验证我们服务器上的收据时,我们看到两次购买,尽管我们只要求购买一次:

AppleAppReceiptValidationResult(0,AppleAppPurchaseReceipt(com.myapp,0,0,1375340400000,1.19.0.7787,AppleInAppPurchaseReceipt(1,premium_pack_5,1000000151522392,1000000151522392,1429191268000,2015-04-13 14:44:43 Etc / GMT),AppleInAppPurchaseReceipt( 1,premium_pack_5,1000000152000706,1000000152000706,1429191268000,2015-04-16 13:34:28 Etc / GMT)))

[请注意,我们甚至设法为同一个SKU获得两笔交易,我认为这不应该是可能的]

5)然后ios客户端完成新的购买交易:

[[SKPaymentQueue defaultQueue] finishTransaction:toFinish];

所以这里有一个问题,因为我们没有处理旧事务,因为它没有从SKPaymentQueue addTransactionObserver恢复,所以我们似乎无法完成它 .

任何关于如何在PayQueue中没有出现交易时完成此交易的想法?

我们试过了

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]

但是这不会清除或报告队列中的交易,并且它将继续保留在所有未来的购买收据中 .