Convertir la réponse de L'API Stripe en JSON en utilisant la bibliothèque stripe-php
j'accède aux données des clients à partir de la Stripe API, que j'aimerais convertir en JSON. Habituellement, je convertirais un objet en tableau et utiliserais json_encode()
mais je ne semble pas en mesure dans ce cas, même en essayant d'accéder aux tableaux imbriqués.
Voici la réponse que j'essaie de convertir en 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
(
)
)
Toute aide grandement appréciée!
4 réponses
tous les objets créés par la bibliothèque D'API Stripe PHP peuvent être convertis en JSON avec leur __ _ toJSON () méthodes.
Stripe::setApiKey("sk_xxxxxxxxxxxxxxxxxxxxxxxxx");
$customer = Stripe_Customer::create(array(
"card" => $token,
"plan" => $plan,
));
$customer_json = $customer->__toJSON();
Il y a aussi un __toArray ($recursive=false) méthode. N'oubliez pas de vrai argument, sinon vous obtiendrez un tableau rempli avec bande objets.
Stripe::setApiKey("sk_xxxxxxxxxxxxxxxxxxxxxxxxx");
$customer = Stripe_Customer::create(array(
"card" => $token,
"plan" => $plan,
));
$customer_array = $customer->__toArray(true);
Les attributs de Stripe_Object
s peut être consulté comme ceci:
$customer->attribute;
alors pour obtenir la carte du client last4
, vous pouvez faire ceci:
$customer->default_card->last4;
Toutefois, vous devrez vous assurer que vous avez le default_card
l'attribut peuplée. Vous pouvez récupérer l' default_card
objet en même temps que le reste de la clientèle en passant par le expand
argument:
$customer = Stripe_Customer::retrieve(array(
"id" => "cus_2dVcTSc6ZtHQcv",
"expand" => array("default_card")
));
votre objet de niveau supérieur contient d'autres instances d'objet - le cast to (array) n'affecte que l'élément de niveau supérieur. Vous pourriez avoir besoin de marcher récursivement vers le bas - mais je le ferais différemment ici étant donné que les classes sont sérialisables:
$transfer = serialize($myobject);
Qu'allez-vous faire avec les données autrement Jsonifiées?
si vous allez transférer un objet sans les informations de classe, vous pourriez essayer D'utiliser la réflexion:
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;
}
}
C'est la classe de base de la plupart des de mes classes transférables. Il crée un objet stdClass à partir d'une classe, ou initialise une classe à partir d'un objet stdClass. Vous pouvez facilement l'adopter à vos propres besoins (par exemple créer un tableau).
C'est déjà dans un format JSON donc vous devez le convertir à nouveau en json_encode() il suffit de passer dans votre script