订单查询

仅提供已授权的门店数据服务:调用时通过 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 ""