3

iPhone 4 / iOS 4デバイスでは、sandboxAppStoreが検証中にこのエラーを報告しています。

21002:recipient-dataプロパティのデータの形式が正しくありませんでした。

iPhone 5 / iOS 6デバイスでは、同じコードが問題なく機能します(ステータス== 0、レシートが返されます)。

デバイスを再起動し、Apple IDがログアウトされていることを確認し、新しいテストユーザーアカウントを作成しました。同じ結果。何か案は?

4

2 に答える 2

4

このエラーは、検証のために送信するために作成したJSONオブジェクトが正しい形式ではないことを意味します。

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

したがって、私の提案は、iPhone 4 / iOS 4で同じものをデバッグすることです。JsonFrameworkを使用してJSONオブジェクトを作成している場合(受信確認用)、iOS5.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 に答える