使用Google App Script的UrlFetchApp调用WooCommerce API POST请求返回空响应
Google Apps Script调用WooCommerce API创建客户返回空数组(POST被识别为GET)
问题描述
使用Google Apps Script的UrlFetchApp复现WooCommerce API创建客户的请求时,返回状态码200但响应为空数组[],POST请求似乎被当作GET处理。补充信息:
- 调用
customers端点的GET请求返回空数组(站点为新站点,无客户) - 调用
orders端点的GET请求能正常返回测试订单列表 - Postman测试同样请求结果一致
排查与解决方案
1. 验证API密钥权限
确保使用的Consumer Key(ck)和Consumer Secret(cs)拥有read_write权限,而非只读权限。若密钥为只读,POST请求会被静默降级为GET,返回空客户列表。
- 登录WooCommerce后台,进入
WooCommerce > 设置 > 高级 > REST API,检查对应密钥的权限配置。
2. 补全URL协议
配置中的domain必须包含完整的HTTPS协议(如https://yourdomain.com),缺失协议会导致重定向,POST请求被自动转为GET。修改配置对象:
let p = { "ck":"myck", "cs":"mycs", "domain":"https://mydomain.com", "api_version":"/wp-json/wc/v3/" };
3. 禁用自动重定向跟随
UrlFetchApp默认自动跟随重定向,可能导致POST请求在跳转时转为GET。在请求选项中添加followRedirects: false并开启异常捕获:
var options = { 'method': 'post', 'headers': headers, 'contentType' : 'application/json', 'muteHttpExceptions': true, 'followRedirects': false, 'payload':JSON.stringify(customer) }
若返回3xx状态码,说明存在重定向问题,需修正URL。
4. 添加必填的密码字段
WooCommerce创建客户的API中,password是必填字段(除非站点配置自动生成密码)。缺失该字段会导致请求无法创建客户,返回异常空响应。修改客户对象:
let customer = { "email": "john.doe@example.com", "first_name": "John", "last_name": "Doe", "username": "john.doe", "password": "MySecurePass123!", // 添加必填密码字段 "billing": { ... }, "shipping": { ... } }
5. 检查站点固定链接设置
WooCommerce REST API要求站点使用非默认的固定链接结构(如“文章名称”),默认的?p=123格式会导致API无法正确识别POST请求。
- 登录WordPress后台,进入
设置 > 固定链接,选择非默认选项并保存设置。
内容的提问来源于stack exchange,提问作者Giulio Cornelio Grossi
相关产品推荐
相关产品推荐

