订单查询

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

1. 接口说明

商家可以通过此接口主动查询订单数据。

项目 说明
接口路径 POST /open-api/v1/order/query
鉴权方式 HMAC-SHA256,见鉴权与签名

2. 请求参数

字段 类型 必填 示例值 说明
clientStoreSn String 是 SH001 客户门店号,平台据此查询映射的收钱吧门店并校验授权,仅返回该门店下的订单
sqbStoreSn String 否 1580000003443730 收钱吧门店号,可不传;如传则优先使用 sqbStoreSn,平台会校验其与 clientStoreSn 的映射关系
orderSn String 是 210000001000001 收钱吧智慧门店订单号。如果没有收钱吧智慧门店订单号,请订阅订单消息推送。
requestId String 是 req_001 请求标识,必传。本接口为查询类接口,requestId 用于请求链路追踪与日志关联,不参与幂等去重,见幂等机制

3. 响应参数

3.1 订单基础信息

字段 类型 必填 示例值 说明
orderSn String 是 210000001000001 订单号
orderType String 是 QR_FOOD 订单类型,枚举见订单枚举附录
orderStatus String 是 FINISHED 订单状态,枚举见订单枚举附录
orderSeq String 否 0001 商家当日订单序号
subject String 否 牛肉拉面 订单标题
tableId String 否 T001 桌子 id
tableNo String 否 A01 桌号
orderSource String 否 订单来源,枚举见订单枚举附录
cashierId String 否 51180ee7-3c49-4591-99bb-26fa4c04b321 收银员 id
cashierName String 否 收银员 收银员姓名
originalAmount Long 是 6300 订单金额
merchantDiscountTotalAmount Long 否 500 商家优惠金额
platformServiceAmount Long 否 300 平台服务费
packageAmount Long 否 100 打包费
deliveryAmount Long 否 300 配送费
expectedIncomeAmount Long 是 5500 预计收入
refundAmount Long 否 0 退款金额
goods Array 是 详见下方商品数据结构定义
discounts Array 否 详见下方优惠数据结构定义
payments Array 否 详见下方支付数据结构定义
remark String 否 不吃香菜 订单备注
ctime Long 是 1700318325713 下单时间

金额补充说明

  • 订单金额 = 商品总金额 + 打包费 + 配送费
  • 预计收入 = 订单金额 - 商家优惠金额 - 平台服务费
  • 金额单位均为"分"
  • 上述金额字段为空(null)时按 0 参与计算

3.2 商品数据

字段 类型 必填 示例值 说明
spuId String 是 9990418 商品 id
url String 否 https://example.com/noodles.jpg 商品图片 url
name String 否 牛肉拉面 商品名称
originalAmountPer Long 是 800 商品单价,单位分
effectiveAmountPer Long 是 800 商品实付单价,单位分
totalAmount Long 否 1600 商品总金额,单位分
discountCount String 否 2 享受优惠的商品数量,最多 3 位小数
count String 否 2 商品数量,最多 3 位小数
refundCount String 否 0 退款商品数量,最多 3 位小数
spuType String 否 PRODUCT 商品类型,枚举见订单枚举附录
skuType String 否 SINGLE sku 类型,枚举见订单枚举附录
packageGroupId String 否 商品所属分组 id
packageGroupName String 否 商品所属分组名称
spec String 否 大份 商品规格
specInfo Object 否 商品规格信息,结构见下方说明
attributeInfos Array 否 商品属性信息(口味做法),结构见下方说明
materials Array 否 加料信息,结构见下方说明
packageGoods Array 否 套餐内商品信息,结构同商品数据
saleUnit String 否 份 售卖单位
unitType String 否 NUMBER 单位类型,枚举见订单枚举附录
refPayType String 否 PAY 商品关联的订单操作类型,枚举见订单枚举附录
orderTime Long 否 1700318325713 下单时间,毫秒时间戳
processStatus String 否 ACCEPTED 菜品处理状态,枚举见订单枚举附录
extraInfo Object 否 额外信息(Map)
extraMap Object 否 预留字段(Map)
goodsDiscountType String 否 ACTIVITY 优惠类型,枚举见订单枚举附录
discountAmount Long 否 100 优惠金额,单位分
categoryId String 否 352984 类目 id
goodsTag Long 否 0 商品 tag
ctime Long 否 1700318325713 创建时间,毫秒时间戳
mtime Long 否 1700318325713 更新时间,毫秒时间戳

商品数据补充说明

商品总金额 = 商品单价 × 商品数量 + 加料总金额 - 商品优惠总金额

对象字段结构说明

specInfo(商品规格信息):

字段 类型 说明
id String 规格 id
name String 规格名称
price Long 规格价格,单位分
attachedInfo String 附加信息

attributeInfos(商品属性信息,口味做法):

字段 类型 说明
id String 属性 id
title String 口味做法标题
name String 口味做法内容
seq Long 顺序
price Long 价格,单位分

materials(加料信息):

字段 类型 说明
id String 加料 id
name String 加料名称
price Long 加料价格,单位分
number String 加料数量
source Long 加料来源

3.3 优惠数据

字段 类型 必填 示例值 说明
name String 是 全场折扣 优惠名称
discountType Long 是 1 活动优惠类型,枚举见订单枚举附录
amount Long 是 120 优惠金额

3.4 支付数据

字段 类型 必填 示例值 说明
clientSn String 否 210000001000001 智慧经营交易订单号
transSn String 是 7894259236461446 支付订单号
tradeNo String 否 平台订单号
refClientSn String 否 退款关联智慧经营交易订单号
refundBatchNo String 否 退款批次号
totalAmount Long 否 6300 订单总额
receiveAmount Long 否 6000 实收总额
buyerPayAmount Long 否 6000 用户实付金额
discountAmount Long 否 300 优惠金额
channelAssistDiscount Long 否 0 渠道补贴金额
refundAmount Long 否 0 订单已退款总额
cashBackAmount Long 否 0 找零金额
chargeGiftAmount Long 否 0 充值赠送金额
payDiscountAmount Long 否 0 支付优惠金额
profitSharingAmount Long 否 0 分账金额
payWay String 是 WECHAT 支付通道,枚举见订单枚举附录
subPayWay String 是 QRCODE 子支付通道,枚举见订单枚举附录
payType String 否 支付类型,枚举见订单枚举附录
orderPayStatus String 否 交易状态,枚举见订单枚举附录
payerLogin String 否 付款人账号
payerUid String 否 付款人 id
tradeTime Long 否 1700318325713 交易时间戳
payTime Long 是 1702276912510 支付时间戳
cashierId String 否 收银员 id

4. 完整请求示例

4.1 请求示例

{
  "clientStoreSn": "SH001",
  "orderSn": "210000001000001",
  "requestId": "req_001"
}

4.2 响应示例

{
  "code": 0,
  "message": "成功",
  "data": {
    "orderSn": "2100006149241454",
    "orderType": "RETAIL",
    "orderStatus": "PARTIAL_REFUNDED",
    "ctime": 1786590141819,
    "remark": "",
    "originalAmount": 2400,
    "merchantDiscountTotalAmount": 0,
    "expectedIncomeAmount": 2400,
    "refundAmount": 1600,
    "goods": [
      {
        "spuId": "9990418",
        "name": "统一老坛泡椒面",
        "saleUnit": "份",
        "originalAmountPer": 800,
        "effectiveAmountPer": 800,
        "totalAmount": 1600,
        "count": 2,
        "refundCount": 1,
        "spuType": "PRODUCT",
        "skuType": "SINGLE",
        "specInfo": {
          "id": "9990418",
          "name": null,
          "price": 800,
          "attachedInfo": null
        },
        "refPayType": "PAY",
        "processStatus": "PART_REFUNDED",
        "discountAmount": 0,
        "categoryId": "352984",
        "extraMap": {
          "localGoodsId": "9990418_1786590131719",
          "userName": "收银员",
          "saleWeight": 2,
          "itemSort": 758,
          "orderTimeStamp": "1786590141819",
          "unitType": "NUMBER",
          "barcode": "6925303797515",
          "originGoodsPrice": 800
        }
      },
      {
        "spuId": "9990099",
        "name": "康师傅超爽桶KING香辣牛肉面143g",
        "saleUnit": "桶",
        "originalAmountPer": 800,
        "effectiveAmountPer": 800,
        "totalAmount": 800,
        "count": 1,
        "refundCount": 1,
        "spuType": "PRODUCT",
        "skuType": "SINGLE",
        "specInfo": {
          "id": "9990099",
          "name": null,
          "price": 800,
          "attachedInfo": null
        },
        "refPayType": "PAY",
        "processStatus": "REFUNDED",
        "discountAmount": 0,
        "categoryId": "352984",
        "extraMap": {
          "localGoodsId": "9990099_1786590128804",
          "userName": "收银员",
          "saleWeight": 1,
          "itemSort": 439,
          "orderTimeStamp": "1786590141819",
          "unitType": "NUMBER",
          "barcode": "6900873000470",
          "originGoodsPrice": 800
        }
      }
    ],
    "discounts": [],
    "payments": [
      {
        "clientSn": "2300004070708804",
        "transSn": "7895217130477124",
        "tradeNo": "4200003142202608137239737952",
        "totalAmount": 2400,
        "receiveAmount": 2400,
        "buyerPayAmount": 2400,
        "discountAmount": 0,
        "channelAssistDiscount": 0,
        "refundAmount": 1600,
        "cashBackAmount": 0,
        "chargeGiftAmount": 0,
        "payWay": "WECHAT",
        "subPayWay": "BARCODE",
        "payType": "PAYMENT",
        "orderPayStatus": "PARTIAL_REFUNDED",
        "payerLogin": "oc5mSjtKoPs2dn2zklO-kWh3RPuU",
        "tradeTime": 1786590142000,
        "payTime": 1786590144000,
        "cashierId": "51180ee7-3c49-4591-99bb-26fa4c04b321"
      },
      {
        "clientSn": "2300004071058534",
        "transSn": "7895217130479698",
        "tradeNo": "WX260813110224000646447032",
        "refClientSn": "2300004070708804",
        "refundBatchNo": "20260813110241919",
        "totalAmount": 1600,
        "receiveAmount": 1600,
        "buyerPayAmount": 1600,
        "discountAmount": 0,
        "channelAssistDiscount": 0,
        "refundAmount": 1600,
        "cashBackAmount": 0,
        "chargeGiftAmount": 0,
        "payWay": "WECHAT",
        "subPayWay": null,
        "payType": "REFUND",
        "orderPayStatus": "PARTIAL_REFUNDED",
        "payerLogin": "oc5mSjtKoPs2dn2zklO-kWh3RPuU",
        "tradeTime": 1786590162000,
        "payTime": 1786590163000,
        "cashierId": "51180ee7-3c49-4591-99bb-26fa4c04b321"
      }
    ]
  }
}

5. 错误码列表

错误码 含义
50001 订单不存在

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

6. AI 快速接入提示词

将下方提示词连同当前项目代码库提供给任意 AI 编程工具,即可快速完成订单查询接口的接入。AI 会先识别项目所用语言、框架与既有规范,再依据收钱吧官方接口及签名文档实现请求、签名、配置和测试;适用于不同技术栈,无需预设 Java 或固定项目目录。使用前请在安全的配置渠道提供脱敏后的必要参数,切勿将真实密钥写入提示词、代码或日志。

你是一名经验丰富的后端集成工程师。请在“当前项目”的既有技术栈、代码规范和部署方式下,接入并验证收钱吧智慧开放平台的“订单查询”接口。不要假定编程语言、框架、HTTP 客户端、配置系统或目录结构;先调研当前项目,再选择与项目一致的实现方式。

## 业务目标
根据门店标识和订单号查询订单详情,并交付一个可安全配置、可自动验证、可供业务代码复用的接口适配能力。

## 接口信息
- 网关:`https://gateway-smart.shouqianba.com`
- 方法与路径:`POST /open-api/v1/order/query`
- 官方文档:
  - 鉴权与签名:`https://doc.shouqianba.com/docs-for-smart/公共定义/鉴权与签名.html`
  - 订单查询:`https://doc.shouqianba.com/docs-for-smart/接口说明/订单/订单查询.html`

## 工作步骤
1. 先阅读当前项目中与 OpenAPI、HTTP 请求、配置加载、密钥管理、日志、错误处理和测试有关的现有代码;复用已有约定,不要为了本接口引入无必要的新框架或重构无关代码。
2. 阅读上述官方文档,先在实施说明中写清“待签名字符串/字节的构造规则、签名算法、编码和请求头含义”。不要凭经验推断签名格式;文档与旧代码冲突时,以官方文档为准并说明差异。
3. 实现订单查询客户端/适配层,并将业务参数、认证参数、序列化、签名、网络调用和响应解析合理分离,便于后续复用与测试。

## 请求与签名硬性要求
- 请求体使用 JSON,至少传入 `clientStoreSn`、`orderSn`、`requestId`;按官方文档支持需要的其他字段(例如 `sqbStoreSn`)。
- `requestId` 必须每次唯一。
- 按官方规范生成并发送 `X-AccessKey`、`X-Timestamp`(毫秒级)、`X-Nonce`(8 位字母数字随机串)和 `X-Signature`(小写十六进制)。
- 使用官方规定的 HMAC-SHA256 签名规则。参与签名的原始 JSON 请求体必须与最终实际发送的字节完全一致;签名完成后不得重新格式化、排序或序列化请求体。
- 不得继续使用旧式 `access_token` 流程,除非官方当前文档明确要求。

## 配置与安全
- 所有敏感和环境相关值必须由当前项目的标准安全配置机制注入(例如环境变量、密钥服务、部署平台 Secret 或本地忽略的配置文件),不得硬编码。
- 至少支持以下逻辑配置项:AccessKey、AccessSecret、clientStoreSn、orderSn;并按需支持 sqbStoreSn、网关/接口地址覆盖。
- 配置示例、日志、异常、测试输出、提交记录和文档中都不得出现真实 AccessSecret、令牌、门店号或订单数据。
- 必填配置缺失时,应给出可操作的报错/跳过信息,绝不能使用任何默认真实凭据。

## 验收与测试
1. 增加不依赖网络的签名单元测试,使用固定测试向量验证 HMAC-SHA256 和小写十六进制编码。
2. 增加可选的集成测试或可执行调用示例;只有在必填配置齐全时才实际请求平台,缺失时安全跳过或明确提示。
3. 成功响应至少校验 `code == 0`、返回订单号与请求的 `orderSn` 一致,并按官方响应结构校验商品明细存在。
4. 对网络超时、非成功状态、签名/鉴权失败、响应 JSON 异常和业务错误码提供与当前项目一致的错误处理。
5. 执行当前项目可用的相关检查和测试。

## 最终交付格式
请输出:
1. 采用的技术栈与复用的项目既有组件;
2. 修改/新增的文件及各自职责;
3. 脱敏的配置项说明和调用示例;
4. 签名构造规则摘要;
5. 已执行的验证命令与结果,以及因现有项目问题无法验证的部分;
6. 任何需要人工补充的非敏感配置或权限。

实施范围仅限该订单查询能力及其必要测试,不修改无关业务逻辑。

results matching ""

    No results matching ""