【问题标题】:Remote verify ios 7.0+ app receipt returns 21002, but works with transaction receipts远程验证 ios 7.0+ 应用收据返回 21002,但适用于交易收据
【发布时间】:2016-08-21 16:46:58
【问题描述】:

我在尝试检查应用收据时经常收到 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);
    }

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-26
      • 1970-01-01
      • 2021-01-10
      • 2014-09-20
      • 2016-02-13
      • 1970-01-01
      • 2019-12-18
      • 1970-01-01
      相关资源
      最近更新 更多