应用内购买验证收据错误

时间:2012-02-25 11:58:08

标签: iphone ios in-app-purchase

我创建了一个使用应用内购买的应用。使用我的测试用户帐户进行测试时成功完成了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”}

1 个答案:

答案 0 :(得分:0)

很抱歉,但你做错了。

首先,根据http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/VerifyingStoreReceipts/VerifyingStoreReceipts.html,您需要将base64收据数据设置为“收据数据”,然后以JSON格式发布以进行验证。你似乎没有这样做。

但最重要的是,你并不是要验证设备上的收据,这样做毫无意义。您的意思是将数据发送到您的服务器,并让它为您验证Apple的数据。在设备上进行验证实际上并未提供任何验证。验证收据的目的是确保收据没有被篡改,即,如果有人妥协您的应用程序并且能够提供篡改的收据,他们就能绕过相同收据的验证。