3

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

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

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

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

4

2 回答 2

4

此错误表示您创建用于发送验证的 JSON 对象格式不正确。

{
    "receipt-data" : "(receipt bytes here)"
}

所以我的建议是在 iPhone 4/iOS 4 上进行相同的调试。如果您使用 Json 框架创建 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];`
于 2012-12-05T06:23:14.660 回答
1

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

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

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

于 2013-03-02T07:19:25.740 回答