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

Instamojo支付集成Webhook异常:CSRF排除配置未生效

解决Instamojo Webhook因CSRF验证失败的问题

我一眼就发现问题所在了——你配置的CSRF排除路径和实际的Webhook路由完全不匹配,这就是为什么验证没被跳过的原因!

问题分析

你的Webhook路由是:

Route::post('webhook','HomeController@webhook');

这意味着实际接收Instamojo回调的URL是/webhook,但你在VerifyCsrfToken中间件的$except数组里添加的是instamojo/*——这个路径规则根本匹配不到/webhook,所以CSRF验证依然会触发,导致Webhook请求被拦截。

解决方案

1. 修正CSRF排除路径

直接把你的Webhook路由路径添加到$except数组里:

class VerifyCsrfToken extends Middleware {
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        'webhook', // 匹配你的/webhook路由
    ];
}

如果之后你打算把Webhook路由放到instamojo前缀下(比如Route::post('instamojo/webhook', ...)),再改用instamojo/*就没问题了。

2. 确认Instamojo的Webhook配置

登录Instamojo后台,检查你设置的Webhook URL是否和你的路由完全一致。比如你的应用域名是https://your-app.com,那么Webhook URL必须是https://your-app.com/webhook,不能有拼写错误或者多余的后缀。

3. 额外排查步骤

  • 检查其他中间件拦截:如果你的路由组还应用了其他中间件(比如权限验证),确保这些中间件也不会拦截/webhook请求。
  • 测试请求是否到达控制器:可以在webhook方法里临时添加日志输出,验证请求是否能正常到达:
    use Illuminate\Support\Facades\Log;
    
    public function webhook(Request $request) {
        Log::info('Instamojo Webhook Received', $request->all());
        return response()->json(['status' => 'success'], 200);
    }
    
    然后用Postman发送一个POST请求到/webhook,查看storage/logs/laravel.log里是否有对应的日志记录。
  • 清理配置缓存:修改中间件后,执行以下命令清理缓存,确保新配置生效:
    php artisan config:clear
    php artisan cache:clear
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:10:49