WooCommerce自定义webhook触发时请求body为空问题排查
当webhook触发时,我在接收端发现请求的body为空。随后我启用了WP_DEBUG,重新发起一次API调用后查看日志文件(路径:WooCommerce >> 状态 >> 日志 >> 对应日期的日志文件),确认body确实为空,因此问题并非出在数据传输环节。
我找到了代码中触发webhook的位置,代码如下:
do_action( 'my_custom_webhook', $order->id, [], $order );
我将代码修改为:
error_log( $order ); do_action( 'my_custom_webhook', $order->id, [], $order );
打印后发现$order变量并非空值,情况十分奇怪。
已执行的排查步骤
确认webhook定义正确
我花费了大量时间核查webhook配置,确认是否存在设置错误,或者用到了已废弃的旧版本代码。排查错误日志
我多次翻查错误日志,推测可能是代码错误导致API调用发送前就出现问题,但该推测并不合理,因为代码错误大概率会直接阻断API调用触发。排查webhook自动停用问题
我对接的API在接收空body时会返回500错误,因此webhook会自动停用。每次尝试重新激活时都会返回以下两类错误:- 错误:投递URL返回响应码:500
- 错误:无法访问投递URL:cURL error 28: Operation timed out after 5001 milliseconds with 0 bytes received。很长一段时间我都认为该错误是问题核心。
但我无法修改对接的API,没有合适的方案绕过该问题。最终我发现虽然触发了上述错误,但webhook实际已激活并可以正常运行,因此我直接忽略该错误继续排查。
- 权限排查
由于我收到了woocommerce_rest_cannot_view错误,我也曾推测问题与权限配置相关。
系统信息
- WordPress版本:5.8.1
- WooCommerce版本:4.9.3
- 站点为基于Trellis、Bedrock和Sage搭建的自定义站点。
内容的提问来源于stack exchange,提问作者Zeth
相关产品推荐
相关产品推荐

