0

I've constanty getting 21002 error (malformed) while trying to check app receipt. But checking transaction receipt using the same php code works ok.

in Xamarin C# (the same code as in objective-C) in RestoreTransaction callback I get sandbox app receipt:

    NSUrl receiptURL = NSBundle.MainBundle.AppStoreReceiptUrl;
    NSData receipt = NSData.FromUrl(receiptURL);
    String receiptData = receipt.GetBase64EncodedString(NSDataBase64EncodingOptions.None);
    sendToBackend(receiptData);

php:

    $endpoint = 'https://sandbox.itunes.apple.com/verifyReceipt';
    //$app_rec_data is receiptData from C#, it is base64 encoded
    $receipt = json_encode(["receipt-data" => $app_rec_data]); 
    $ch = curl_init($endpoint);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $receipt);
    $response = curl_exec($ch);
    curl_close($ch);
    echo $response;

Prior 7.0 style transaction receipt:

    public async void CompleteTransaction(SKPaymentTransaction transaction)
    {
        var receipt = transaction.TransactionReceipt.GetBase64EncodedString(NSDataBase64EncodingOptions.None);
        sendToBackend(receiptData);
    }

With the same php code Apple returns success. I've spend the whole day reading here on SO and in Apple docs, but everything looks ok, but new app receipts always returns 21002.

Tertium
  • 6,049
  • 3
  • 30
  • 51

1 Answers1

0

There was a problem in Visual Studio output. App receipt was really malformed.

Tertium
  • 6,049
  • 3
  • 30
  • 51