Laravel收银方法失败,3d安全单次收费



我需要帮助Laravel收银。

我在后台使用laravel收银员,在客户端使用vue。

在客户端我设置条带对象,元素和卡。与此同时,我请求服务一个client_secret制作一个PaymentIntent

$payment_intent = PaymentIntent::create(
['amount' => $request["price"],
'currency' => "eur",
'payment_method_types' => ['card'],
'customer' => $stripe_customer->id,
], [
'api_key' => config('services.stripe.secret'),
]); 

当用户输入信用卡数据并使用client_secret进行确认时我在客户端调用这个函数

this.stripe.confirmCardPayment(this.stripe_payment_intent.client_secret, {
payment_method: {
card: this.stripe_card,
billing_details: {
name: 'Test Name'
}
},
setup_future_usage: 'off_session'
})
...

然后我调用服务器传递结果。在服务器端

$stripeCharge = $request->user()->charge(
$request["paymentIntent"]["amount"], $request["paymentIntent"]["payment_method"]
);

没有sca (3d secure)也能正常工作

但是当测试卡在客户端要求3d安全(4000002500003155或4000002760003184)时,一切正常,显示3d安全对话框,confirmCardPayment成功,但在最后一步调用charge时,我得到

付款尝试失败,因为在完成之前需要额外的操作。

为什么?所有的操作都在客户端执行。为什么服务器不同意?

注。我只需要单次收费,不需要存储任何付款方式

问题是confirmCardPayment已经向用户收费了。因此,在服务器端再次调用会出现错误,因为3d安全卡不可能双重收费。

我必须在服务器端删除收费,并使用PaymentIntent::retrieve来验证状态并检查是否已经在我的业务逻辑中处理。

最新更新