StoreKit verification error 21002: The data in the receipt-data property was malformed

10,562

Solution 1

This Error means the JSON Object that you have created to send for verification is not in correct format.

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

So My suggestion is to Debug the same on iPhone 4/iOS 4. In case, you are Using Json Framework to create JSON object (for receipt validation) it will work only with iOS 5.0 & above.

Adding Code I had Implemented a few months I Used SBJson to write N parse.

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];`

Solution 2

For your sandbox environment use: https://sandbox.itunes.apple.com/verifyReceipt

For actual verification use: https://buy.itunes.apple.com/verifyReceipt

You can check this at Apple's official page.

Share:
10,562

Related videos on Youtube

Morrowless
Author by

Morrowless

Yet another developer

Updated on July 07, 2022

Comments

  • Morrowless
    Morrowless almost 2 years

    On a iPhone 4/iOS 4 device, sandbox App Store is reporting this error during verification:

    21002: The data in the receipt-data property was malformed.

    On a iPhone 5/iOS 6 device, the same code works (status == 0, receipt returned) without any problems.

    I've restarted the device, made sure the Apple ID is logged out, even made a new test user account. Same result. Any ideas?