ERP API(WMS Response)文档汇总
1. 接口概述
ERP API(WMS Response)是 OMS 系统提供的接收方接口,用于接收第三方 WMS 平台推送的仓储业务数据。本文档汇总了所有 WMS 接收方接口的详细信息,包括发货单、入库单、出库单、退货单、盘点、库存异动、商品、转储单、加工单等业务接口。
接口方向:第三方 WMS 平台 → OMS 系统(接收方)
与 OpenAPI 的区别:
- OpenAPI:OMS 系统对外提供接口,供外部系统调用 OMS 功能(查询、操作等)
- ERP API(WMS Response):第三方 WMS 平台推送数据到 OMS,OMS 作为接收端处理数据
2. API 调用基础
2.1 请求方式
所有接口均支持 POST 方式请求。
2.2 请求URL
http(s)://[域名]/index.php/api2.3 系统级参数
所有接口请求必须包含以下系统级参数:
| 参数名 | 类型 | 必选 | 描述 |
|---|---|---|---|
| flag | string | 是 | 接入标识,固定值:erpapi |
| app_id | string | 是 | 应用ID,如:ecos.ome |
| certi_id | string | 是 | 证书ID,系统证书编号 |
| from_node_id | string | 是 | 来源节点ID,推送方节点ID |
| node_id | string | 是 | 目标节点ID,店铺节点ID(OMS节点) |
| node_type | string | 是 | 节点类型,如:ecos.ome |
| timestamp | int | 是 | 时间戳,10位时间戳(单位:秒) |
| method | string | 是 | 接口方法名,格式:wms.{resource}.{action},如:wms.delivery.status_update |
| sign | string | 是 | 签名,用于验证请求合法性,详见签名算法章节 |
| format | string | 否 | 响应格式,可选值:json(默认) |
| v | string | 否 | API版本号,如:1.0 |
3. 签名算法
3.1 签名生成步骤
- 收集所有请求参数(不包括
sign本身) - 按照参数名的 ASCII 码顺序进行排序(
ksort) - 递归拼接参数名和参数值(对于嵌套数组,递归处理)
- 对拼接后的字符串进行 MD5 加密,再转大写
- 将上一步的结果与
token(接口密钥)拼接 - 再次进行 MD5 加密并转大写,得到最终签名
3.2 签名生成公式
sign = strtoupper(md5(strtoupper(md5(assemble($params))). $token))3.3 签名算法要点
- 参与签名的参数集合不包含
sign本身 - 参数按键名排序后按约定拼装
- 首次 MD5 后转大写,与
token拼接后再 MD5,最终再转大写 - 保持编码一致(UTF-8)、去除多余空白
- 对于布尔值,转换为 1 或 0
- 对于嵌套数组,递归处理
3.4 签名算法代码示例(PHP)
php
/**
* 生成签名算法函数
*
* @param $params
* @param $token
* @return string
*/
function gen_sign($params, $token)
{
return strtoupper(md5(strtoupper(md5(assemble($params))). $token));
}
/**
* 组装签名参数
*
* @param $params
* @return string|null
*/
function assemble($params)
{
if (!is_array($params)) {
return null;
}
// ksort
ksort($params);
// sign
$sign = '';
foreach ($params as $key => $val)
{
if (is_null($val)) {
continue;
}
if (is_array($val)) {
$sign .= $key . assemble($val);
} else {
$sign .= $key . $val;
}
}
return $sign;
}
/**
* 系统参数
*
* @param $flag
* @return array
*/
function system_params($flag)
{
$params['flag'] = $flag;
$params['type'] = 'json';
$params['charset'] = 'utf-8';
$params['ver'] = '1';
$params['timestamp'] = time();
return $params;
}
// erpapi标识
$flag = 'erpapi';
// token:config目录下certi.php中获取(没有则为空)
$token = 'your_interface_key';
//set params
$setParams = array(
'app_id' => 'ecos.ome',
'node_type' => 'ecos.ome',
'callback_url' => '', //回调url
'certi_id' => '20215858518', //证书ID
'from_node_id' => '20218888', //节点ID
'node_id' => '1311861837', //店铺节点node_id
);
// 系统级参数
$systemParams = system_params($flag);
$systemParams = array_merge($systemParams, $setParams);
// 请求参数
$requestParams = array();
// 组装请求参数
$params = array_merge($systemParams, $requestParams);
// 生成签名
$params['sign'] = gen_sign($params, $token);4. 接口响应格式
4.1 响应格式说明
所有接口响应格式统一为 JSON,包含以下字段:
| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| rsp | string | 是 | 响应状态:succ(成功)或 fail(失败) |
| msg | string | 是/否 | 响应消息(成功时包含操作描述,失败时包含错误信息) |
| data | object | 否 | 响应数据(成功时可能包含单号等信息,失败时可能包含错误详情) |
4.2 成功响应示例
json
{
"rsp": "succ",
"msg": "发货单状态更新成功",
"data": {
"delivery_bn": "D20250101001"
}
}4.3 失败响应示例
json
{
"rsp": "fail",
"msg": "发货单号必填"
}5. 系统级错误码
| 错误码 | 描述 | 可能原因 |
|---|---|---|
| E_PARAM | 参数缺失或格式不正确 | 必填参数缺失、参数类型错误 |
| E_STATE | 业务状态不允许 | 状态不允许当前操作 |
| E_DUPLICATE | 重复提交 | 单号已存在、重复推送等 |
| E_AMOUNT | 数量校验不通过 | 数量不一致等 |
| E_INTERNAL | 内部处理异常 | 数据库错误、系统异常等 |
| E_EMPTY | 数据为空 | 明细不可为空等 |
| E_SIGN | 签名错误 | 签名算法错误、token 不正确等 |
6. 支持的接口模块列表
6.1 delivery(发货单)
- 接口名:发货单接口
- 请求方法:POST
- 功能描述:发货单状态更新,包括发货、打印、审核、取消等状态
- 主要方法:
| 接口方法 | 功能描述 |
|---|---|
wms.delivery.status_update | 发货单状态更新(支持 delivery、print、check、cancel、update、accept、pick、package 等状态) |
- 文档链接:delivery.md
6.2 stockin(入库单)
- 接口名:入库单接口
- 请求方法:POST
- 功能描述:入库单状态更新,支持采购入库、调拨入库、残损入库等
- 主要方法:
| 接口方法 | 功能描述 |
|---|---|
wms.stockin.status_update | 入库单状态更新(支持 FINISH、PARTIN 状态) |
- 文档链接:stockin.md
6.3 stockout(出库单)
- 接口名:出库单接口
- 请求方法:POST
- 功能描述:出库单状态更新,支持采购退货、调拨出库、残损出库等
- 主要方法:
| 接口方法 | 功能描述 |
|---|---|
wms.stockout.status_update | 出库单状态更新(支持 FINISH、PARTIN 状态) |
- 文档链接:stockout.md
6.4 reship(退货单)
- 接口名:退货单接口
- 请求方法:POST
- 功能描述:退货单状态更新、新建完成、服务退款等
- 主要方法:
| 接口方法 | 功能描述 |
|---|---|
wms.reship.status_update | 退货单状态更新(支持 FINISH、PARTIN、CLOSE、FAILED、DENY 等状态) |
wms.reship.add_complete | 新建与完成退货单 |
wms.reship.service_refund | WMS退货服务单退款消息 |
- 文档链接:reship.md
6.5 inventory(盘点)
- 接口名:盘点接口
- 请求方法:POST
- 功能描述:库存盘点数据推送,支持全量盘点和增量盘点
- 主要方法:
| 接口方法 | 功能描述 |
|---|---|
wms.inventory.add | 新增盘点数据(支持全量/增量模式) |
- 文档链接:inventory.md
6.6 stock(库存异动)
- 接口名:库存异动接口
- 请求方法:POST
- 功能描述:库存变化数据推送,实时同步库存变动
- 主要方法:
| 接口方法 | 功能描述 |
|---|---|
wms.stock.quantity | 库存异动数据推送 |
- 文档链接:stock.md
6.7 goods(商品)
- 接口名:商品接口
- 请求方法:POST
- 功能描述:商品信息变更推送
- 主要方法:
| 接口方法 | 功能描述 |
|---|---|
wms.goods.status_update | 商品信息变更MQ消息推送 |
- 文档链接:goods.md
6.8 transferorder(转储单)
- 接口名:转储单接口
- 请求方法:POST
- 功能描述:转储单状态更新,支持仓库间调拨
- 主要方法:
| 接口方法 | 功能描述 |
|---|---|
wms.transferorder.update | 转储单状态更新 |
- 文档链接:transferorder.md
6.9 storeprocess(加工单)
- 接口名:加工单接口
- 请求方法:POST
- 功能描述:加工单确认,处理加工完成数据
- 主要方法:
| 接口方法 | 功能描述 |
|---|---|
wms.storeprocess.status_update | 加工单确认(包含原料和成品明细) |
- 文档链接:storeprocess.md
6.10 stockdump(转储单)
- 接口名:转储单接口(简化版)
- 请求方法:POST
- 功能描述:转储单状态更新
- 主要方法:
| 接口方法 | 功能描述 |
|---|---|
wms.stockdump.status_update | 转储单状态更新 |
- 文档链接:stockdump.md
6.11 receiverinfo(收货人信息)
- 接口名:收货人信息接口
- 请求方法:POST
- 功能描述:发货单地址明文查询
- 主要方法:
| 接口方法 | 功能描述 |
|---|---|
wms.receiverinfo.query | 发货单地址明文查询 |
- 文档链接:receiverinfo.md
7. 接口调用示例
7.1 PHP 示例(发货单状态更新)
php
<?php
/**
* 生成签名算法函数
*
* @param $params
* @param $token
* @return string
*/
function gen_sign($params, $token)
{
return strtoupper(md5(strtoupper(md5(assemble($params))). $token));
}
/**
* 组装签名参数
*
* @param $params
* @return string|null
*/
function assemble($params)
{
if (!is_array($params)) {
return null;
}
ksort($params);
$sign = '';
foreach ($params as $key => $val)
{
if (is_null($val)) {
continue;
}
if (is_array($val)) {
$sign .= $key . assemble($val);
} else {
$sign .= $key . $val;
}
}
return $sign;
}
/**
* 系统参数
*
* @param $flag
* @return array
*/
function system_params($flag)
{
$params['flag'] = $flag;
$params['type'] = 'json';
$params['charset'] = 'utf-8';
$params['ver'] = '1';
$params['timestamp'] = time();
return $params;
}
// erpapi标识
$flag = 'erpapi';
// token:config目录下certi.php中获取(没有则为空)
$token = 'your_interface_key';
//set params
$setParams = array(
'app_id' => 'ecos.ome',
'node_type' => 'ecos.ome',
'certi_id' => '20215858518', //证书ID
'from_node_id' => '20218888', //节点ID
'node_id' => '1311861837', //店铺节点node_id
);
// 系统级参数
$systemParams = system_params($flag);
$systemParams = array_merge($systemParams, $setParams);
// 业务参数
$requestParams = array(
'method' => 'wms.delivery.status_update',
'delivery_bn' => 'D20250101001',
'status' => 'DELIVERY',
'logi_no' => 'SF1234567890',
'logistics' => 'SF',
'warehouse' => 'WH001',
'weight' => '1.5',
'operate_time' => '2025-01-01 10:00:00',
'item' => json_encode(array(
array(
'product_bn' => 'SKU001',
'num' => 2,
)
)),
);
// 组装请求参数
$params = array_merge($systemParams, $requestParams);
// 生成签名
$params['sign'] = gen_sign($params, $token);
// 发送请求
$url = 'http://your-domain.com/index.php/api';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;8. 注意事项
- 接口方向:本文档描述的是接收方接口,由第三方 WMS 平台推送数据到 OMS 系统
- 签名验证:所有接口请求必须包含有效的签名,签名算法见第 3 章
- 参数格式:复杂参数(如明细列表)需要 JSON 编码后传递
- 时间格式:时间参数统一使用
Y-m-d H:i:s格式 - 重量单位:重量参数单位为千克,系统内部会转换为克(乘以 1000)
- 批次信息:支持批次管理的商品需要传递批次信息(批次号、生产日期、过期日期等)
- 唯一码:支持唯一码管理的商品需要传递序列号列表
- 状态映射:WMS 状态与 OMS 状态存在映射关系,详见各接口文档
- 幂等性:相同单号重复推送时,系统会进行幂等处理
- 部分入库/出库:支持部分入库(PARTIN)和部分出库(PARTIN)状态
9. 快速导航
10. 附录
10.1 状态枚举说明
发货单状态:
ACCEPT- 已接单PRINT- 已打印PICK- 已拣货CHECK- 已审核PACKAGE- 已打包DELIVERY- 已发货CLOSE- 已关闭FAILED- 失败UPDATE- 更新
入库单/出库单状态:
FINISH- 完成PARTIN- 部分入库/出库
退货单状态:
FINISH- 完成PARTIN- 部分入库CLOSE- 已关闭FAILED- 失败DENY- 拒绝
10.2 入库类型说明
PURCHASE- 采购入库ALLCOATE- 调拨入库DEFECTIVE- 残损入库WAREHOUSE- 转仓入库OTHER- 其他入库
10.3 出库类型说明
PURCHASE_RETURN- 采购退货ALLCOATE- 调拨出库DEFECTIVE- 残损出库VOPSTOCKOUT- JIT出库OTHER- 其他出库
10.4 库存类型说明
ZP- 良品CC- 残次品
