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

使用Square Node.js SDK Orders API时location_id参数报错求助

问题:调用Square API的searchOrders时始终提示"Must provide at least 1 location_id"

问题详情

我通过Node.js调用Square API的ordersApi.searchOrders方法,代码如下:

const customerOrders = await ordersApi.searchOrders({location_ids: ["MY_LOCATION_ID"]});

后续还有其他参数/过滤器,但因location_id问题无法执行到该环节。

根据Square官方文档,该接口要求请求体为包含location_ids键的对象,对应字符串类型的位置ID数组,我仅有一个位置ID。

我已尝试十多种传递方式,包括:

  • 仅传单个位置ID(非数组)
  • 传包含ID的数组
  • location_ids对应单个字符串
  • 硬编码ID
  • 通过程序获取并传递ID

但始终收到400错误:"Must provide at least 1 location_id"。确认所有必填项和参数顺序合规,否则不会触发该特定错误。

这个项目能帮小企业每周节省数百美元工时——此前因第三方(Squarespace/Acuity)未触发忠诚度API,员工需手动添加积分。

解决思路

1. 确认请求体的嵌套结构

Square Node.js SDK要求searchOrders的请求体需包裹在body字段中,而非直接传递顶层对象。调整代码如下:

const customerOrders = await ordersApi.searchOrders({
  body: {
    location_ids: ["MY_LOCATION_ID"]
  }
});

直接传顶层对象会导致服务器无法识别location_ids字段,进而返回缺少参数的错误。

2. 验证Location ID的有效性

调用locationsApi.listLocations()获取账户下所有有效Location ID,确认你使用的ID在返回结果中:

const locations = await locationsApi.listLocations();
console.log("有效Location ID列表:", locations.locations.map(loc => loc.id));

若ID不在列表中,说明ID无效,需替换为正确的有效ID。

3. 检查SDK版本兼容性

确保使用的Square SDK版本与官方文档匹配,旧版本可能存在请求结构差异。执行命令更新至最新版本:

npm update square

4. 开启调试查看实际请求内容

初始化Square客户端时开启调试日志,查看实际发送的请求体是否包含location_ids:

const { Client, Environment } = require('square');
const client = new Client({
  accessToken: '你的访问令牌',
  environment: Environment.Sandbox, // 生产环境替换为Environment.Production
  logLevel: 'debug'
});

通过控制台输出的请求详情,可判断参数是否在传递过程中丢失或格式错误。

5. 确认权限与授权范围

检查Square API访问令牌是否拥有ORDERS_READ权限,且授权账户包含该Location ID。权限不足可能会伪装成参数错误提示,需在Square开发者后台验证令牌权限。

内容的提问来源于stack exchange,提问作者R Greenstreet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:56:13