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

时间:2015-03-30 08:35:21

标签: ios in-app-purchase receipt receipt-validation

我正在使用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;
        }
    }
}

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

1 个答案:

答案 0 :(得分:1)

收据未存储在纯文本JSON中。

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

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

有一个WWDC演示文稿:“WWDC 2013:使用收据来保护您的数字销售”,他们提供了一些如何入门的建议,还有一个文档:Xcode文档中的“收据验证编程指南”。

阅读那些,然后谷歌了解相关术语,你应该找到足够的点点滴滴来组装解决方案。