商品库存变更查询

仅提供已授权的门店数据服务:调用时通过 clientStoreSn 定位门店,平台校验该门店已完成授权(即客户门店与收钱吧门店已完成映射);未授权门店的商品库存变更数据无法查询。

1. 接口说明

按指定日期范围异步导出已授权门店的商品库存变更数据。开放平台受理请求后创建导出任务,任务完成后生成导出文件(库存流水明细 CSV、库存流水 movement Excel),再通过 notifyUrl 回调将下载链接通知开发者;任务失败时同样回调通知失败原因。

接口为异步导出模式:提交后立即返回受理结果,导出结果与任务状态通过回调通知异步获取,无需轮询。任务受理后异步执行导出,处理时长一般不超过 5 分钟,完成后通过 notifyUrl 回调通知开发者。

导出流程

导出流程时序图

  1. 开发者发起查询请求,携带门店、日期范围、回调地址 notifyUrl。
  2. 开放平台受理并创建该门店的商品库存变更导出任务。
  3. 任务完成:开放平台回调 notifyUrl,downloadUrls 为结果文件下载链接集合。
  4. 任务失败:开放平台回调 notifyUrl,携带失败原因(remark),请联系收钱吧运营人员处理。
项目 说明
接口路径 POST /open-api/v1/goods/stock/query
鉴权方式 HMAC-SHA256,见鉴权与签名
限流 以门店号(clientStoreSn)为维度进行限流,频率限制为 10 QPS

2. 请求参数

字段 类型 必填 示例值 说明
clientStoreSn String 是 SH001 客户门店号,平台据此查询映射的收钱吧门店并校验授权,仅返回该门店下的商品库存变更
sqbStoreSn String 否 1580000003443730 收钱吧门店号,可不传;如传则优先使用 sqbStoreSn,平台会校验其与 clientStoreSn 的映射关系
requestId String 是 req_001 请求标识,必传。本接口requestId 用于幂等去重,见幂等机制
startTime String 否 2026-01-01 开始日期,日维度(格式:yyyy-MM-dd)。与 endTime 组成查询时间范围,仅支持查询近 6 个月内的数据,查询跨度最大 31 天,不传时默认查询前一天数据
endTime String 否 2026-01-31 结束日期,日维度(格式:yyyy-MM-dd)。与 startTime 组成查询时间范围,仅支持查询近 6 个月内的数据,查询跨度最大 31 天,不传时默认查询前一天数据
notifyUrl String 是 https://3rd.example.com/stock/notify 结果回调地址。查询结果生成后回调此地址,回调内容包含 requestId、文件下载链接、生成状态、失败原因

请求示例

{
    "clientStoreSn": "SH001",
    "sqbStoreSn": "1580000003443730",
    "requestId": "req_001",
    "startTime": "2026-01-01",
    "endTime": "2026-01-31",
    "notifyUrl": "https://3rd.example.com/stock/notify"
}

3. 响应参数

接口为异步受理,响应 data 为受理结果,导出结果文件与任务状态通过回调通知异步获取:

字段 类型 必填 说明
data Object 是 受理结果,结构见 3.1 受理结果

3.1 受理结果

字段 类型 必填 示例值 说明
requestId String 是 req_001 与查询请求的 requestId 一致,用于关联导出结果

响应示例

{
    "code": 0,
    "message": "成功",
    "data": {
        "requestId": "req_001"
    }
}

3.2 回调通知(notifyUrl)

查询结果生成后,开放平台向请求中的 notifyUrl 发起回调通知:生成成功时携带结果文件下载链接,失败时携带失败原因。

回调请求(开放平台 → 开发者)

字段 类型 必填 说明
msgId String 是 消息 ID,平台生成,唯一标识,重试时不变,用于幂等去重
requestId String 是 与查询请求的 requestId 一致,用于关联查询结果
clientStoreSn String 是 客户门店号,与查询请求一致,便于多任务关联
downloadUrls Object 否 结果文件下载链接集合,生成成功时返回,各链接有效期 24 小时,结构见下方说明
status String 是 生成状态,枚举见商品枚举附录
remark String 否 失败原因,生成失败时返回

downloadUrls 结构说明

字段 类型 必填 说明
detailUrl String 是 库存流水明细文件下载链接
movementUrl String 是 库存movement 文件下载链接

回调请求示例

{
    "msgId": "MSG20260101120000001",
    "requestId": "req_001",
    "clientStoreSn": "SH001",
    "downloadUrls": {
        "detailUrl": "https://files.3rd.example.com/stock/2026-01-01/req_001_detail.csv",
        "movementUrl": "https://files.3rd.example.com/stock/2026-01-01/req_001_movement.csv"
    },
    "status": "SUCCESS",
    "remark": null
}

回调验签

回调请求与主动调用接口复用同一套签名鉴权规范(见鉴权与签名):签名参数通过请求头 X-AccessKey、X-Timestamp、X-Nonce、X-Signature 携带,接收方需使用自身 accessSecret 验签,验签不通过应丢弃该回调。防重放机制同样适用(X-Timestamp 与服务器时间差 ≤ 5 分钟,X-Nonce 5 分钟内不可重复使用)。

回调响应(开发者 → 开放平台)

回调必须遵循推送与回调机制,尤其是其中的响应要求(HTTP 200、Content-Type: application/json、Body 为 {"status": "success"}、3 秒内响应)为强制项,不满足即视为回调失败并触发重试;重试策略、幂等处理与消息兼容机制同见该文件。

4. 导出文件内容

导出文件包含两个文件:库存流水 movement 文件(Excel)与库存流水明细文件(CSV),分别对应回调 downloadUrls 中的 movementUrl 与 detailUrl。

4.1 库存流水 movement 文件(Excel)

每行一条商品的库存 movement 记录,字段如下:

字段 类型 必填 说明
sqbStoreSn String 是 收钱吧门店号
clientStoreSn String 是 客户门店号
spuId String 是 商品 id
clientSpuId String 是 客户商品 id
title String 是 商品标题
skuId String 是 规格 id
clientSkuId String 是 客户规格 id
skuName String 是 规格名称
openingDate String 是 期初日期,格式 yyyy-MM-dd
openingStock BigDecimal 是 期初库存
stockIncrease BigDecimal 是 库存增加
stockDecrease BigDecimal 是 库存减少
closingDate String 是 期末日期,格式 yyyy-MM-dd
closingStock BigDecimal 是 期末库存

示例(10 条)

sqbStoreSn clientStoreSn spuId clientSpuId title skuId clientSkuId skuName openingDate openingStock stockIncrease stockDecrease closingDate closingStock
1580000003443730 SH001 9990418 SPU1001 统一老坛泡椒面 9990418 SKU1001 默认 2026-01-01 50 20 5 2026-01-31 65
1580000003443730 SH001 9990099 SPU1002 伊利纯牛奶250ml 9990099 SKU1002 默认 2026-01-01 80 30 25 2026-01-31 85
1580000003443730 SH001 9990111 SPU1003 可口可乐330ml 9990111 SKU1003 330ml 2026-01-01 100 50 40 2026-01-31 110
1580000003443730 SH001 9990122 SPU1004 乐事薯片原味 9990122 SKU1004 原味 2026-01-01 45 15 20 2026-01-31 40
1580000003443730 SH001 9990133 SPU1005 双汇王中王火腿肠 9990133 SKU1005 默认 2026-01-01 60 20 18 2026-01-31 62
1580000003443730 SH001 9990144 SPU1006 农夫山泉550ml 9990144 SKU1006 550ml 2026-01-01 200 60 55 2026-01-31 205
1580000003443730 SH001 9990155 SPU1007 奥利奥原味夹心饼干 9990155 SKU1007 原味 2026-01-01 40 12 15 2026-01-31 37
1580000003443730 SH001 9990166 SPU1008 青岛啤酒500ml 9990166 SKU1008 500ml 2026-01-01 90 30 35 2026-01-31 85
1580000003443730 SH001 9990177 SPU1009 中华健齿白牙膏120g 9990177 SKU1009 默认 2026-01-01 25 10 6 2026-01-31 29
1580000003443730 SH001 9990188 SPU1010 康师傅香辣牛肉面 9990188 SKU1010 默认 2026-01-01 30 10 8 2026-01-31 32

4.2 库存流水明细文件(CSV)

导出文件为 CSV 格式,每行一条库存变更流水记录,由库存流水字段与商品信息字段拼接成宽表:

extra(Map)、extendBarcodes(List)等复合类型字段,以 JSON 字符串形式输出。

字段 类型 必填 说明
id Long 是 库存流水 id
stockId String 是 库存 id
sqbStoreId String 是 收钱吧门店 id
sqbStoreSn String 是 收钱吧门店号
clientStoreSn String 是 客户门店号
bizScene String 是 业务场景,枚举见商品枚举附录
bizType Integer 是 业务类型,枚举见商品枚举附录
bizSn String 否 业务单号(订单号、入库单号等)
operatorId String 否 操作员 id
before BigDecimal 是 变更前库存值
after BigDecimal 是 变更后库存值
change BigDecimal 是 变化量(带符号,正增负减)
changeType Integer 是 库存变更类型,枚举见商品枚举附录
extra Map 否 扩展信息(如来源 source、备注 remark、商品名等)
ctime Long 是 创建时间(毫秒)
mtime Long 是 更新时间(毫秒)
spuId String 是 商品 id
clientSpuId String 是 客户商品 id
skuId String 是 规格 id
clientSkuId String 是 客户规格 id
skuName String 是 规格名称
title String 是 商品标题
pinyin String 否 首字母拼音
barcode String 否 条码
extendBarcodes List 否 副条码
productType Integer 是 商品类型,枚举见商品枚举附录
saleType Integer 是 售卖类型,枚举见商品枚举附录
unit String 是 单位
coverImage String 否 封面图 URL
description String 否 商品描述
sysCode String 否 简码
pluCode Long 否 条码秤 PLU 码
saleStatus Integer 是 售卖状态,枚举见商品枚举附录
status Integer 是 状态,枚举见商品枚举附录
categoryId String 否 分类 id
supplierId Long 否 供应商 id
brandId Long 否 品牌 id

示例(10 条)

extra、extendBarcodes 等复合字段以 JSON 字符串形式输出,字段含逗号/引号时按 CSV 规则使用双引号包裹转义。

id,stockId,sqbStoreId,sqbStoreSn,clientStoreSn,bizScene,bizType,bizSn,operatorId,before,after,change,changeType,extra,ctime,mtime,spuId,clientSpuId,skuId,clientSkuId,skuName,title,pinyin,barcode,extendBarcodes,productType,saleType,unit,coverImage,description,sysCode,pluCode,saleStatus,status,categoryId,supplierId,brandId
10001,stock1001,store001,1580000003443730,SH001,retail,1,ORDER20260101001,OP001,50,48,-2,3,"{""source"": ""POS"", ""remark"": ""销售出库""}",1767571200000,1767571200000,9990418,SPU1001,9990418,SKU1001,默认,统一老坛泡椒面,tyltjpm,6925303797515,[],1,1,袋,,,JPM001,9990418,1,0,352984,50001,60001
10002,stock1001,store001,1580000003443730,SH001,retail,4,PO20260102001,OP001,48,68,20,2,"{""source"": ""ERP"", ""remark"": ""采购入库""}",1767571201000,1767571201000,9990418,SPU1001,9990418,SKU1001,默认,统一老坛泡椒面,tyltjpm,6925303797515,[],1,1,袋,,,JPM001,9990418,1,0,352984,50001,60001
10003,stock1002,store001,1580000003443730,SH001,retail,3,ADJ20260102001,OP001,80,78,-2,1,"{""source"": ""MANUAL"", ""remark"": ""盘点调整""}",1767571202000,1767571202000,9990099,SPU1002,9990099,SKU1002,默认,伊利纯牛奶250ml,ylcnn,6907992822716,[],1,1,盒,,,,,1,0,352984,50002,60002
10004,stock1003,store001,1580000003443730,SH001,retail,1,ORDER20260103001,OP001,100,97,-3,3,"{""source"": ""POS"", ""remark"": ""销售出库""}",1767571203000,1767571203000,9990111,SPU1003,9990111,SKU1003,330ml,可口可乐330ml,kkkl,6922255800510,[],1,1,瓶,,,,,1,0,352985,50003,60003
10005,stock1004,store001,1580000003443730,SH001,retail,5,RO20260103001,OP001,45,42,-3,3,"{""source"": ""POS"", ""remark"": ""退货出库""}",1767571204000,1767571204000,9990122,SPU1004,9990122,SKU1004,原味,乐事薯片原味,lssp,6924743915235,[],1,1,袋,,,,,1,0,352986,50004,60004
10006,stock1005,store001,1580000003443730,SH001,retail,6,ST20260104001,OP001,60,60,0,4,"{""source"": ""STOCKTAKE"", ""remark"": ""盘点无差异""}",1767571205000,1767571205000,9990133,SPU1005,9990133,SKU1005,默认,双汇王中王火腿肠,shwz,6901389631250,[],1,1,根,,,,,1,0,352984,50005,60005
10007,stock1001,store001,1580000003443730,SH001,retail,1,ORDER20260104001,OP001,68,65,-3,3,"{""source"": ""POS"", ""remark"": ""销售出库""}",1767571206000,1767571206000,9990418,SPU1001,9990418,SKU1001,默认,统一老坛泡椒面,tyltjpm,6925303797515,[],1,1,袋,,,JPM001,9990418,1,0,352984,50001,60001
10008,stock1003,store001,1580000003443730,SH001,retail,4,PO20260105001,OP001,97,117,20,2,"{""source"": ""ERP"", ""remark"": ""采购入库""}",1767571207000,1767571207000,9990111,SPU1003,9990111,SKU1003,330ml,可口可乐330ml,kkkl,6922255800510,[],1,1,瓶,,,,,1,0,352985,50003,60003
10009,stock1002,store001,1580000003443730,SH001,retail,7,LOSS20260105001,OP001,78,76,-2,3,"{""source"": ""MANUAL"", ""remark"": ""过期报损""}",1767571208000,1767571208000,9990099,SPU1002,9990099,SKU1002,默认,伊利纯牛奶250ml,ylcnn,6907992822716,[],1,1,盒,,,,,1,0,352984,50002,60002
10010,stock1004,store001,1580000003443730,SH001,retail,1,ORDER20260105001,OP001,42,40,-2,3,"{""source"": ""POS"", ""remark"": ""销售出库""}",1767571209000,1767571209000,9990122,SPU1004,9990122,SKU1004,原味,乐事薯片原味,lssp,6924743915235,[],1,1,袋,,,,,1,0,352986,50004,60004

5. 完整请求示例

5.1 请求示例

{
  "clientStoreSn": "SH001",
  "requestId": "req_001",
  "startTime": "2026-01-01",
  "endTime": "2026-01-31",
  "notifyUrl": "https://3rd.example.com/stock/notify"
}

5.2 响应示例

{
  "code": 0,
  "message": "成功",
  "data": {
    "requestId": "req_001"
  }
}

6. 错误码

本接口业务错误码(51xxx 段)

错误码 含义 处理建议
51001 sqbStoreSn 与 clientStoreSn 映射不匹配 校验传入的收钱吧门店号,确保与客户门店的映射关系一致
51002 查询日期范围超限 日期跨度不超过 31 天,且仅支持查询近 6 个月内的数据

完整错误码表见错误码。接口响应中的 code 为统一包装结果码,业务数据在 data 中体现。

results matching ""

    No results matching ""