我目前正在尝试使用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 ); });
流程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) });
我在Github上遇到了一个示例问题:https : //github.com/laravel/cashier/issues/743这与我的问题非常相似。
但是,我正在运行最新版本的Laravel和Cashier,并检查了封闭解决方案中引用的代码行是否存在(即存在),因此可能还会发生其他情况。
对于使这种类型的卡工作起来,控制流应该是什么样子,我有些困惑。对于不需要3DS的标准卡,一切正常。我应该在React中捕获异常并以不同的方式处理事情吗?例如,要求用户两次确认他们的卡详细信息?
我还应该提到我启用了webhooks,并且这些都在本地成功解决-我在信息中心中进行了检查。