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

Laravel集成Stripe Webhook:功能正常但处理代码未执行

排查Laravel 6 + Spatie Stripe Webhooks Job未执行问题

1. 修复代码中的语法错误

你的PaymentIntentSucceeded.php里存在明显语法错误:

// 错误:缺少反斜杠的无效use语句
use IlluminateSupportFacadesLog;

修正为:

use Illuminate\Support\Facades\Log;

这个错误会导致Job无法被正确加载,队列处理器执行时会触发致命错误,若队列日志配置不完善,可能无法看到报错信息。

2. 确认队列进程正在运行

由于你的Job实现了ShouldQueue接口,必须确保Laravel队列处理器处于运行状态:

  • 本地测试:执行php artisan queue:work或php artisan queue:listen
  • 生产环境:使用supervisor等工具守护队列进程,避免进程意外退出

可以查看jobs表(默认database驱动),确认是否有未处理的Job记录堆积。

3. 验证Webhook签名密钥

检查.env中的STRIPE_WEBHOOK_SECRET是否与Stripe仪表盘里的Webhook签名密钥完全一致(注意这不是Stripe API密钥)。签名验证失败时,Spatie包会返回200但不会触发后续Job逻辑。

4. 确认事件类型匹配

Stripe发送的事件类型是payment_intent.succeeded(点分隔格式),虽然Spatie包支持下划线转义(payment_intent_succeeded),但建议直接使用官方标准格式配置:

'jobs' => [
    'invoice_payment_succeeded' => \App\Jobs\StripeWebhooks\InvoicePaymentSucceededJob::class,
    'payment_intent.succeeded' => \App\Jobs\StripeWebhooks\PaymentIntentSucceeded::class,
],

5. 检查失败队列记录

执行php artisan queue:failed查看失败任务,或直接查询failed_jobs表,里面会记录Job执行失败的具体错误信息,这是定位问题的关键依据。

6. 临时改为同步执行测试

暂时移除Job类的ShouldQueue接口,让Webhook请求进来时同步执行逻辑:

// 去掉ShouldQueue接口
class PaymentIntentSucceeded
{
    // ... 其他代码保持不变
}

此时重新用Stripe CLI测试,如果日志能正常输出,说明问题出在队列配置或进程上;若仍无日志,需检查Webhook路由是否正确配置。

7. 确认Webhook路由配置

执行php artisan route:list,确认/stripe/webhooks路由存在,且对应的控制器是Spatie\StripeWebhooks\StripeWebhooksController,同时确保该路由未被其他路由规则覆盖,也没有被CSRF中间件拦截(Spatie包默认已排除CSRF验证)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:50:46