【问题标题】:Accesing JSON response data via PHP通过 PHP 访问 JSON 响应数据
【发布时间】:2014-01-08 01:47:12
【问题描述】:

我正在使用 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 as $value) { var_dump($value); } 也没有返回任何内容

救命!

【问题讨论】:

  • 发布你的 foreach 循环和 json 到对象的转换代码。另外我会建议您将 json 对象转换为数组而不是对象。
  • @Rikesh 我已经用我尝试过的示例更新了问题

标签: php paypal json


【解决方案1】:

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

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

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

【讨论】:

【解决方案2】:

事实证明,这不是标准的 JSON 格式。出于某种原因,Paypal API SDK 通过这一行以自己的“json”格式返回它

$ret->fromJson($json);
return $ret;

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

return $json;

这花了我一整天的时间!噗……

【讨论】:

    【解决方案3】:

    你也可以使用

    $response->toJSON();
    

    那么你可以使用

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 我尝试对响应进行 json_decode,但它返回 NULL。是不是因为这不是正确的 JSON 格式?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-23
      • 2012-02-28
      • 1970-01-01
      • 2017-12-15
      相关资源
      最近更新 更多