StoreKItvalidation错误:21002

在iPhone 4 / iOS 4设备上,沙盒App Store在validation期间报告此错误。

21002:收据数据属性中的数据格式不正确。

在iPhone 5 / iOS 6设备上,相同的代码工作(状态== 0,收据返回)没有任何问题。

我重新启动了设备,确保Apple ID已注销,甚至创build了新的testing用户帐户。 同样的结果。

有任何想法吗?

此错误意味着您创build的用于validation的JSON对象格式不正确。

{“receipt-data”:“(收到字节在这里)”}

所以我的build议是在iPhone 4 / iOS 4上进行相同的debugging。如果您使用Json Framework来创buildJSON对象(用于接收validation),它只能在iOS 5.0及更高版本上使用。

添加代码我已经实现了几个月,我用SBJson写N分析。

`

NSString *base64TxReceiptStr=[NSData Base64Encode:transaction.transactionReceipt]; SBJsonWriter *writer = [[SBJsonWriter alloc] init]; NSDictionary *command = [NSDictionary dictionaryWithObjectsAndKeys: base64TxReceiptStr, @"receipt-data", nil]; NSString *jsonString = [writer stringWithObject:command]; NSData *requestBody=[jsonString dataUsingEncoding:NSUTF8StringEncoding]; NSMutableURLRequest *txReceiptVerificationRequest=[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"https://sandbox.itunes.apple.com/verifyReceipt"]]; [txReceiptVerificationRequest setHTTPBody:requestBody]; [txReceiptVerificationRequest setHTTPMethod:@"POST"]; NSURLResponse *response=nil; NSError *error=nil; NSData *responseData=[NSURLConnection sendSynchronousRequest:txReceiptVerificationRequest returningResponse:&response error:&error]; NSString * receivedString=[[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; SBJsonParser *parser = [[SBJsonParser alloc] init]; NSDictionary *aobject =[parser objectWithString:receivedString];` 

对于您的沙盒环境,请使用: https : //sandbox.itunes.apple.com/verifyReceipt

要进行实际validation,请使用: https : //buy.itunes.apple.com/verifyReceipt

你可以在苹果官方网页查看。