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

部署在Heroku的Laravel API对接Stripe Webhook遇500错误求助

排查Heroku上Laravel Stripe Webhook 500错误的常见原因

以下是几个最可能导致你遇到通用500错误的原因及对应解决方法:

  • 环境变量加载异常
    Heroku生产环境下,Laravel会缓存配置,直接用env("STRIPE_WEBHOOK_SECRET")大概率取不到正确值。

    1. 先确认Heroku控制台的「Settings > Config Vars」里已经正确配置了STRIPE_WEBHOOK_SECRET,值要和Stripe后台的Webhook签名密钥完全一致。
    2. 在config/services.php中添加Stripe配置项:
      'stripe' => [
          'webhook_secret' => env('STRIPE_WEBHOOK_SECRET'),
      ],
      
      控制器里改用config('services.stripe.webhook_secret')获取密钥,避免缓存导致的变量丢失。
  • 请求体被提前消耗
    Laravel的Request类会自动解析请求内容,导致php://input流被读取后无法再次获取,直接用file_get_contents('php://input')会拿到空值,触发后续异常。
    修改控制器方法,注入Request对象并获取原始内容:

    use Illuminate\Http\Request;
    
    public function stripe_webhook(Request $request)
    {
        $payload = $request->getContent();
        $sig_header = $request->header('Stripe-Signature');
        // 后续代码保持不变
    }
    

    同时用$request->header()替代$_SERVER获取签名头,更符合Laravel的规范。

  • Response类未正确引入
    控制器里直接用Response::json()但没引入对应Facade,会触发「类未找到」的致命错误。
    要么在控制器顶部添加引用:

    use Illuminate\Support\Facades\Response;
    

    要么直接用Laravel的辅助函数简化代码:

    return response()->json(['event' => $event], 201);
    
  • 未查看具体错误日志
    500是通用错误,必须看具体日志才能定位问题。在本地终端执行:

    heroku logs --tail
    

    实时查看Heroku上的应用日志,里面会明确显示错误原因(比如变量为空、类不存在等)。

  • CSRF排除路径不匹配
    api.php中的路由默认带有/api前缀,实际Webhook路径是/api/stripe_webhook,你在VerifyCsrfToken的$except里写的是/stripe_webhook,可能存在路径不匹配的问题。尝试改为:

    protected $except = [
        "/api/stripe_webhook",
    ];
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:07:05