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

如何确保Laravel接收WooCommerce Webhook返回JSON 200响应?

解决WooCommerce Webhook无法触发Laravel接收的问题

根据你的测试情况,Postman能正常访问Laravel的/webhook路由,但WooCommerce的Webhook没有请求过来,问题大概率出在Woo的配置或本地网络环境上,按以下步骤排查:

1. 检查WooCommerce Webhook核心配置

  • 确认Webhook状态为“已发布”:在WooCommerce > 设置 > 高级 > Webhooks中,找到对应Webhook,确保不是草稿状态
  • 核对触发事件:选择的是「订单创建」(对应Woo内部事件order.created),不要选错其他事件
  • 验证交付URL:确保填写的是http://localhost:8000/webhook,不要加尾斜杠,确认Laravel服务器运行在8000端口(php artisan serve默认端口)
  • 确认请求方法:必须设置为POST,和Laravel路由的请求方法一致
  • 查看Webhook日志:点击对应Webhook的「查看日志」选项,检查是否有连接超时、404、权限拒绝等错误信息,这是最直接的排查依据

2. 排查本地网络与环境隔离问题

  • 用IP地址替换localhost:尝试将Woo的交付URL改为http://127.0.0.1:8000/webhook,部分环境下localhost解析可能存在问题
  • 检查防火墙限制:本地防火墙可能阻止了Apache(WordPress运行环境)向8000端口发起请求,临时关闭防火墙测试
  • 确认环境互通:如果WordPress在XAMPP的Apache(默认80端口),Laravel在php artisan serve的8000端口,确保两者在同一个本地网络环境(没有用虚拟机、Docker等导致的网络隔离)

3. 验证Laravel是否真的没收到请求

在WebhookController的handle方法中添加日志记录,确认请求是否到达:

public function handle(Request $request) {
    // 记录请求内容到Laravel日志
    \Log::info('Webhook received data:', $request->all());
    return response()->json('éxito');
}

然后查看storage/logs/laravel.log文件,如果有新增的日志条目,说明请求已经到达,只是前端开发者工具没显示响应;如果没有日志,说明请求根本没发送到Laravel。

4. 测试WordPress能否发起对外请求

WooCommerce的Webhook依赖WordPress的HTTP请求能力,可能存在PHP配置限制导致无法发起请求:
在WordPress主题的functions.php中添加临时测试代码:

add_action('init', function() {
    // 测试请求Laravel的webhook
    $response = wp_remote_post('http://localhost:8000/webhook', [
        'body' => ['test' => 'sample_data'],
        'timeout' => 10
    ]);
    
    if (is_wp_error($response)) {
        // 记录错误信息到WordPress日志
        error_log('Woo Webhook测试请求失败: ' . $response->get_error_message());
    } else {
        error_log('Woo Webhook测试请求成功,响应内容: ' . wp_remote_retrieve_body($response));
    }
});

开启WordPress的调试日志(在wp-config.php中设置define('WP_DEBUG_LOG', true);),刷新WordPress页面后查看wp-content/debug.log,根据日志判断是请求无法发出还是响应异常。

5. 其他可能的配置问题

  • 确认Laravel的VerifyCsrfToken.php中$except数组正确:
    protected $except = [
        'webhook',
    ];
    
  • 检查Laravel服务器状态:确保php artisan serve的命令窗口正常运行,没有报错或中断
  • 暂时关闭Laravel的其他中间件:比如如果有安装权限验证、CORS等中间件,临时禁用测试,排除中间件拦截请求的可能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 11:10:35