我正在使用Apples IAP和StoreKit框架来购买订阅的客户端/服务器应用程序。 我们希望客户(iPhone或iPad)通过使用StoreKit框架的iTunes帐户与苹果进行初始订购,然后将收据传递给我们的服务器,这将validation它,然后更新用户帐户状态。 我们还希望服务器负责pipe理订阅的状态(检查自动更新,取消等)。这些都是使用iOS 7风格的appleReceipts,而不是当前已弃用的iOS 6风格的交易收据。 苹果公司的文件说,张贴到以下url,以validation沙箱中的收据以及收据和密码 https://sandbox.itunes.apple.com/verifyReceipt 到目前为止,所有事情都应该如此。 在那里,让我感到困惑的是在回应中。 苹果公司的文件说,应答应该有多达4个字段。 如果您正在validationiOS 7样式的应用收据,那么您只应该预期前两个。如果是iOS 6样式的订阅交易收据,那么您应该期望看到所有4个。 1)状态(0为有效,否则为一些错误代码) 2)收据(发送的收据的JSON表示) 3)latest_receipt(仅针对自动更新订阅的iOS 6样式事务回执返回,最近更新的基于64编码的事务回执。 4)latest_receipt_info(与JSON格式相同) 问题1:即使我正在validationiOS 7样式的应用收据,我也看到了所有4个。 文档说,不应该发生。 https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html#//apple_ref/doc/uid/TP40010573-CH104-SW1 问题2:我们希望通过使用客户在初次购买后通过的原始应用收据来轮询该API来维护用户订阅状态。 latest_receipt_info字段似乎包含不断更新的事务列表,而receipt字段是原始副本,没有更新的事务信息。 我的问题:似乎服务器可以获取更新事务信息的唯一方法是查看latest_receipt_info或latest_receipt字段,但根据文档,这些字段不应出现在响应中。 这是苹果文档中的错误吗? 或者,获取最新一组事务的唯一方法是让客户端在SKPayementTransactionObserver得到通知时发送更新的SKPayementTransactionObserver ? 编辑 – 根据下面的评论添加步骤和一些代码。 1)使用SKPaymentQueue购买autoRenewSubscription产品: SKMutablePayment *payment = [SKMutablePayment paymentWithProduct:product]; payment.applicationUsername = [self hashedValueForAccountName:[UserAccount sharedInstance].subscriberKey]; [[SKPaymentQueue defaultQueue] addPayment:payment]; 2)付款完成后,我通过SKPaymentTransactionObserver接到回电,并通过以下URL发送文件: NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL]; 到我的远程服务器。 3)我正在使用下面的Python代码来validation收据 […]
transactionReceipt已被弃用。 但我无法使用, [[NSBundle mainBundle] appStoreReceiptURL]. 这应该是返回一个url到收据,如果有的话。 但对于我来说,没有一个,因为这个价值是零,据我所知不应该是。 我在iOS 7上运行,并做了一些应用内购买(设备上的沙箱)。 任何人都可以帮忙