Skip to content

OpenAPI文档

本文档面向第三方系统开发人员,说明如何通过 OpenAPI 查询仓库物流渠道库存,进行订单出库创建,并查询订单状态订单物流信息

在线调试 >

1. 概述

项目说明
协议HTTPS
数据格式application/json; charset=UTF-8
请求方式均为 POST
字符编码UTF-8
鉴权方式AppKey + HMAC-SHA256 签名(无需登录 Token)

接口清单(共 13 个):

序号接口名称路径
1获取仓库列表POST /openapi/warehouse/list
2获取物流渠道列表POST /openapi/shipping/list
3按 SKU 查询库存POST /openapi/inventory/query
4分页查询库存POST /openapi/inventory/page
5订单出库创建POST /openapi/order/create
6根据计划id查询订单列表POST /openapi/order/listByPlan
7订单状态查询POST /openapi/order/status
8订单物流查询POST /openapi/order/tracking
9查询产品分类树POST /openapi/goods/category/list
10创建商品POST /openapi/goods/create
11更新商品POST /openapi/goods/update
12查询商品SKUPOST /openapi/goods/get
13查询商品SKU 分页POST /openapi/goods/page

Base URL 由运营方在开通 AppKey 时提供,下文以 {baseUrl} 表示,例如 https://wms.example.com

2. 鉴权与签名

所有 /openapi/** 接口均需在 HTTP 请求头中携带以下 4 个字段:

请求头必填说明
App-Key开放平台分配的客户端标识,格式:T{6位租户ID}_xxx,例如 T123456_merchant_a
TimestampUnix 时间戳(),与服务端时间偏差不得超过 5 分钟
Nonce随机字符串,5 分钟内不可重复(防重放)
Sign请求签名,见下方算法

2.1 签名算法

  1. 取请求体参与签名的字符串(无 Body 时使用空字符串 ""

  2. JSON 规范化:若请求体为 JSON 对象或数组,先解析再紧凑序列化(去除换行/缩进,字段顺序以解析结果为准)。因此 Postman 中可使用格式化 JSON,只要内容与签名时一致即可。

  3. 按顺序拼接字符串:

signRaw = AppKey + Timestamp + Nonce + RequestBody
  1. 使用 AppSecretsignRawHMAC-SHA256,输出大写十六进制 字符串(固定 64 位),即为 Sign

Java 示例:

java
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(appSecret.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
byte[] digest = mac.doFinal(signRaw.getBytes(StandardCharsets.UTF_8));
String sign = HexFormat.of().formatHex(digest).toUpperCase();

Python 示例:

python
import hmac
import hashlib

sign = hmac.new(
    app_secret.encode("utf-8"),
    sign_raw.encode("utf-8"),
    hashlib.sha256
).hexdigest().upper()

2.2 签名示例

假设:

  • AppKey = T123456_test
  • AppSecret = your_secret
  • Timestamp = 1719500000
  • Nonce = abc123def456
  • RequestBody = {"warehouseCode":"JP001"}

则:

signRaw = T123456_test1719500000abc123def456{"warehouseCode":"JP001"}
Sign    = HMAC-SHA256(signRaw, your_secret) → 大写 HEX(64 位)

2.3 联调签名工具(推荐)

开发联调可调用内部接口 POST /openApi/debug/buildHeaders(需登录白名单),请求示例:

json
{
  "appKey": "T755003_xxxx",
  "appSecret": "your_secret",
  "body": {
    "warehouseCode": "JP001",
    "orderList": []
  }
}
  • body:嵌套 JSON,无需转义(推荐)
  • 返回 headers 可直接复制到业务 OpenAPI 请求头
  • 返回 requestBody 为参与签名的规范化 JSON 字符串
  • 业务接口 Body 可与 body 字段格式不同(换行/缩进不影响),JSON 内容一致即可

2.4 限流

每个 AppKey 默认限制:60 次 / 60 秒。超出后返回 code=429

3. 统一响应格式

所有 OpenAPI 接口响应均为 JSON,结构如下:

json
{
  "code": 0,
  "message": "success",
  "data": {}
}
字段类型说明
codeint业务状态码,0 表示成功
messagestring状态描述
dataobject / array / null业务数据,失败时通常为 null

3.1 状态码说明

鉴权层错误(Filter 拦截,未进入业务逻辑):

codemessage说明
0success成功
401AppKey InvalidAppKey 缺失、格式错误或租户无效
402Sign Invalid签名不正确
403Client Not Found客户端不存在或未绑定商户
404Client Disabled客户端已禁用或已过期
406Request Expired时间戳超出 5 分钟窗口
407Duplicate RequestNonce 重复(重放请求)
429Request Rate Limited触发限流
500System Error系统异常

业务层错误(进入 Controller 后返回):

code常见 message说明
500客户端未绑定商户AppKey 对应客户端未关联商户
500仓库不存在或已停用传入的 warehouseCode 无效或仓库已禁用
500订单不存在sourceOrderNo 未查到对应订单出库记录
500warehouseCode不能为空参数校验失败
500orderList不能为空参数校验失败
500orderList最多200条订单列表超过上限
500sourceOrderNo不能为空参数校验失败
500skuList不能为空参数校验失败
500skuList最多200条SKU 列表超过上限
500specifiedCarrier仅允许yamato_takkyubin(ヤマト運輸•宅配便)指定发送方式不合法
500deliveryDate格式须为yyyy-MM-dd配送日期格式错误
500deliveryTimeSlot仅允许812、1416、1618、1820、1921配送时间段不合法

HTTP 状态码始终为 200,请以响应体中的 code 判断是否成功。

4. 接口详情

请前往OpenAPI开放平台查看接口详情

查看接口详情 >

5. 完整调用示例(cURL)

以「获取仓库列表」为例:

bash
# 变量(请替换为实际值)
BASE_URL="https://wms.example.com"
APP_KEY="T123456_your_client"
APP_SECRET="your_app_secret"
TIMESTAMP=$(date +%s)
NONCE=$(uuidgen | tr -d '-')
BODY='{}'

# 计算签名(需自行实现 HMAC-SHA256,或使用下方说明的工具语言)
SIGN_RAW="${APP_KEY}${TIMESTAMP}${NONCE}${BODY}"
# SIGN = HMAC-SHA256(SIGN_RAW, APP_SECRET) 大写 HEX

curl -X POST "${BASE_URL}/openapi/warehouse/list" \
  -H "Content-Type: application/json" \
  -H "App-Key: ${APP_KEY}" \
  -H "Timestamp: ${TIMESTAMP}" \
  -H "Nonce: ${NONCE}" \
  -H "Sign: ${SIGN}" \
  -d "${BODY}"

6. 对接建议

  1. 先调仓库列表:获取有效的 warehouseCode,再调用物流渠道与库存接口。

  2. 库存同步策略

    • SKU 数量较少、需精确查询时,使用 /inventory/query
    • 需全量同步时,使用 /inventory/page 分页拉取(建议 pageSize=500
  3. Nonce 生成:建议使用 UUID 或雪花 ID,确保每次请求唯一。

  4. 时钟同步:客户端服务器时间与标准时间偏差应控制在 5 分钟以内。

  5. 错误重试407 Duplicate Request 请更换 Nonce 后重试;429 请降频或退避重试;406 请校准时间后重试。

  6. 数据隔离:订单与库存数据仅包含 AppKey 绑定商户的数据,无法查询其他商户数据。

  7. 订单查询建议:创建订单后可用 /openapi/order/status 轮询最新状态;需要物流单号、承运商等信息时,调用 /openapi/order/tracking

7. 附录:库存字段说明

字段业务含义
availableQty当前可用于下单/分配的库存数量
lockedQty已被订单或业务占用、尚未出库的数量
onwayQty已发货在途、尚未入库完成的数量

OSL海外仓 帮助中心

OSL海外仓 帮助中心