我创建了一个使用应用内购买的应用。使用我的测试用户帐户进行测试时成功完成了Transtactions,但是当我在沙箱中验证收据时出现错误: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 data:{“status”:21002,“exception”:“java.lang.NullPointerException”}
答案 0 :(得分:0)
很抱歉,但你做错了。
首先,根据http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/VerifyingStoreReceipts/VerifyingStoreReceipts.html,您需要将base64收据数据设置为“收据数据”,然后以JSON格式发布以进行验证。你似乎没有这样做。
但最重要的是,你并不是要验证设备上的收据,这样做毫无意义。您的意思是将数据发送到您的服务器,并让它为您验证Apple的数据。在设备上进行验证实际上并未提供任何验证。验证收据的目的是确保收据没有被篡改,即,如果有人妥协您的应用程序并且能够提供篡改的收据,他们就能绕过相同收据的验证。