在我们针对沙箱的购买测试期间,我们有一个设备似乎已在大型统一收据中购买了未能在付款队列中恢复的购买,因为我们无法在队列中看到它#39;完成它,但它们继续出现在我们在服务器上验证的苹果收据中,无限期地指示付款到期。我们如何完成对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]
但是这并不清除或报告队列中的交易,并且它将继续保留在所有未来的购买收据中。