Laravel Cashier 收费方法失败,单次收费 3d 安全
Posted
技术标签:
【中文标题】Laravel Cashier 收费方法失败,单次收费 3d 安全【英文标题】:Laravel Cashier charge method fails with 3d secure on single charge 【发布时间】:2021-05-22 09:19:30 【问题描述】:我需要 Laravel Cashier 方面的帮助。
我在后端使用 laravel 收银员,在客户端使用 vue。
在客户端上,我设置了条带对象、元素和卡片。 与此同时,我请求提供一个制作 PaymentIntent 的 client_secret
$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 安全)
但是当测试卡在客户端需要 3d 安全(4000002500003155 或 4000002760003184)时一切正常,显示 3d 安全 对话框,confirmCardPayment 成功,但在最后一步调用费用时我得到了
付款尝试失败,因为需要执行其他操作才能完成。
为什么?所有的动作都是在客户端执行的。为什么服务器不同意?
附言我只需要一次充电,无需存储任何付款方式
【问题讨论】:
【参考方案1】:问题是 confirmCardPayment 已经向用户收费。 所以在服务器端再次调用会报错,因为无法对 3d 安全卡进行双重收费。
我必须取消服务器端的费用并使用 PaymentIntent::retrieve 来验证状态并检查我的业务逻辑中是否已处理。
【讨论】:
以上是关于Laravel Cashier 收费方法失败,单次收费 3d 安全的主要内容,如果未能解决你的问题,请参考以下文章
使用产品结账时如何用 laravel + cashier 生成发票
Laravel Cashier 3D Secure/SCA 问题条
Laravel Cashier 未定义方法meteredPrice()