在iPhone 4 / iOS 4设备上,沙盒App Store在验证过程中报告此错误。
21002:receipt-data属性中的数据格式不正确。
在iPhone 5 / iOS 6设备上,相同的代码可以正常工作(状态== 0,收到回执),没有任何问题。
我重新启动了设备,确保Apple ID已注销,甚至创建了一个新的测试用户帐户。结果相同。
有什么想法吗?
答案 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的官方页面上查看此信息。