1

私はストライプから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);

何か案は?

4

2 に答える 2

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 以降でのみ使用できます。

于 2012-05-08T20:53:37.120 に答える
1

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

"name=ok&submit=submit"

これはJSON ではないため、期待どおりに JSON としてデコードされません。デコードできない場合、json_decode()関数はnullを返します。

上で投稿した JSON はどこで入手できますか? これは、 に渡す必要がある値ですjson_decode()

コールバックのインスタンスのように、リクエストで JSON が渡されている場合でも、その部分を解析して JSON だけを取得する必要があります。php://inputストリームがname=ok&submit=submit&json={"created": 1326853478}を与える場合、それを解析する必要があります。PHP マニュアルのこの関数を使用して、値を分離して$_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);
于 2012-05-08T20:56:42.043 に答える