首页 > 解决方案 > 创建 paymentIntent 后,如何在 Stripe 中更新客户的默认付款方式?

问题描述

我正在尝试为连接帐户设置订阅。我的流程是创建客户:

    $customer = \Stripe\Customer::create([
        'description' => "Product",
    ], ['stripe_account' => $configuration['StripeKey']]);

然后我创建 PaymentIntent:

    $intent = \Stripe\PaymentIntent::create([
      'amount' => $price,
      'currency' => $configuration['Currency'],
      'customer' => $customer->id,
    ], ['stripe_account' => $configuration['StripeKey']]);

客户输入他们的卡详细信息,卡成功应用到客户。但是,我需要将卡设置为默认值,以便为客户创建订阅,但在检索 paymentIntent 时:

 $pm = \Stripe\PaymentIntent::retrieve($_POST['payment_intent'], ['stripe_account' =>  $configuration['StripeKey']]);

尽管仪表板中有付款方式,但 payment_method 显示为 null。

我在哪里错了?

标签: phpstripe-payments

解决方案


首先,您可能无法payment_method在检索付款意图时看到 ,因为该字段是可扩展的(请参阅https://stripe.com/docs/expand)。您需要将检索代码更新为以下内容:

$pm = \Stripe\PaymentIntent::retrieve([
  'id'=>$_POST['payment_intent'],
  'stripe_account' =>  $configuration['StripeKey'],
  'expand' => ['payment_method']
]);

此外,您应该setup_future_usage:off_session在创建付款意图时进行设置。确认付款意图后,这将自动将 PaymentMethod 附加到您的客户。

附加付款方式后,您可以invoice_settings.default_payment_method将客户 ( https://stripe.com/docs/api/customers/update#update_customer-invoice_settings-default_payment_method ) 更新为用于 Stripe 订阅的默认付款方式。

话虽这么说,我有点困惑为什么您要创建 PaymentIntent 但谈论订阅。您是否自己管理订阅(不使用 Stripe 的订阅 API)?如果您正在使用 Stripe 的订阅并且只想设置付款方式,您可以使用 SetupIntent 来代替。


推荐阅读