Я получаю данные о клиентах из API-интерфейса Stripe , которые я хотел бы преобразовать в JSON. Обычно я конвертирую объект в массив и использую json_encode()
но в этом случае я не вижу возможности даже при попытке получить доступ к вложенным массивам.
Это ответ, который я пытаюсь преобразовать в json:
Stripe_Customer Object ( [_apiKey:protected] => MY_KEY_IS_HERE [_values:protected] => Array ( [id] => cus_2dVcTSc6ZtHQcv [object] => customer [created] => 1380101320 [livemode] => [description] => Bristol : John Doe [email] => someone6@gmail.com [delinquent] => [metadata] => Array ( ) [subscription] => [discount] => [account_balance] => 0 [cards] => Stripe_List Object ( [_apiKey:protected] => MY_KEY_IS_HERE [_values:protected] => Array ( [object] => list [count] => 1 [url] => /v1/customers/cus_2dVcTSc6ZtHQcv/cards [data] => Array ( [0] => Stripe_Object Object ( [_apiKey:protected] => MY_KEY_IS_HERE [_values:protected] => Array ( [id] => card_2dVcLabLlKkOys [object] => card [last4] => 4242 [type] => Visa [exp_month] => 5 [exp_year] => 2014 [fingerprint] => NzDd6OkHnfElGUif [customer] => cus_2dVcTSc6ZtHQcv [country] => US [name] => John Doe [address_line1] => [address_line2] => [address_city] => [address_state] => [address_zip] => [address_country] => [cvc_check] => pass [address_line1_check] => [address_zip_check] => ) [_unsavedValues:protected] => Stripe_Util_Set Object ( [_elts:Stripe_Util_Set:private] => Array ( ) ) [_transientValues:protected] => Stripe_Util_Set Object ( [_elts:Stripe_Util_Set:private] => Array ( ) ) [_retrieveOptions:protected] => Array ( ) ) ) ) [_unsavedValues:protected] => Stripe_Util_Set Object ( [_elts:Stripe_Util_Set:private] => Array ( ) ) [_transientValues:protected] => Stripe_Util_Set Object ( [_elts:Stripe_Util_Set:private] => Array ( ) ) [_retrieveOptions:protected] => Array ( ) ) [default_card] => card_2dVcLabLlKkOys ) [_unsavedValues:protected] => Stripe_Util_Set Object ( [_elts:Stripe_Util_Set:private] => Array ( ) ) [_transientValues:protected] => Stripe_Util_Set Object ( [_elts:Stripe_Util_Set:private] => Array ( ) ) [_retrieveOptions:protected] => Array ( ) )
Любая помощь очень ценится!
Все объекты, созданные библиотекой API Stripe PHP API, могут быть преобразованы в JSON с помощью методов __toJSON () .
Stripe::setApiKey("sk_xxxxxxxxxxxxxxxxxxxxxxxxx"); $customer = Stripe_Customer::create(array( "card" => $token, "plan" => $plan, )); $customer_json = $customer->__toJSON();
Существует также метод __toArray ($ recursive = false) . Не забудьте установить true как аргумент, иначе вы получите массив, заполненный объектами полосы.
Stripe::setApiKey("sk_xxxxxxxxxxxxxxxxxxxxxxxxx"); $customer = Stripe_Customer::create(array( "card" => $token, "plan" => $plan, )); $customer_array = $customer->__toArray(true);
К атрибутам Stripe_Object
s можно обращаться следующим образом:
$customer->attribute;
Таким образом, чтобы получить last4
карты last4
, вы можете сделать это:
$customer->default_card->last4;
Однако вам нужно убедиться, что вы используете атрибут default_card
. Вы можете получить объект default_card
в то же время, что и остальная часть клиента, передав аргумент expand
:
$customer = Stripe_Customer::retrieve(array( "id" => "cus_2dVcTSc6ZtHQcv", "expand" => array("default_card") ));
Объект верхнего уровня содержит другие экземпляры объекта – метод cast to (array) влияет только на элемент верхнего уровня. Возможно, вам придется рекурсивно спуститься – но я бы сделал это по-другому здесь, учитывая, что классы сериализуемы:
$transfer = serialize($myobject);
Что вы собираетесь делать с другими данными JSonified?
Если вы собираетесь передать объект без информации о классе, вы можете попытаться использовать Reflection:
abstract class Object { /** * initialize an object from matching properties of another object */ protected function cloneInstance($obj) { if (is_object($obj)) { $srfl = new ReflectionObject($obj); $drfl = new ReflectionObject($this); $sprops = $srfl->getProperties(); foreach ($sprops as $sprop) { $sprop->setAccessible(true); $name = $sprop->getName(); if ($drfl->hasProperty($name)) { $value = $sprop->getValue($obj); $propDest = $drfl->getProperty($name); $propDest->setAccessible(true); $propDest->setValue($this,$value); } } } else Log::error('Request to clone instance %s failed - parameter is not an object', array(get_class($this))); return $this; } public function stdClass() { $trg = (object)array(); $srfl = new ReflectionObject($this); $sprops = $srfl->getProperties(); foreach ($sprops as $sprop) { if (!$sprop->isStatic()) { $sprop->setAccessible(true); $name = $sprop->getName(); $value = $sprop->getValue($this); $trg->$name = $value; } } return $trg; } }
Это базовый класс большинства моих переносимых классов. Он создает объект stdClass из класса или инициализирует класс из объекта stdClass. Вы можете легко принять это для своих нужд (например, создать массив).
Это уже в формате JSON, поэтому вам нужно снова преобразовать его в json_encode (), просто передайте его в свой скрипт