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

Laravel Cashier集成Paddle后数据未写入数据库问题排查

Laravel Cashier Paddle Webhook 未写入数据库问题排查

是的,Laravel Cashier(Paddle版本)应该自动处理Paddle发送的Webhook事件,并将客户、订阅、交易等数据写入对应数据库表——前提是Webhook配置正确,事件能被Cashier正确接收和处理。结合你的情况,Paddle沙箱后台显示交易完成但本地无数据,大概率是Webhook链路或配置存在隐性问题,可按以下步骤排查:

1. 验证Webhook路由与CSRF排除

  • 执行 php artisan route:list,确认是否存在 POST /paddle/webhook 路由,且中间件包含 web 和 paddle-webhook。
  • 检查 App\Http\Middleware\VerifyCsrfToken 类的 $except 数组,确认 /paddle/webhook 已被排除——Cashier通常会自动注册,但手动配置时可能遗漏,导致Webhook请求被CSRF拦截。

2. 确认Webhook签名验证通过

  • 确保 .env 中的 PADDLE_PUBLIC_KEY 是Paddle沙箱环境的公钥(生产和沙箱公钥不同),且无多余空格、换行或格式错误。签名验证失败时,Cashier会直接返回403,不会处理事件。
  • 可临时在 vendor/laravel/cashier-paddle/src/Http/Controllers/WebhookController.php 的 handleWebhook 方法开头添加日志:
    Log::info('Paddle Webhook Received', $request->all());
    
    查看 storage/logs/laravel.log,确认请求是否到达处理逻辑。

3. 检查事件类型与Cashier支持范围

  • 登录Paddle沙箱后台,查看Webhook历史记录,确认发送的事件类型是否在Cashier的处理范围内:
    • 客户创建:customer.created
    • 订阅创建:subscription.created
    • 交易完成:transaction.completed
      Cashier仅处理这些核心事件,若Paddle发送的是其他未被支持的事件类型,不会写入数据。

4. 确认用户模型关联正确

  • 确保User模型已正确引入 Laravel\Paddle\Billable trait,且数据库表存在 paddle_id 字段(字符串类型,允许为空)。
  • 前端调用Paddle结账浮层时,必须传递与本地用户绑定的标识:
    • 若通过后端生成结账链接,需使用 $user->newSubscription(...) 或 $user->charge(...) 方法,Cashier会自动关联用户ID到Paddle事件;
    • 若前端直接调用Paddle SDK,需在配置中传入 customer_id(对应本地用户ID),否则Cashier无法将Paddle的客户/交易与本地用户关联,不会写入数据。

5. 排查Laravel日志

  • 查看 storage/logs/laravel.log,寻找Webhook处理过程中的异常信息:比如数据库字段缺失、权限不足、模型关联错误等,这些隐性错误可能导致数据未写入但无外部报错。
  • 可在 App\Providers\EventServiceProvider 中监听Cashier的Webhook事件,进一步确认处理流程:
    protected $listen = [
        \Laravel\Paddle\Events\WebhookReceived::class => [
            function ($event) {
                Log::info('Webhook Received Event', $event->payload);
            },
        ],
        \Laravel\Paddle\Events\WebhookHandled::class => [
            function ($event) {
                Log::info('Webhook Handled Event', ['event' => $event->payload['event_type']]);
            },
        ],
    ];
    

6. 确认沙箱环境配置

  • 检查 .env 中的 PADDLE_ENV 是否设置为 sandbox,若误设为 production,Cashier会使用生产环境API验证沙箱事件,导致签名验证失败或事件不兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 07:47:19