【问题标题】:Parsing Output from Stripe_Charge Stripe Payments解析 Stripe_Charge Stripe Payments 的输出
【发布时间】:2013-10-13 16:24:04
【问题描述】:

以下输出是调用var_export($charge)的结果;

如何从$charge 访问'paid'=>true 的输出?任何想法将不胜感激。

我尝试过$charge->_values->paid$charge->paid 等。我没有运气。

我也试过$charge['_values']['paid'];

Stripe_Charge::__set_state(array(
   '_apiKey' => 'sk_test_BPZyFpcAM',
   '_values' => 
  array (
    'id' => 'ch_102kMF29T6',
    'object' => 'charge',
    'created' => 1381688,
    'livemode' => false,
    'paid' => true,
    'amount' => 104000,
    'currency' => 'usd',
    'refunded' => false,
    'card' => 
    Stripe_Card::__set_state(array(
       '_apiKey' => 'sk_test_BPZyFpc',
       '_values' => 
      array (
        'id' => 'card_102kMF29T6',
        'object' => 'card',
        'last4' => '4242',
        'type' => 'Visa',
        'exp_month' => 2,
        'exp_year' => 2015,
        'fingerprint' => '7sRY4jiFM',
        'customer' => NULL,
        'country' => 'US',
        'name' => NULL,
        'address_line1' => NULL,
        'address_line2' => NULL,
        'address_city' => NULL,
        'address_state' => NULL,
        'address_zip' => NULL,
        'address_country' => NULL,
        'cvc_check' => 'pass',
        'address_line1_check' => NULL,
        'address_zip_check' => NULL,
      ),
       '_unsavedValues' => 
      Stripe_Util_Set::__set_state(array(
         '_elts' => 
        array (
        ),
      )),
       '_transientValues' => 
      Stripe_Util_Set::__set_state(array(
         '_elts' => 
        array (
        ),
      )),
       '_retrieveOptions' => 
      array (
      ),
    )),
    'captured' => true,
    'refunds' => 
    array (
    ),
    'balance_transaction' => 'txn_102kMF29T6Z',
    'failure_message' => NULL,
    'failure_code' => NULL,
    'amount_refunded' => 0,
    'customer' => NULL,
    'invoice' => NULL,
    'description' => 'admin@fra.org',
    'dispute' => NULL,
    'metadata' => 
    array (
    ),
  ),
   '_unsavedValues' => 
  Stripe_Util_Set::__set_state(array(
     '_elts' => 
    array (
    ),
  )),
   '_transientValues' => 
  Stripe_Util_Set::__set_state(array(
     '_elts' => 
    array (
    ),
  )),
   '_retrieveOptions' => 
  array (
  ),
))

【问题讨论】:

  • 我可以通过调用 var_dump($charge->paid); 来访问 true 的值。当我尝试使用 if($charge->paid == true){ ... } 检查该值是否为真时,该语句永远不会被正确评估....为什么使用 var_dump($charge->paid) 显示为真;,但是当我检查条件时它无法评估?
  • 我认为这应该使用不直接访问变量的方法来完成。

标签: php


【解决方案1】:

您可以使用 __toArray($recursive = false) 函数来获取数组形式的数据。

例子:

$chargeArray = $charge->__toArray(true);
echo $chargeArray['paid'];

在转换为数组之前,我还能够使用数组结构访问对象的数据。对我来说,$charge['paid'] 让我获得了价值。

【讨论】:

  • 我还确认,只需执行 $charge['paid'] 就可以了,所以这似乎是最简单的解决方案。
  • 我也可以确认这一点,并尝试投票赞成,但设法意外地反对投票。 sry :-/
【解决方案2】:

你可以使用__toArray()方法:

$array = $collection->__toArray(true);

这适用于这种情况

【讨论】:

    【解决方案3】:

    无论返回什么,请用 json_decode 解析它,你会在 php 中得到一个 assoc 数组 即假设返回数组是 $ret

    $ret = json_decode($ret); 
    
    $ret->paid;
    $ret->captured;
    $ret->card->id; 
    and so on..
    

    希望对你有帮助。

    【讨论】:

      【解决方案4】:
      echo gettype($charge->paid); //boolean
      var_dump($charge->paid); //bool(true)
      
      if($charge->paid==true)echo "==true"; //==true
      if($charge->paid===true)echo "===true"; //===true
      if($charge->paid==1)echo "==1"; //==1
      if($charge->paid===1)echo "===1"; //nada, it's a boolean, not numeric
      

      所以使用if($charge->paid===true),你应该保证你正在测试你想知道的东西。

      在这里通过 print_r 的输出,你可以看到 pay 显示为 1。

       [_values:protected] => Array ( [id] => ch_10as29724hknftGBm9TxC [object] => charge [created] => 1384696845 [livemode] => [paid] => 1 [amount] => 1400
      

      因此,根据评估支付的地点和方式,它可能显示为数字、字符串或布尔值。您可以针对这三种可能性运行一系列测试,或者只使用if($charge->paid){...}

      当paid 为 false 时,它​​可能会返回为空 ("")、0 或布尔值 false。可能需要注意的是将布尔值 false 转换为字符串,在这种情况下,它将被解释为 true。

      $val = "false";
      if($val){
          echo "true"; //true
      }
      

      因此,在您的测试中,只需添加 intval($val) 以规范化值并确保安全。

      if(intval($charge->paid)){...}

      干杯

      【讨论】:

        猜你喜欢
        • 2014-04-17
        • 1970-01-01
        • 2017-05-28
        • 1970-01-01
        • 2021-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多