2012-05-08 11 views
1

私はストライプからjsonを持っており、json_decodeをデコードしようとしています。json_decodeが動作していないストライプjsonをデコードしています

エラーは表示されません。ちょうど何も戻っていない。私はストライプからデータを戻しています。私はそれをデコードできません。

{ 
    "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); 

任意のアイデア?

+5

うん。エラーメッセージを隠している文字を削除します。 –

+0

Igancioは '@ '文字を参照しています。 – Hamish

+0

また、 'json_last_error()'やhttp://jsonlint.com/で確認すると、そこにUTF-8 BOMがあるかもしれません。 – mario

答えて

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

?> 

をイグナシオ・バスケス - エイブラムスが、それはエラーメッセージを不明瞭にし、デバッグに難しくなりますので、「@」文字を使用しない、言ったように:だから、理論的にはあなたが使用することができるはずです。

ご存知のPHPのバージョンも確認します。 json_decode()は、バージョン5.2.0以降でのみ使用できます。

1

php://inputストリームでは、リクエスト本体から生データを読み取ることができます。このデータは文字列になり、要求している値の種類をに応じて、のようなものになります。

"name=ok&submit=submit" 

をこれはJSON ないであるため、JSONとしてあなたがexpect.The道をデコードしません。 json_decode()関数は、復号化できない場合は、nullを返します。

上記のJSONはどこで手に入りますか?それはjson_decode()に渡す必要がある値です。

コールバックのインスタンスのようにリクエストでJSONが渡されている場合でも、JSONだけを取得するには、その部分を解析する必要があります。 php://inputストリームの場合名前= ok & submit = submit & json = {"created":1326853478}あなたはそれを解析する必要があります。これを使用するに

<?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配列のように動作するように値を区切るためにPHPマニュアルからthis functionを使用することができます

$post = getRealPOST(); 
$stripe_json = $post['json']; 
$event_json = json_decode($stripe_json); 
関連する問題