【问题标题】:What should the transactionReceipt verification json look like?transactionReceipt 验证 json 应该是什么样的?
【发布时间】:2010-07-08 13:56:00
【问题描述】:

我正在尝试使用 php 和 cURL 验证 https://sandbox.itunes.apple.com/verifyReceipt 的沙盒 transactionReceipt。

到达我的服务器时的原始收据如下所示:

{ "signature" = "AksOP5dmXwg 9WjlcE7PwBEFZgcqBnIb0Uv2lSKebWJJpcOZQRL6ejYyv20MzPFDSgAj3GRGoJXWZpyJLAU8qZSQFYQeGljWKZd3XTJN4j1E7fqOQRBdIXSDRJr1phB/11xp smk6m ... dgcxRHuOMZ2tm8npLUm7argOSzQ=="; "purchase-info" = "ewoJIml0ZW0taWQiID0gIj ... jAiOwp9"; "pod" = "100"; "signing-status" = "0"; }

1.它应该有等号和分号吗?

将其包装起来以便在我使用的 cURL 中传输:

$receipt = json_encode(array("receipt-data" => base64_encode($transactionReceipt)));

给出:

{"receipt-data":"ewoJInNpZ25hdHVyZSIgPSAiQ ... <lots more of the same> ... XR1cyIgPSAiMCI7Cn0="} 

这会导致:{"status":-42023} 来自 Apple

如果我使用:

$receipt = json_encode(array("receipt-data" => $transactionReceipt));

给出:

{"receipt-data":"{\n\t\"signature\" = \"AksOP5dmXwg 9WjlcE7PwBEFZgcqBnIb0Uv2lSKebWJJpcOZQRL6ejYyv20MzPFDSgAj3GRGoJXWZpyJLAU8qZSQFYQeGljWKZd3XTJN4j1E7fqOQRBdIXSDRJr1phB\/11xp smk6m ... dgcxRHuOMZ2tm8npLUm7argOSzQ==\";\n\t\"purchase-info\" = \"ewoJIml0ZW0taWQiID0gIjM3NTgyNzIyOCI7Cgkib3JpZ2luYWwtdHJhbnNhY3Rpb24taWQiID0gIjEwMDAwMDAwMDA1ODQyNDIiOwoJInB1cmNoYXNlLWRhdGUiID0gIj ... jAiOwp9\";\n\t\"pod\" = \"100\";\n\t\"signing-status\" = \"0\";\n}"}

我得到:{"status":21002, "exception":"java.lang.IllegalArgumentException: 尝试读取未加引号的字符串时属性列表解析失败。未找到允许的字符。行号:1,列:0。"}

2.谁能告诉我收据数据 json 应该是什么样子?

谢谢!

【问题讨论】:

    标签: app-store in-app-purchase


    【解决方案1】:

    我因同样的问题用头撞墙...检查一下:

    $dataToPost = json_encode(array("receipt-data" => $receivedData));
    

    其中 $receivedData 是收据 base64 编码。

    然后:

    $opts = array('http' =>
        array(
            'method'  => 'POST',
            'header'  => 'Content-type: application/x-www-form-urlencoded',
            'content' => $dataToPost
        )
    );
    
    $context  = stream_context_create($opts);
    $result = file_get_contents('https://sandbox.itunes.apple.com/verifyReceipt', false, $context);
    

    它对我有用...试一试并告诉我!

    【讨论】:

    • 感谢您的回复。不幸的是,这仍然给了我来自苹果的 {"status":-42023} 响应,所以可能是原始交易收据有问题 - 而不是将其发布给 Apple 的代码。您是否有机会发布对您有用的 $receivedData 值,或者至少是摘录?只是为了检查格式...
    • 这是一个有效的收据的摘录:“ewoJInNpZ25hdHVyZSIgPSAiQXE1SW5wa2FoMmpUVmFtVDIyeE44RnNxNFFOaHdr \ r \ nbFkvWUxNRDBiSi9BRG1 ... 0d0lqc0tmUT09IjsKCSJwb2QiID0gIjEwMCI7Cgkic2lnbmlu \ r \ nZy1zdGF0dXMiID0gIjAiOwp9”我可以向您发送一封电子邮件,完整的收据,如果你想...
    • 我想我的代码的唯一区别是我在设备上进行 base64 编码,我的服务器端页面接收它,将其编码为 JSON 并将其发送给 Apple
    • 嘿阿德里,这真的很有帮助。无需立即发布完整的收据。保留 \r 和 \n 的事实很有趣。嗯,我会尝试在手机上做 base64 并报告!
    • 只是想说谢谢 - 我试图让它工作至少一到两个小时,尝试不同的发布数据的变体,我认为我缺少的关键部分是内容类型:application/x-www-form-urlencoded。非常感谢!
    【解决方案2】:

    这现在对我有用!我的最后一个错误是,在一系列测试和更改中,我实际上修改了收据数据文件。糟糕 :(。我将收据缩进了 4 个字节,以准备向所有内容的 stackoverflow 提交帖子。缩进收据使其无效,也许不足为奇。

    【讨论】:

      猜你喜欢
      • 2011-08-30
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      • 2013-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多