transactionReceipt验证json应该是什么样的?

时间:2010-07-08 13:56:00

标签: app-store in-app-purchase

我正在尝试使用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="} 

这会导致: {“状态”: - 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应该是什么样的?

谢谢!

2 个答案:

答案 0 :(得分:5)

我正用撞击墙壁撞击同样的问题......检查一下:

$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);

它对我有用...试一试让我知道!

答案 1 :(得分:0)

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