Install
openclaw skills install orange-office-api橙子通(orange-office.cn)库存管理系统 API 自动化。用于通过 API 创建出库单、查询库存、管理主播仓库等,无需浏览器。
openclaw skills install orange-office-api通过 API 操作橙子通库存管理系统,包括创建出库单、查询库存、管理主播仓库等。
68756c61ASP.NET_SessionId=<当前有效会话>| 系统名 | teamId | 用途 |
|---|---|---|
| 库存通-库存通 | 952393 | 固定仓库出入库 |
| 库存通-幼稚鬼潮玩 | 724308 | 主播出库用这个 |
import hashlib
SALT = '68756c61'
def md5(data: str) -> str:
return hashlib.md5((SALT + data).encode()).digest().hex()
所有 API 请求 body 经过签名,sign = md5(json.dumps(body, separators=(',',':')))
headers = {
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest',
'sign': md5(json.dumps(body, separators=(',',':'))),
'client': 'pcWeb',
'Cookie': f'ASP.NET_SessionId={SESSION}'
}
| 功能 | 路径 | 说明 |
|---|---|---|
| 创建出库单 | POST /stock/stockout/create | |
| 修改出库单 | POST /stock/stockout/update | |
| 删除出库单 | POST /stock/stockout/delete | |
| 获取出库单列表 | POST /stock/stockout/getList | |
| 获取出库单详情 | POST /stock/stockout/getInfo | |
| 查询库存 | POST /stock/prod/getStockList | 必须带 locId |
POST /stock/prod/getStockList
{
"keyword": "", "catId": "", "page": 1, "rows": 500,
"sort": "barcode", "order": "descending",
"teamId": 724308, # 场景B用724308,场景A用952393
"ifValue": "Y",
"ifShowSku": "Y",
"ifShowZero": "N",
"locId": 63 # 仓库ID,必须填写
}
返回:response.obj.list[] — 每项含 prodId、prodName、stockQty、outPrice
POST /stock/stockout/create
{
"teamId": 724308,
"outNo": "", # 空字符串自动生成
"outDate": "2026-03-26",
"refId": 695620, # 抖店售卖
"refName": "抖店售卖",
"locId": 63, # 仓库ID
"locName": "梅天娇",
"amount": 1234.56, # 总金额 = 各行 amount 之和
"remark": "机器人操作",
"itemList": [
{
"prodId": 9973574,
"qty": 24,
"price": 15, # 单价从 getStockList 的 outPrice 字段获取
"amount": 360, # qty × price,保留2位小数
"outQty": 24,
"stockQty": 36
}
]
}
注意:
outPrice(不是 price)amount = qty × outPrice,保留2位小数amount = 各行 amount 之和系统:库存通-幼稚鬼潮玩(teamId=724308)
| 主播 | locId |
|---|---|
| 邓晓美 | 15 |
| 梅天娇 | 63 |
| 罗文婧 | 57 |
| 苟林分 | 71 |
| 张儒尊 | 16 |
| 廖紫帆 | 68 |
| 冉红霞 | 9 |
| 周语妍 | 7 |
| 杜瑶 | 79 |
| 倪玉婷 | 44 |
| 曹洢珂晗 | 80 |
| 谷乐欣 | 49 |
| 高李伟 | 69 |
| 王馨宇 | 30 |
| 李妍茜 | 29 |
| 钟雨欣 | 8 |
| 黄敏慧 | 50 |
| 廖文琪 | 3 |
| 杨名 | 10 |
| 刘明月 | 4 |
dxXB52LJqnrEb4pjcQQQjq598qjMp697| 主播 | tableId | 销售数量字段 |
|---|---|---|
| 邓晓美 | yj6ZAgX | Ccg9VfH |
| 梅天娇 | exNEdWq | lFRkHI3 |
| 罗文婧 | TZvYd1V | ACXQniC |
| 苟林分 | kIcLRmk | YdlC9og |
| 张儒尊 | yy2mQJS | 6WcPYAw |
| 廖紫帆 | ER5lrFr | LMixcf1 |
| 冉红霞 | YMnnPwV | tzjnNNK |
| 周语妍 | JR04qLu | qKu49Ok |
| 杜瑶 | 143LNaM | Y3XobF0 |
| 倪玉婷 | HTfR4Pu | BKCiXNl |
| 曹洢珂晗 | xyAVrjr | KilxGYr |
| 谷乐欣 | MwtqlRv | 05RaEdP |
| 高李伟 | ETlz1vw | Y3FmkMG |
| 王馨宇 | 6xK7UjK | So8eWZ5 |
| 李妍茜 | wUBEIED | dtZXTtB |
| 钟雨欣 | 3P6EtSy | o9BFZd2 |
| 黄敏慧 | sXo9484 | vCBtAiB |
| 廖文琪 | vFkcdBh | BleldKK |
| 杨名 | 11ESFXj | OXj619G |
| 刘明月 | RFkRdbH | eKjh1jK |
注意:每个主播的"销售数量"字段ID可能不同,操作前必须先调用 get_fields 读取表头确认。
录入主播库存快照时,必须包含以下全部字段:
| 字段 | 说明 | 来源 |
|---|---|---|
| 日期 | 库存账面日期 | 手动指定,如 2026-03-27T00:00:00+08:00 |
| 商品编号 | 商品编码 | API getStockList 返回的 prodNo |
| 商品名称 | 商品全名 | API getStockList 返回的 prodName |
| 规格型号 | 包装规格 | API getStockList 返回的 prodSpec |
| 单位 | 计量单位 | API getStockList 返回的 unit |
| 库存数量 | 账面库存 | 计算得出(当前库存 + 当日出库回补) |
写入格式:使用 cells 而非 fields,每个字段对应其 fieldId:
const records = snapshot.map(item => ({
cells: {
[fieldId_日期]: '2026-03-27T00:00:00+08:00',
[fieldId_商品编号]: item.prodNo || '',
[fieldId_商品名称]: item.prodName,
[fieldId_规格型号]: item.prodSpec || '',
[fieldId_单位]: item.unit || '包',
[fieldId_库存数量]: item.qty,
// 以下字段填0或空
[fieldId_今日入库]: 0,
[fieldId_今日剩余]: 0,
[fieldId_销售金额]: '',
[fieldId_送出]: 0,
[fieldId_销售数量]: 0,
[fieldId_今日转仓]: 0
}
}));
日期格式:必须是 ISO 格式(如 2026-03-27T00:00:00+08:00),不能只写 2026-03-27。
计算3月27日库存快照:
getStockList 获取当前库存getList 查询日期=3月27日的出库单getInfo 获取明细3月28日之后做快照:由于3月27日之后可能还有出库,必须先查3月28日之后有无新的出库单,如有则同样回补。如果3月28日至今无出库单,直接用当前库存即为3月27日快照。
Q:保存时报"总金额错误"
A:确保每个商品的 amount = qty × outPrice,且总金额 obj.amount 等于各行 amount 之和
Q:商品找不到 A:用更短的关键词搜索相近商品名称
Q:Session 过期 A:重新登录并获取新的 Cookie