【问题标题】:Getting Last4 Digits of Card using Customer Object - Stripe API with PHP使用客户对象获取卡的最后 4 位数字 - 带 PHP 的 Stripe API
【发布时间】:2015-08-07 10:44:00
【问题描述】:

我想使用 Stripe 获取客户卡的最后 4 位数字。 我已经使用以下方式存储了客户:

      // Get the credit card details submitted by the form
      $token = $_POST['stripeToken'];

      // Create a Customer
      $StripeCustomer = \Stripe\Customer::create(array(
              "description" => "$username",
              "card" => $token
      ));

现在我想访问并存储卡的最后 4 位数字。 (就上下文而言,我想向用户展示他们使用 Stripe 存储了哪些卡以供将来付款 - 这不是订阅服务)。

我已经搜索了一个解决方案,但是很多帖子都在收费后保存最后 4 位数字,并从收费中提取信息,例如:

$last4 = null;
try {
    $charge = Stripe_Charge::create(array(
    "amount" => $grandTotal, // amount in cents, again
    "currency" => "usd",
    "card" => $token,
    "description" => "Candy Kingdom Order")
);
$last4 = $charge->card->last4;

我想在收费之前做同样的事情,所以我想从客户对象中提取最后 4 个。 Stripe API 文档显示了来自客户的 last4 的属性路径,
customer->sources->data->last4

但是,这似乎没有给我正确的最后 4 位数字。
$last4 = $StripeCustomer->sources->data->last4;

我想我误解了如何在 Stripe API 中使用属性。有人能指出我正确的方向吗?

【问题讨论】:

    标签: php stripe-payments


    【解决方案1】:

    $last4 = $StripeCustomer->sources->data[0]->last4;

    sources->data 是一个数组,因此您必须选择第一张卡片。

    旁注:您使用了两次令牌,一次创建客户,第二次创建费用,这将导致错误,因为令牌只能使用一次。您必须向客户收费而不是代币。

    【讨论】:

    • 工作就像一个魅力!另请注意:您是绝对正确的。使用令牌进行收费的第二段代码是从另一个帖子中提取的。我的代码实际上确实对客户对象收费。再次感谢!
    • 谢谢!文档对此非常不清楚,它给出了一些奇怪的方法,我怀疑这是第二次调用,这要好得多! :)
    • 谢谢马修。也帮助了我。
    • default_source 呢?
    • default_source 是一个包含ID of the default payment source for the customer. 的字符串,因此您需要再次调用来获取源对象并从那里读取last4
    【解决方案2】:

    对于从搜索引擎登陆这里的任何其他人,这里是 Stripe 文档的链接,了解如何将卡的最后 4 位数字保存给客户https://stripe.com/docs/api/customers/object#customer_object-sources-data-last4

    【讨论】:

      【解决方案3】:

      如果您使用 Laravel Cashier,此代码将对您有所帮助。

      $data = User::find(auth()->user()->id);
      $payment = $data->defaultPaymentMethod();
      $last4 = $payment->last4;
      $brand = $payment->brand;
      dd($payment);
      

      您可以从该对象中获取所有信息。

      【讨论】:

        【解决方案4】:

        自从第一次回答这个问题以来,这个 API 已经发生了变化。对于 API 版本 2020-08-27,您需要使用 ListPaymentsMethod API on the Customer object

        通过 JSON 访问的路径如下所示

        $paymentMethods = $stripe->paymentMethods->all([
          'customer' => 'cus_123',
          'type' => 'card',
        ]);
        $last4 = $paymentMethods->data[0]->card->last4
        

        【讨论】:

          猜你喜欢
          • 2019-01-11
          • 1970-01-01
          • 2014-02-24
          • 2019-10-28
          • 1970-01-01
          • 1970-01-01
          • 2018-12-11
          • 2019-12-25
          • 2019-12-31
          相关资源
          最近更新 更多