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

时间:2019-09-24 16:26:28

标签: 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,
        ];

这是因为它是一笔付款的预授权,将在2-3天内收取。

使用此配置,我们收到以下错误

  

Stripe \ Exception \ MissingParameterException-400-提供的PaymentMethod已附加到另一个对象。您必须先将它们附加到Customer对象,然后才能重用PaymentMethods。

要清楚:

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

此错误是什么意思?为什么说PM已连接到另一个对象?哪一个?哪种?

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

以前,前端只需使用setupIntent通过官方stripe.js调用来授权卡。因此,将从stripe.js返回的pm发送到我们的服务器,而无需执行任何操作。然后我们的服务器只需调用create方法,每次都会收到此错误。

寻求诊断和理解的帮助。

  

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

预先感谢

1 个答案:

答案 0 :(得分:1)

我终于收到关于这个问题的正式答复。

简而言之: 我们不能 保存用于分期付款的卡,然后在以后使用该付款方式来捕获预先授权的金额

因此,我们修改了流程

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