Преобразование ответа Stripe API в JSON с использованием библиотеки stripe-php
Я получаю доступ к данным клиентов из Stripe API, который я хочу преобразовать в 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
(
)
)
Любая помощь с благодарностью!
4 ответа
Все объекты, созданные библиотекой API Stripe PHP, можно преобразовать в 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
, вы можете сделать это:
$customer->default_card->last4;
Тем не менее, вам нужно убедиться, что у вас есть default_card
атрибут заполнен. Вы можете получить default_card
объект в то же время, что и остальная часть клиента, передавая expand
аргумент:
$customer = Stripe_Customer::retrieve(array(
"id" => "cus_2dVcTSc6ZtHQcv",
"expand" => array("default_card")
));
В последней версии вы можете использовать echo $customer->toJSON();
чтобы получить результат в формате JSON.
Stripe::setApiKey("sk_xxxxxxxxxxxxxxxxxxxxxxxxx");
$stripe_response= Stripe_Customer::create(array(
"card" => $token,
"plan" => $plan,
));
//Encoding stripe response to json
$resposnse_json_ecoded= json_encode($stripe_response);
//decoding ecoded respose
$response_decoded = json_decode($resposnse_json_ecoded, true);
//get data in first level
$account_id=$response_decoded['id'];
$individual = $response_decoded['individual'];
//get data in second level
$person_id=$individual['id'];
Если, как и я, вы пришли сюда в поисках python 2.7
решение, просто введите stripe_object
к str()
. Это вызывает внутренний__str__()
функция, преобразующая объект в строку JSON.
Например
charge = stripe.Charge....
print str(charge)
Ваш объект верхнего уровня содержит другие экземпляры объекта - приведение к (массиву) влияет только на элемент верхнего уровня. Возможно, вам придется рекурсивно пройтись вниз - но я бы сделал это иначе, учитывая, что классы сериализуемы:
$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(), просто передайте его в ваш скрипт