我目前正在尝试使用Laravel Cashier在React应用程序中处理Billing。当使用需要3D安全的测试卡(直接从Stripes文档中提取)(4000000000003220)时,会抛出IncompletePayment exception
。
这显然是正常现象,如文档中所述:https://laravel.com/docs/6.x/billing#payments-requiring-additional-confirmation
try {
$subscription = $user->newSubscription('default', $planId)
->create($paymentMethod);
} catch (IncompletePayment $exception) {
return redirect()->route(
'cashier.payment',
[$exception->payment->id, 'redirect' => route('home')]
);
}
现在,Laravel建议在这种情况下转到他们的“确认”页面。但是,这就是我的困惑所在。首先,我已经通过我的React应用程序中的Stripe Elements向客户询问了他们的信用卡,因此转发到Laravel生成的服务器端页面可能很难。我想在我的React Application中优雅地处理所有这些。
在将任何内容发送到服务器(Stripe Elements javascript已经为我处理过)之前,我还已经通过上述弹出窗口确认了该卡针对3D安全有效。
>在付款确认页面上,将提示客户再次输入其信用卡信息,并执行Stripe要求的其他任何操作,例如“ 3D Secure”确认。
在任何情况下,这样的重复似乎都是重复的。有人可以指导我在这种情况下需要做什么吗?松散地在我的React App中,我完成了以下操作:
生成了服务器端的意图,然后将其触发以做出响应:在计费过程中:
stripe.confirmCardSetup(
billingStatus.paymentIntent.client_secret,
{
payment_method: {
card: card,
billing_details: {
name: 'Jenny Rosen'
}
}
}
)
.then((res)=>{
console.log(res);
processPayment( res );
});
“付款方式”处理程序到达服务器:
var data = new FormData();
data.append( "coreId", plan.id );
data.append( "productId", plan.product_id );
data.append( "planId", plan.stripe_plan_id );
data.append( "paymentMethod", res.setupIntent.payment_method );
billingApi.pay( data, function(res){
BIG FAT 500 SERVER ERROR HERE. (IncompletePayment Exception)
});
我在Github上遇到了一个示例问题:https://github.com/laravel/cashier/issues/743,这与我的问题非常相似。
但是,我正在运行最新版本的Laravel和Cashier,并检查是否存在封闭解决方案中引用的代码行(确实如此),因此可能还会发生其他情况。
对于让这种类型的卡正常工作的控制流程,我有些困惑。对于不需要3DS的标准卡,一切正常。我应该在React中捕获异常并以不同的方式处理事情吗?例如是否要求用户两次确认其卡信息?
我还应该提到我启用了网络钩子,并且这些钩子已在本地成功解决-我在信息中心中进行了检查。