通过PHP访问JSON响应数据

时间:2013-12-19 13:06:58

标签: php paypal json

我正在使用Paypal API PHP REST SDK。我得到了一个看起来像JSON格式的响应,但我无法访问对象和数组中的属性。

如何通过PHP从此JSON响应中访问“状态”属性?响应由Paypal \ Api \ Payment类型的对象包装。 foreach循环返回NULL

var_dump($ response)如下所示:

object(PayPal\Api\Payment)#8 (1) {
  ["_propMap":"PayPal\Common\PPModel":private]=>
  array(8) {
    ["id"]=>
string(28) "PAY-8JC052XXXXKKZMQNQ"
["create_time"]=>
string(20) "2013-12-19T10:19:34Z"
["update_time"]=>
string(20) "2013-12-19T10:20:38Z"
["state"]=>
string(8) "approved"
["intent"]=>
string(4) "sale"
["payer"]=>
object(PayPal\Api\Payer)#33 (1) {
  ["_propMap":"PayPal\Common\PPModel":private]=>
  array(2) {
    ["payment_method"]=>
    string(6) "paypal"
    ["payer_info"]=>
    object(PayPal\Api\PayerInfo)#30 (1) {
      ["_propMap":"PayPal\Common\PPModel":private]=>
      array(5) {
        ["email"]=>
        string(11) "some@email.com"
        ["first_name"]=>
        string(6) "fname"
        ["last_name"]=>
        string(5) "lname"
        ["payer_id"]=>
        string(13) "UAGGF3392CUTG"
        ["shipping_address"]=>
        object(PayPal\Api\Address)#31 (1) {
          ["_propMap":"PayPal\Common\PPModel":private]=>
          array(5) {
            ["line1"]=>
            string(26) "Address"
            ["city"]=>
            string(13) "City"
            ["state"]=>
            string(8) "State"
            ["postal_code"]=>
            string(5) "000000"
            ["country_code"]=>
            string(2) "US"
          }
        }
      }
    }
  }
}
["transactions"]=>
array(1) {
  [0]=>
  object(PayPal\Api\Transaction)#34 (1) {
    ["_propMap":"PayPal\Common\PPModel":private]=>
    array(4) {
      ["amount"]=>
      object(PayPal\Api\Amount)#35 (1) {
        ["_propMap":"PayPal\Common\PPModel":private]=>
        array(3) {
          ["total"]=>
          string(4) "1.00"
          ["currency"]=>
          string(3) "USD"
          ["details"]=>
          object(PayPal\Api\Details)#36 (1) {
            ["_propMap":"PayPal\Common\PPModel":private]=>
            array(1) {
              ["subtotal"]=>
              string(4) "1.00"
            }
          }
        }
      }
      ["description"]=>
      string(33) "Item name: 1"
      ["item_list"]=>
      object(PayPal\Api\ItemList)#37 (1) {
        ["_propMap":"PayPal\Common\PPModel":private]=>
        array(1) {
          ["items"]=>
          array(1) {
            [0]=>
            object(PayPal\Api\Item)#38 (1) {
              ["_propMap":"PayPal\Common\PPModel":private]=>
              array(4) {
                ["name"]=>
                string(20) "Item name"
                ["price"]=>
                string(4) "1.00"
                ["currency"]=>
                string(3) "USD"
                ["quantity"]=>
                string(1) "1"
              }
            }
          }
        }
      }
      ["related_resources"]=>
      array(1) {
        [0]=>
        object(PayPal\Api\RelatedResources)#40 (1) {
          ["_propMap":"PayPal\Common\PPModel":private]=>
          array(1) {
            ["sale"]=>
            object(PayPal\Api\Sale)#42 (1) {
              ["_propMap":"PayPal\Common\PPModel":private]=>
              array(7) {
                ["id"]=>
                string(17) "5DH04XXX63X"
                ["create_time"]=>
                string(20) "2013-12-19T10:19:34Z"
                ["update_time"]=>
                string(20) "2013-12-19T10:20:38Z"
                ["state"]=>
                string(9) "completed"
                ["amount"]=>
                object(PayPal\Api\Amount)#44 (1) {
                  ["_propMap":"PayPal\Common\PPModel":private]=>
                  array(2) {
                    ["total"]=>
                    string(4) "1.00"
                    ["currency"]=>
                    string(3) "USD"
                  }
                }
                ["parent_payment"]=>
                string(28) "PAY-8JC05XXXXKZMQNQ"
                ["links"]=>
                array(3) {
                  [0]=>
                  object(PayPal\Api\Links)#46 (1) {
                    ["_propMap":"PayPal\Common\PPModel":private]=>
                    array(3) {
                      ["href"]=>
                      string(65) "https://api.sandbox.paypal.com/v1/payments/sale/5DHXX91763X"
                      ["rel"]=>
                      string(4) "self"
                      ["method"]=>
                      string(3) "GET"
                    }
                  }
                  [1]=>
                  object(PayPal\Api\Links)#47 (1) {
                    ["_propMap":"PayPal\Common\PPModel":private]=>
                    array(3) {
                      ["href"]=>
                      string(72) "https://api.sandbox.paypal.com/v1/payments/sale/5DHXXA691763X/refund"
                      ["rel"]=>
                      string(6) "refund"
                      ["method"]=>
                      string(4) "POST"
                    }
                  }
                  [2]=>
                  object(PayPal\Api\Links)#48 (1) {
                    ["_propMap":"PayPal\Common\PPModel":private]=>
                    array(3) {
                      ["href"]=>
                      string(79) "https://api.sandbox.paypal.com/v1/payments/payment/PAY-8JC052914XX1034SKKZMQNQ"
                      ["rel"]=>
                      string(14) "parent_payment"
                      ["method"]=>
                      string(3) "GET"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
["links"]=>
array(1) {
  [0]=>
  object(PayPal\Api\Links)#49 (1) {
    ["_propMap":"PayPal\Common\PPModel":private]=>
    array(3) {
      ["href"]=>
      string(79) "https://api.sandbox.paypal.com/v1/payments/payment/PAY-8JC0XX914D601034SKKZMQNQ"
      ["rel"]=>
      string(4) "self"
      ["method"]=>
      string(3) "GET"
    }
  }
}
  }
}

我尝试了json_decode($ response),但它返回NULL,所以我认为这已经是正确的JSON格式了。

我尝试了echo $ response-> id并返回空白

我也尝试了foreach的多种变体($ response-> id为$ value){var_dump($ value);这也没有返回任何东西

帮助!

4 个答案:

答案 0 :(得分:2)

如果仅使用 json_decode($ result),则不会将整个对象转换为数组。 所以只需使用

$result=json_decode($result, true, 512);

它将递归地将所有对象转换为关联数组。 试试吧。它对我有用。

答案 1 :(得分:1)

事实证明,这不是标准的JSON格式。出于某种原因,Paypal API SDK通过此行

以自己的“json”格式返回它
$ret->fromJson($json);
return $ret;

我只是跳过它并返回$ json,它给了我可以放入json_decode进行进一步处理的格式。

return $json;

那花了我一整天! PFF ...

答案 2 :(得分:1)

您也可以使用

$response->toJSON();

然后你可以使用

$result = json_decode($response);
echo ($result->state);

答案 3 :(得分:0)

将json转换为字符串,然后将内容存储在数组中(使用json_decode对其进行解码)。