远程验证ios 7.0+应用程序收据返回21002,但适用于交易收据

时间:2016-08-21 16:46:58

标签: ios in-app-purchase receipt-validation

在尝试检查应用收据时,我经常遇到21002错误(格式错误)。但是使用相同的PHP代码检查交易收据就可以了。

在Xamarin C#中(与objective-C中的代码相同)在RestoreTransaction回调中我获得了沙箱应用程序收据:

    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;

之前的7.0格式交易收据:

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

使用相同的PHP代码Apple返回成功。 我花了整整一天在这里阅读SO和Apple文档,但一切看起来都不错,但新的应用程序收据总是返回21002。

1 个答案:

答案 0 :(得分:0)

Visual Studio输出中存在问题。应用收据确实格式不正确。