应用内购买验证收据错误

3

我创建了一个使用应用内购买的应用程序。在使用测试用户帐户进行测试时,交易成功完成,但是在沙箱中验证收据时出现错误: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"}

该错误信息表明在Java代码中发生了空指针异常。
1个回答

0

抱歉,但您做错了。

首先,根据http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/VerifyingStoreReceipts/VerifyingStoreReceipts.html的说明,您需要将base64收据数据设置为“receipt-data”,然后以JSON格式进行验证。看起来您没有这样做。

但最重要的是,您不应该在设备上验证收据,这样做是毫无意义的。您应该将数据发送到您的服务器,并让它代表您与苹果验证数据。在设备上进行验证实际上并没有提供任何验证。验证收据的目的是确保它没有被篡改,即如果有人破坏了您的应用程序并能够提供篡改的收据,他们就能够规避同一收据的验证。


设备上的验证为什么没有帮助?与使用苹果服务器或自己的服务器进行验证有什么区别?验证仍然是通过应用程序完成的。 - Maciej Swic
正是出于这个原因:http://www.tuaw.com/2012/07/13/russian-hacker-circumvents-ios-in-app-purchases/在这种情况下,黑客将设备上的请求从苹果服务器重定向到自己的服务器。因此,他们可以提供虚假的收据。但是,如果您在自己的服务器上验证收据,黑客就无法重定向或更改您服务器的配置,因此您知道您(很可能)真正获得了苹果的服务器,并且可以信任收据验证。 - Dave Wood
确保你也发送一个使用加密签名的“是”或“否”回到你的应用程序中,不然黑客也可以将设备重定向到他们自己的服务器上。 - Dave Wood

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接