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

Laravel 6集成Transbank使用ngrok时关闭CSRF仍报419错误如何解决?

问题修复步骤

419页面过期错误本质是Laravel的CSRF令牌校验失败,或跨代理会话校验异常,按以下顺序排查修复即可:

1. 修正CSRF排除路径配置

你当前在VerifyCsrfToken中填写的排除路径是控制器方法路径,和实际路由URI不匹配,导致校验规则未生效,修改为如下配置:

class VerifyCsrfToken 
{
   use InteractsWithTime;

   protected $except = [
       '/confirm_pay',
       '/started'
     ];
}

Laravel的CSRF排除规则匹配的是请求的URI地址,和控制器方法名无关,你之前填写的confirm_pay/confirmPay路径不存在,所以校验仍然生效。

2. 修复控制器变量名笔误

你的confirmPay方法存在变量名拼写错误,会导致支付成功后逻辑报错,修改如下:

public function confirmPay(Request $request){
    $confirm = (new Transaction)->commit($request->get('token_ws'));
    // 原代码使用了未定义的$confirmacion变量,替换为实际定义的$confirm
    if($confirm->isApproved()){
        return 'is Approved';
    }else{
        return 'is not Approved';
    }
}

3. 配置信任代理适配ngrok

ngrok属于反向代理,Laravel默认不信任非本地代理请求,会导致会话校验异常,修改app/Http/Middleware/TrustProxies.php文件:

protected $proxies = '*';

开发环境可以直接配置*信任所有代理,生产环境请替换为实际的代理IP段。

4. 调整会话配置匹配ngrok域名

修改项目根目录.env文件,适配ngrok的访问地址:

APP_URL=https://你的ngrok域名.ngrok.io
SESSION_DOMAIN=你的ngrok域名.ngrok.io
SESSION_SECURE_COOKIE=true

修改后执行php artisan config:clear清除配置缓存后重启服务即可。

可选优化

Transbank的支付回调同时支持GET和POST请求,你可以直接将confirm_pay路由改为GET类型,彻底绕开CSRF校验:

Route::get('/confirm_pay', 'WebPayPlussController@confirmPay')->name('front');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:24:04