Woocommerce Webhook发送JSON数据至Google Sheets接收异常求助
异常原因分析
- 请求头异常波动:WooCommerce发送的部分请求未正确携带
Content-Type: application/json头,被误设为multipart/form-data等格式,导致Apps Script无法识别为纯文本JSON负载,自动将其归类为FileUpload类型,无法直接读取内容。 - Apps Script解析逻辑降级:近期Google对Apps Script入站请求解析逻辑做了灰度更新,当请求负载超过3KB且携带WooCommerce自定义请求头时,有概率触发解析降级,将JSON负载识别为文件上传对象,导致内容读取失败。
- 并发请求配额不足:短时间内多订单同时触发webhook时,Apps Script免费配额的并发处理能力有限,部分请求负载未被完整接收就进入解析流程,出现空负载的情况。
解决方案
1. 兼容Apps Script多类型负载解析
调整doPost函数的解析逻辑,同时兼容常规JSON和FileUpload类型的负载:
function doPost(e) { let orderData; try { // 优先读取常规JSON格式负载 if (e.postData?.contents) { orderData = JSON.parse(e.postData.contents); } // 兼容FileUpload类型的异常识别场景 else if (e.postData.toString() === "FileUpload") { const payloadBlob = e.postData; const rawContent = payloadBlob.getDataAsString("UTF-8"); orderData = JSON.parse(rawContent); } else { throw new Error("未识别到有效请求负载"); } // 此处写入原有插入表格的逻辑 } catch (error) { // 此处写入原有异常捕获记录逻辑 } }
2. 固定WooCommerce Webhook请求头
在WordPress主题的functions.php或wc-config.php中添加过滤器,强制指定webhook的请求头格式:
add_filter('woocommerce_webhook_headers', function($headers, $webhook) { // 替换为你实际使用的webhook ID/名称,做精准匹配 if ($webhook->get_id() === 123) { $headers['Content-Type'] = 'application/json'; } return $headers; }, 10, 2);
3. 优化Apps Script部署配置
- 进入Apps Script项目→右上角部署→管理部署→编辑
- 执行身份选择「你的账号邮箱」,有权访问的人选择「任何人,甚至匿名用户」,避免权限校验导致的请求截断
- 若订单并发量较高,可升级到Google Workspace付费版本,提升并发请求处理配额,降低解析降级概率
内容的提问来源于stack exchange,提问作者Usmantastic
相关产品推荐
相关产品推荐

