0

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

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

4

1 回答 1

1

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

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

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

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

阅读这些,然后谷歌搜索相关术语,你应该找到足够的零碎来组装一个解决方案。

于 2015-04-02T23:42:10.267 回答