应用内购买验证收据错误
Posted
技术标签:
【中文标题】应用内购买验证收据错误【英文标题】:in-app purchase verify receipt error 【发布时间】:2012-02-25 11:58:07 【问题描述】:我创建了一个使用应用内购买的应用。使用我的测试用户帐户进行测试时交易已成功完成,但在沙箱中验证收据时出现错误:url:https://sandbox.itunes.apple.com/verifyReceipt
- (void)recordTransaction:(SKPaymentTransaction *)transaction
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
if ([transaction.payment.productIdentifier isEqualToString:@"com.udayKalangi.hansiMazak.hindijokes1"])
[[NSUserDefaults standardUserDefaults] setValue:transaction.transactionReceipt forKey:@"proUpgradeTransactionReceipt" ];
[[NSUserDefaults standardUserDefaults] synchronize];
NSData *receiptData = [NSData dataWithData:transaction.transactionReceipt];
NSString *recieptString = [self base64forData:receiptData];
NSLog(@"JSON Created");
urlData = [[NSMutableData data] retain];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://sandbox.itunes.apple.com/verifyReceipt"]];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:[recieptString dataUsingEncoding:NSUTF8StringEncoding]];
NSLog(@"will create connection");
[[NSURLConnection alloc] initWithRequest:request delegate:self];
我收到了回复:
url 数据:"status":21002, "exception":"java.lang.NullPointerException"
【问题讨论】:
【参考方案1】:对不起,你做错了。
首先,根据http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/VerifyingStoreReceipts/VerifyingStoreReceipts.html,您需要将base64收据数据设置为'receipt-data',然后以JSON格式发布以进行验证。你似乎没有这样做。
但最重要的是,您并不是要在设备上验证收据,这样做毫无意义。您的目的是将数据发送到您的服务器,并让它与 Apple 为您验证数据。在设备上进行验证实际上并不提供任何验证。验证收据的目的是确保它没有被篡改,即,如果有人破坏了您的应用并能够提供篡改的收据,他们就能够绕过对同一张收据的验证。
【讨论】:
设备上的验证如何没有帮助?用苹果服务器验证还是用你自己的服务器用苹果验证有什么区别?它仍在应用中完成。 正是因为这个原因:tuaw.com/2012/07/13/… 在这种情况下,黑客已将来自 Apple 服务器的请求从设备重定向到他们自己的服务器。所以他们也可以提供假收据。但是,如果您在自己的服务器上验证收据,黑客就无法重定向或更改您服务器的配置,因此您知道您(很可能)确实获得了 Apple 的服务器并且可以信任收据验证。 确保您也将加密签名的“是”或“否”发送回您的应用程序,否则黑客也可以将设备重定向到您的服务器之外。以上是关于应用内购买验证收据错误的主要内容,如果未能解决你的问题,请参考以下文章
Firebase Firestore +云功能服务器端验证应用内购买收据(Swift + NodeJS)
Firebase Firestore + Cloud Function 服务器端验证应用内购买收据(Swift + NodeJS)