适用于3D Secure / SCA的Laravel Cashier不完整异常处理

时间:2019-11-19 19:51:15

标签: 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')]
    );
}

现在,Laravel建议在这种情况下转到他们的“确认”页面。但是,这就是我的困惑所在。首先,我已经通过我的React应用程序中的Stripe Elements向客户询问了他们的信用卡,因此转发到Laravel生成的服务器端页面可能很难。我想在我的React Application中优雅地处理所有这些。

enter image description here

在将任何内容发送到服务器(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中捕获异常并以不同的方式处理事情吗?例如是否要求用户两次确认其卡信息?

我还应该提到我启用了网络钩子,并且这些钩子已在本地成功解决-我在信息中心中进行了检查。

0 个答案:

没有答案