Stripe - 如何在不附加到用户的情况下创建 PaymentMethod?

rea*_*ebo 5 php stripe-payments

我们的用户可以输入一张卡来支付我们的服务。他/她可以选择保存或不保存卡以供重复使用。

当用户不保存卡时,我们正在创建一个 PaymentIntent 传递

        [
            'amount'         => floatval($this->cart->total_gross) * 100,
            'currency'       => 'EUR',
            'payment_method' => $this->pm,
            'off_session'    => true,
            'capture_method' => 'manual',
            'confirm'        => true,
        ];
Run Code Online (Sandbox Code Playgroud)

这是因为这是对将在 2-3 天内捕获的付款的预授权。

使用这个配置我们得到以下错误

Stripe\Exception\MissingParameterException - 400 - 提供的 PaymentMethod 已附加到另一个对象。如果不先将 PaymentMethods 附加到 Customer 对象,就不能重用它们。

要清楚:

  • 用户输入一张新卡
  • 选择不保存以备将来使用
  • stripe.js 自动处理 3d 安全卡认证
  • 返回pm_...的金额和不保存卡的指令发送到服务器(因此我们不会创建条纹客户)
  • 使用上面的配置我们调用 \Stripe\PaymentIntent::create方法
  • 我们得到了上面的错误

这个错误是什么意思?为什么它说 PM 已经附加到另一个对象?哪一个?哪一种?

我对我的代码进行了三次检查,这是我们在从前端收到 pm 后所做的唯一 api 调用。

之前,前端只需使用 setupIntent 使用官方 stripe.js 调用来授权卡。因此,从 stripe.js 返回的 pm 被发送到我们的服务器,而没有对其进行任何操作。而我们的服务器只是调用了 create 方法,每次都会出现这个错误。

寻求您的帮助以诊断和理解。

我们使用的是最新的官方 stripe-php 版本

提前致谢

rea*_*ebo 7

我终于收到了关于这个问题的官方回复。

简单地说:我们不能保存一张用于off_session付款的卡,然后在稍后使用该付款方式来获取预授权金额

所以,我们修改了我们的流程

用户选择或保存卡,我们通知用户必须保存该卡才能重复使用以完成支付流程。