我正在使用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作为回应。所以我错过了一些东西。
答案 0 :(得分:1)
收据未存储在纯文本JSON中。
它实际上是PKCS7编码容器的格式,它是一种基于旧时电信编码格式ASN.1的二进制格式。
我无法向您指出任何示例,因为没有人分享他们的代码来解码容器。开发人员不愿意共享他们的代码,因为Apple指出,如果许多应用程序共享类似的代码来处理IAP,单个安全漏洞不仅会威胁到一个,而且会威胁到许多应用程序。
有一个WWDC演示文稿:“WWDC 2013:使用收据来保护您的数字销售”,他们提供了一些如何入门的建议,还有一个文档:Xcode文档中的“收据验证编程指南”。
阅读那些,然后谷歌了解相关术语,你应该找到足够的点点滴滴来组装解决方案。