StoreKIt验证错误:21002

时间:2012-12-05 05:52:34

标签: ios testing app-store storekit

在iPhone 4 / iOS 4设备上,沙盒App Store在验证过程中报告此错误。

  

21002:receipt-data属性中的数据格式不正确。

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

我重新启动了设备,确保Apple ID已注销,甚至创建了一个新的测试用户帐户。结果相同。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

此错误表示您创建的要发送以进行验证的JSON对象格式不正确。

{     "收据数据" :"(此处为收据字节)" }

所以我的建议是在iPhone 4 / iOS 4上进行相同的调试。如果你正在使用Json Framework来创建JSON对象(用于收据验证),它只适用于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];`

答案 1 :(得分:1)

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

对于实际验证使用:https://buy.itunes.apple.com/verifyReceipt

您可以在Apple的官方页面上查看此信息。