14

我正在从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

7 回答 7

58

PHP 保留了所有带有双下划线前缀的方法名称以供将来使用。见https://www.php.net/manual/en/language.oop5.magic.php

目前,在最新的 php-stripe 库中,您可以通过简单的调用 **->toJSON() 将 Stripe 对象转换为 JSON。

[之前]

Stripe PHP API 库创建的所有对象都可以使用它们的__toJSON()方法转换为 JSON。

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);
于 2014-12-08T18:39:25.980 回答
4

s的属性Stripe_Object可以这样访问:

$customer->attribute;

因此,要获取客户的卡片last4,您可以这样做:

$customer->default_card->last4;

但是,您需要确保已default_card填充该属性。default_card您可以通过传递expand参数与其他客户同时检索对象:

$customer = Stripe_Customer::retrieve(array(
    "id" => "cus_2dVcTSc6ZtHQcv", 
    "expand" => array("default_card")
));
于 2013-10-16T11:25:57.010 回答
2

在最新版本上,您可以使用echo $customer->toJSON();JSON 格式获取输出。

于 2020-07-10T16:27:35.923 回答
1

我已经这样做了

`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'];`
于 2020-10-11T09:50:48.473 回答
0

如果您像我一样来到这里寻找python 2.7解决方案,只需将stripe_objectto 转换为str(). 这会触发对象的内部__str__()函数,该函数将对象转换为 JSON 字符串。

例如

charge = stripe.Charge....
print str(charge)
于 2019-07-23T16:17:02.217 回答
-1

您的顶级对象包含其他对象实例 - 转换为 (array) 仅影响顶级元素。您可能需要递归地走下去 - 但鉴于这些类是可序列化的,我会在这里做不同的事情:

$transfer = serialize($myobject);

您将如何处理其他 JSON 化的数据?

如果你要传输一个没有类信息的对象,你可以尝试使用反射:

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 对象初始化一个类。你可以很容易地采用它来满足你自己的需要(例如创建一个数组)。

于 2013-10-16T08:44:40.200 回答
-1

这已经是 JSON 格式了,所以您需要将其再次转换为 json_encode() 只需将其传递到您的脚本中

于 2014-06-03T13:11:54.583 回答