如何在 iOS 中使用测试帐户购买后获取应用收据

How to get app receipt after purchase using test account in iOS

我正在使用 IAP,我想获取收据以便验证它。

我试过了

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
    for (SKPaymentTransaction *transaction in transactions) {


        switch (transaction.transactionState)//Each transaction should be processed by examining transactionState property.
        {
             case SKPaymentTransactionStatePurchased:
            {

                if([transaction.payment.productIdentifier isEqualToString:@"TC0001"])
                {

                }

                **NSData *data = [NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]];

                NSError *error;

                NSDictionary *response = [NSJSONSerialization JSONObjectWithData: data options: 0 error: &error];  //I am using sbjson to parse

                NSLog(@"%@",response);**               


                //Finish transaction deletes the transaction from the default queue
                [[SKPaymentQueue defaultQueue] finishTransaction:transaction];                

            }
                break;                

            default:
                break;
        }
    }
}

我希望我做对了,因为这是文档中提到的。但是我得到“响应为空。所以我错过了一些东西。

收据未以纯文本形式存储 JSON。

它实际上是 PKCS7 编码容器的格式,它是一种基于称为 ASN.1 的旧式电信编码格式的二进制格式。

我无法向您指出任何示例,因为没有人分享他们用于解码容器的代码。开发人员不愿意共享他们的代码,因为 Apple 指出,如果许多应用程序共享处理 IAP 的相似代码,那么单个安全漏洞不仅会威胁到一个应用程序,而且会威胁到许多应用程序。

有一个 WWDC 演示:"WWDC 2013: Using Receipts to Protect Your Digital Sales" 他们在其中提供了一些关于如何开始的建议,还有一个文档:"Receipt Validation Programming Guide" 在 Xcode 文档中。

阅读这些内容,然后 Google 了解相关术语,您应该找到足够的点点滴滴来 assemble 解决方案。