Laravel Cashier Stripe Webhook完整教程:实时处理支付事件

张开发
2026/4/13 3:25:22 15 分钟阅读

分享文章

Laravel Cashier Stripe Webhook完整教程:实时处理支付事件
Laravel Cashier Stripe Webhook完整教程实时处理支付事件【免费下载链接】cashier-stripeLaravel Cashier provides an expressive, fluent interface to Stripes subscription billing services.项目地址: https://gitcode.com/gh_mirrors/ca/cashier-stripeLaravel Cashier Stripe 是一个强大的工具为开发者提供了与 Stripe 订阅计费服务交互的直观、流畅接口。本教程将详细介绍如何在 Laravel Cashier 中设置和使用 Stripe Webhook以实时处理支付事件确保你的应用能够及时响应订阅变更、支付成功、退款等关键业务场景。为什么需要 Stripe Webhook在基于订阅的业务模型中实时处理支付事件至关重要。Stripe Webhook 允许 Stripe 在特定事件发生时主动向你的应用发送通知例如订阅创建或更新支付成功或失败发票生成或付款逾期客户信息变更通过 Webhook你的应用可以立即响应这些事件无需定期轮询 Stripe API从而提高效率并确保数据一致性。第一步配置 Webhook 密钥要开始使用 Stripe Webhook首先需要在配置文件中设置 Webhook 密钥。打开config/cashier.php文件找到webhook配置部分webhook [ secret env(STRIPE_WEBHOOK_SECRET), tolerance env(STRIPE_WEBHOOK_TOLERANCE, 300), ],在.env文件中添加你的 Stripe Webhook 密钥STRIPE_WEBHOOK_SECRETwhsec_your_webhook_secret_here这个密钥可以在 Stripe 仪表板的 Webhook 设置中找到。第二步设置 Webhook 路由Laravel Cashier 已经为你预设了 Webhook 路由。查看routes/web.php文件你会看到类似以下的代码Route::post(webhook, WebhookControllerhandleWebhook)-name(webhook);默认情况下Webhook 端点的 URL 是/stripe/webhook但你可以通过配置CASHIER_PATH环境变量来自定义路径。第三步排除 CSRF 验证由于 Stripe Webhook 请求来自外部服务需要将 Webhook 路由排除在 CSRF 验证之外。打开app/Http/Middleware/VerifyCsrfToken.php文件将 Webhook 路径添加到$except数组protected $except [ stripe/*, ];第四步创建 Stripe Webhook 端点Laravel Cashier 提供了一个便捷的 Artisan 命令来创建 Stripe Webhook 端点。在终端中运行php artisan cashier:webhook --urlhttps://your-domain.com/stripe/webhook这个命令会在 Stripe 中创建一个新的 Webhook 端点并配置必要的事件监听。你也可以通过 Stripe 仪表板手动创建 Webhook 端点。第五步处理 Webhook 事件Laravel Cashier 的WebhookController已经处理了许多常见的 Stripe 事件。你可以在src/Http/Controllers/WebhookController.php文件中查看默认实现public function handleWebhook(Request $request) { if (config(cashier.webhook.secret)) { $this-middleware(VerifyWebhookSignature::class); } $payload json_decode($request-getContent(), true); $method handle.Str::studly(str_replace(., _, $payload[type])); if (method_exists($this, $method)) { return $this-{$method}($payload); } return $this-missingMethod($payload); }要处理自定义事件你可以创建自己的 Webhook 控制器并扩展WebhookController或者监听 Cashier 触发的事件。第六步测试 Webhook 本地开发在本地开发时你需要将 Stripe Webhook 请求转发到你的本地服务器。使用 Stripe CLI 可以轻松实现这一点stripe listen --forward-to localhost/stripe/webhook这条命令会启动一个监听服务并将 Stripe Webhook 请求转发到你的本地 Laravel 应用。Stripe CLI 还会生成一个临时的 Webhook 密钥你可以在测试时使用。第七步验证 Webhook 签名为了确保 Webhook 请求确实来自 StripeLaravel Cashier 提供了VerifyWebhookSignature中间件。这个中间件会验证请求中的签名是否有效public function handle($request, Closure $next) { $signature $request-header(Stripe-Signature); try { WebhookSignature::verifyHeader( $request-getContent(), $signature, config(cashier.webhook.secret), config(cashier.webhook.tolerance) ); } catch (Exception $e) { abort(400, Invalid webhook signature.); } return $next($request); }常见问题与解决方案1. 签名验证失败如果遇到 Invalid webhook signature 错误可能的原因是使用了错误的 Webhook 密钥系统时间与 Stripe 服务器时间不同步请求内容被修改解决方法确保使用正确的 Webhook 密钥Stripe CLI 生成的密钥与仪表板中的密钥不同检查服务器时间是否准确确保请求内容未被修改2. Webhook 路由被 CSRF 保护阻止如果收到 CSRF 相关错误确保已将 Webhook 路径添加到VerifyCsrfToken中间件的$except数组中。3. 本地开发时收不到 Webhook确保已正确运行 Stripe CLI 转发命令并且使用了正确的本地 URL。总结通过本教程你已经了解了如何在 Laravel Cashier 中设置和使用 Stripe Webhook。Webhook 是实时处理支付事件的关键它使你的应用能够及时响应订阅变更、支付状态更新等重要业务事件。记住在生产环境中确保 Webhook 端点使用 HTTPS并且正确配置了签名验证。定期检查 Webhook 日志确保所有事件都被正确处理。Laravel Cashier 提供了强大的 Webhook 处理功能通过src/Http/Controllers/WebhookController.php和相关中间件你可以轻松扩展和自定义事件处理逻辑满足你的业务需求。【免费下载链接】cashier-stripeLaravel Cashier provides an expressive, fluent interface to Stripes subscription billing services.项目地址: https://gitcode.com/gh_mirrors/ca/cashier-stripe创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

更多文章