我有来自条纹的json,我正在尝试将其解码为json_decode。
我没有收到错误。什么都没有回来。我从条带中获取数据,我只是无法解码它。
{
"created":1326853478,
"data":{
"object":{
"amount":4500,
"card":{
"country":"US",
"cvc_check":"pass",
"exp_month":7,
"exp_year":2014,
"fingerprint":"9aQtfsI8a17zjEZd",
"id":"cc_00000000000000",
"last4":"9782",
"object":"card",
"type":"Visa"
},
"created":1322700852,
"currency":"usd",
"disputed":false,
"fee":0,
"id":"ch_00000000000000",
"livemode":false,
"object":"charge",
"paid":true,
"refunded":true
}
},
"id":"evt_00000000000000",
"livemode":false,
"type":"charge.refunded"
}
// retrieve the request's body and parse it as JSON
$body = @file_get_contents('php://input');
$event_json = json_decode($body,true);
print_r($event_json);
有什么想法吗?
答案 0 :(得分:1)
在这里,我跑了这个:
<?php
$data = '{ "created": 1326853478, "data": { "object": { "amount": 4500, "card": { "country": "US", "cvc_check": "pass", "exp_month": 7, "exp_year": 2014, "fingerprint": "9aQtfsI8a17zjEZd", "id": "cc_00000000000000", "last4": "9782", "object": "card", "type": "Visa" }, "created": 1322700852, "currency": "usd", "disputed": false, "fee": 0, "id": "ch_00000000000000", "livemode": false, "object": "charge", "paid": true, "refunded": true } }, "id": "evt_00000000000000", "livemode": false, "type": "charge.refunded" }';
$arr = json_decode($data, true);
print_r($arr);
?>
它有效。所以,理论上你应该可以使用:
<?php
$arr = json_decode(file_get_contents('php://input'), true);
print_r($arr);
?>
正如Ignacio Vazquez-Abrams所说,不要使用'@'字符,因为它会掩盖错误信息并使调试更加困难。
我还会检查你的PHP版本。 json_decode()仅适用于5.2.0及更高版本。
答案 1 :(得分:1)
php://input
流允许您从请求正文中读取原始数据。此数据将是一个字符串,具体取决于请求中的值类型,如下所示:
"name=ok&submit=submit"
这是不 JSON,因此不会按照您期望的方式解码为JSON。json_decode()
函数如果无法解码则返回 null
你在哪里获得上面发布的JSON?这是您需要传递到json_decode()
的值。
如果在请求中传递JSON,就像在回调实例中一样,您仍然需要解析该部分才能获得JSON。如果php://input
信息流为您提供 name = ok&amp; submit = submit&amp; json = {“created”:1326853478} ,那么您必须解析它。您可以使用PHP手册中的this function来分隔值,使其像$_POST
数组一样工作:
<?php
// Function to fix up PHP's messing up POST input containing dots, etc.
function getRealPOST() {
$pairs = explode("&", file_get_contents("php://input"));
$vars = array();
foreach ($pairs as $pair) {
$nv = explode("=", $pair);
$name = urldecode($nv[0]);
$value = urldecode($nv[1]);
$vars[$name] = $value;
}
return $vars;
}
?>
使用它:
$post = getRealPOST();
$stripe_json = $post['json'];
$event_json = json_decode($stripe_json);