Squ*_*gs. 7 php laravel stripe-payments laravel-cashier react-stripe-elements
我目前正在尝试使用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')]
);
}
Run Code Online (Sandbox Code Playgroud)
现在,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 );
});
Run Code Online (Sandbox Code Playgroud)
流程Payment方法命中服务器:
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)
});
Run Code Online (Sandbox Code Playgroud)
我在Github上遇到了一个示例问题:https : //github.com/laravel/cashier/issues/743这与我的问题非常相似。
但是,我正在运行最新版本的Laravel和Cashier,并检查了封闭解决方案中引用的代码行是否存在(即存在),因此可能还会发生其他情况。
对于使这种类型的卡工作起来,控制流应该是什么样子,我有些困惑。对于不需要3DS的标准卡,一切正常。我应该在React中捕获异常并以不同的方式处理事情吗?例如,要求用户两次确认他们的卡详细信息?
我还应该提到我启用了webhooks,并且这些都在本地成功解决-我在信息中心中进行了检查。
小智 0
由于您使用的是 React,因此您可以使用 Stripe React SDK https://stripe.com/docs/libraries/react-native
并且仅使用 Laravel 创建引用和检查付款状态。
这样您就无需担心创建 3D 页面或执行任何重定向。