You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Cashier处理SCA卡IncompletePayment无需webhook执行业务逻辑问题

Laravel Cashier SCA跳转后业务逻辑处理方案

核心思路:SCA验证完成后的跳转链路完全可控,你可以直接在你指定的回跳路由bookingconfirmation中完成支付状态校验和后续数据写入,无需依赖webhook。

具体实现步骤

  • 第一步:给回跳路由追加业务上下文参数
    你当前触发SCA跳转时没有携带业务标识,验证完成后回跳会无法关联对应订单/业务数据。修改跳转逻辑的redirect参数,把需要的业务参数(比如订单ID)透传过去:

    if ($e instanceof \Laravel\Cashier\Exceptions\PaymentActionRequired) {
        // 示例追加order_id参数,你可以根据业务需要传其他必要标识
        return redirect()->route('cashier.payment', [
            $e->payment->id, 
            'redirect' => route('bookingconfirmation', ['order_id' => $yourOrderId])
        ]);
    }
    

    敏感参数也可以先存入session,回跳后从session读取,避免暴露在URL中。

  • 第二步:在bookingconfirmation路由对应的控制器方法中完成支付校验和业务逻辑
    Cashier处理完SCA验证后跳转到你指定的路由时,会自动携带payment_intent参数,你可以直接用这个参数查询支付状态,执行后续逻辑:

    use Illuminate\Http\Request;
    use Laravel\Cashier\Payment;
    
    public function bookingConfirmation(Request $request)
    {
        // 校验必要参数是否存在
        if (!$request->has('payment_intent') || !$request->has('order_id')) {
            return redirect()->route('booking.pay')->with('error', '无效的支付请求');
        }
    
        // 查询支付详情
        $payment = Payment::find($request->input('payment_intent'));
        $order = Order::find($request->input('order_id'));
    
        // 防止重复处理
        if ($order->status == 'paid') {
            return view('booking.confirmation', compact('order'));
        }
    
        // 支付成功则执行业务逻辑
        if ($payment->isSucceeded()) {
            // 这里直接写你原来//continue后的业务逻辑,比如更新订单、写入额外数据
            $order->update([
                'status' => 'paid',
                'transaction_id' => $payment->id,
                'paid_at' => now()
            ]);
            // 其他业务逻辑调用
    
            return view('booking.confirmation', compact('order'));
        }
    
        // 支付失败处理
        return redirect()->route('booking.pay')->with('error', '支付未完成,请重试');
    }
    
  • 第三步:复用业务逻辑(可选)
    你可以把非SCA支付和SCA回跳后都要执行的公共业务逻辑抽成独立方法,两边调用即可,避免代码重复。

注意事项

  • 确保bookingconfirmation路由配置了web中间件组,保证session和用户认证状态正常
  • 支付状态校验必须走Stripe官方接口查询,不要信任URL中的其他参数判断支付结果

内容的提问来源于stack exchange,提问作者Robert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 23:48:02