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

WooCommerce订单推送至Google Sheets时Google Script触发报错如何解决

WooCommerce webhook同步Google Sheets报错修复方案

代码中存在的核心错误

  • JSON解析写法错误:JSON.parse([e.postData.contents]) 多了一层数组包裹,JSON.parse接收的参数必须是字符串,不需要加[],否则会导致解析失败。
  • 变量未声明:代码中循环累加total前没有初始化该变量,会抛出未定义错误。
  • 数组长度调用错误:数组长度是属性不是方法,myData.line_items.length() 和 myData.fee_lines.length() 要去掉末尾的括号,改为.length,否则会报「不是函数」的错误。
  • WooCommerce字段取值路径错误:订单的姓名数据存储在billing对象下,直接取myData.first_name、myData.last_name会得到undefined,需要改为myData.billing.first_name和myData.billing.last_name。
  • 空值无兜底:如果address_2、customer_note等字段为空,拼接时会出现undefined,需要增加空值兜底处理。
  • 语法冗余:appendRow参数末尾多余的逗号可能在部分运行环境下引发异常,建议删除。

额外配置检查项

  • Google Apps Script部署时必须满足两个条件:执行身份选择「我(你的账号)」,访问权限设置为「任何人,甚至匿名用户」,否则WooCommerce的webhook请求会被权限拦截返回403。
  • 每次修改代码后必须重新部署新版本的Web App,直接保存代码不会更新已部署的线上版本。

修复后的完整代码

// GET请求响应函数
function doGet(e) {
  return HtmlService.createHtmlOutput("request received");
}

// POST请求响应函数(处理WooCommerce webhook数据)
function doPost(e) {
  // 修复JSON解析写法
  var myData = JSON.parse(e.postData.contents);
  var order_number = myData.number;
  var order_address = myData.billing.address_1 || '';
  var item = "";
  // 初始化total变量
  var total = 0;
  var url = "https://fivestars-delivery.com/mon-compte//driver-dashboard/?orderid=" + order_number;

  // 修复数组长度调用方式
  for (var i = 0; i < myData.line_items.length; ++i) {
    item += myData.line_items[i].product_id + "\n";
    total += parseInt(myData.line_items[i].total || 0);
  }

  var fees = "";
  // 修复数组长度调用方式
  for (var i = 0; i < myData.fee_lines.length; ++i) {
    fees += (myData.fee_lines[i].amount || '') + " " + (myData.fee_lines[i].name || '') + " - " + (myData.fee_lines[i].total || '') + "\n";
  }

  var discount = myData.discount_total || 0;
  // 修复姓名取值路径,增加空值兜底
  var nomClient = (myData.billing.first_name || '') + " " + (myData.billing.last_name || '');
  var order_total = myData.total || 0;
  var payment_method = myData.payment_method_title || '';
  var phone = myData.billing.phone || '';

  // 增加空值兜底
  var note = (myData.billing.address_2 || '') + "\n" + (myData.customer_note || '');

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  // 移除末尾多余逗号
  sheet.appendRow([order_number, " ", " ", " ", order_address, " ", "Attente d'envoi", url, order_total, payment_method, nomClient, phone, note, item + fees + discount]);
  // 返回正常响应避免webhook判定推送失败
  return ContentService.createTextOutput(JSON.stringify({"status":"success"})).setMimeType(ContentService.MimeType.JSON);
}

验证建议

你可以先复制一份WooCommerce的订单JSON示例,用接口测试工具直接POST到你的Web App地址,同时查看Apps Script的「执行」日志,就能快速定位剩余的异常问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:09:03