{
  "openapi": "3.0.3",
  "info": {
    "title": "重庆环卫-通用预支付交易接口",
    "version": "1.0.0",
    "description": "智慧餐厅 store + ai_api 通用预支付交易接口文档。当前用于咖啡机对接，后续可兼容其他预扣款来源。"
  },
  "servers": [
    {
      "url": "http://127.0.0.1",
      "description": "本地 zhctapp_v2_0 开发容器"
    }
  ],
  "tags": [
    {
      "name": "外部接口/三方调用康比特/预支付交易-咖啡机对接",
      "description": "咖啡机接口 A/C/B 与小程序扫码入口"
    }
  ],
  "paths": {
    "/api/prepayOrder/code": {
      "post": {
        "tags": [
          "三方调用康比特/预支付交易-咖啡机对接"
        ],
        "x-apifox-folder": "三方调用康比特/预支付交易-咖啡机对接",
        "summary": "接口 A：取码",
        "description": "# 接口 A：取码\n\n## 1. 接口概述\n\n咖啡机发起取码请求，智慧餐厅系统校验 `machid` 对应设备是否存在、签名是否正确，并创建或复用一条平台预支付交易。\n\n接口返回二维码内容 `twocode`，设备展示该二维码给消费者扫码。`twocode` 只包含小程序识别预支付交易所需的关键参数，例如 `type=200&torderid=10001`；消费者扫码后会进入小程序扫码入口，生成平台支付订单，后续扣款流程沿用手机端订单支付流程。\n\n## 2. 接口信息\n\n- **接口地址**：`https://xxx.com/api/prepayOrder/code`\n- **请求方法**：POST\n- **Content-Type**：`application/x-www-form-urlencoded`\n- **接口版本**：v1.0\n\n## 3. 请求头（Header）\n\n咖啡机对接接口不需要请求头。设备身份通过 `machid` 和签名参数校验。\n\n## 4. 请求参数（Body）\n\n| 参数名 | 类型 | 是否必填 | 描述 | 示例值 |\n| --- | --- | --- | --- | --- |\n| orderid | String | 是 | 设备侧订单号；后续查扣款、报结果均使用该订单号 | 260728144800001 |\n| machid | String | 是 | 咖啡机设备编号，对应 平台设备档案中的设备编号 | CQHW_COFFEE_001 |\n| trackno | String | 否 | 货道、轨道或商品编号，系统原样记录 | LATTE-01 |\n| name | String | 否 | 商品名称，扫码生成支付订单时写入订单备注 | 拿铁 |\n| price | Integer | 否 | 商品金额，单位分 | 1200 |\n| channelid | String | 否 | 设备或第三方侧渠道标识，系统原样记录 | BALANCE |\n| timestamp | String | 是 | 时间戳，参与签名 | 1785218917 |\n| randstr | String | 是 | 随机字符串，参与签名 | CQHW_RAND_A |\n| sign | String | 是 | 签名值。生成方式：取配置 appkey（默认 1234567890abcdef）、timestamp、randstr 三个字符串按字典序升序排序后直接拼接，计算 sha1 小写值。 | 按签名规则生成 |\n\n请求示例：\n\n```json\n{\n  \"orderid\": \"260728144800001\",\n  \"machid\": \"CQHW_COFFEE_001\",\n  \"trackno\": \"LATTE-01\",\n  \"name\": \"拿铁\",\n  \"price\": \"1200\",\n  \"channelid\": \"BALANCE\",\n  \"timestamp\": \"1785218917\",\n  \"randstr\": \"CQHW_RAND_A\",\n  \"sign\": \"按签名规则生成\"\n}\n```\n\n## 5. 响应格式\n\n**取码成功响应举例**\n\n```json\n{\n  \"orderid\": \"260728144800001\",\n  \"torderid\": \"10001\",\n  \"twocode\": \"type=200&torderid=10001\",\n  \"code\": \"1\",\n  \"msg\": \"成功\"\n}\n```\n\n**取码失败响应举例**\n\n```json\n{\n  \"orderid\": \"260728144800001\",\n  \"torderid\": \"\",\n  \"code\": \"0\",\n  \"msg\": \"设备不存在\"\n}\n```\n\n```json\n{\n  \"orderid\": \"260728144800001\",\n  \"torderid\": \"\",\n  \"code\": \"0\",\n  \"msg\": \"签名错误\"\n}\n```\n\n## 6. 状态码说明\n\n| code | 描述 |\n| --- | --- |\n| 1 | 取码成功，设备可展示 `twocode` 二维码 |\n| 0 | 取码失败，失败原因见 `msg` |\n\n## 7. 响应字段说明\n\n| 字段名 | 类型 | 描述 |\n| --- | --- | --- |\n| orderid | String | 设备侧订单号 |\n| torderid | String | 智慧餐厅平台预支付交易号，对应 `平台预支付交易号` |\n| twocode | String | 设备展示的二维码内容，格式为 `type=200&torderid=平台预支付交易号` |\n| code | String | 接口处理结果，`1` 成功、`0` 失败 |\n| msg | String | 响应消息，描述处理结果或失败原因 |\n\n## 8. trace_id 说明\n\n当前咖啡机对接接口响应不返回 `trace_id`。问题排查时请提供 `machid`、`orderid`、`torderid`、接口调用时间和响应 `msg`。",
        "operationId": "createPrepayOrderCode",
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/PrepayCodeRequest"
              },
              "examples": {
                "coffee": {
                  "summary": "咖啡机取码",
                  "value": {
                    "orderid": "CQHW_E2E_20260728_ORDER_10001",
                    "machid": "CQHW_E2E_20260728_MACH_001",
                    "trackno": "LATTE-01",
                    "name": "拿铁",
                    "price": "1200",
                    "channelid": "BALANCE",
                    "timestamp": "1785218917",
                    "randstr": "CQHW_E2E_20260728_RAND_A",
                    "sign": "按签名算法生成"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "取码结果。code=1 表示成功；code=0 表示失败。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrepayCodeResponse"
                },
                "examples": {
                  "success": {
                    "summary": "成功",
                    "value": {
                      "orderid": "CQHW_E2E_20260728_ORDER_10001",
                      "torderid": "5",
                      "twocode": "type=200&torderid=5",
                      "code": "1",
                      "msg": "成功"
                    }
                  },
                  "fail": {
                    "summary": "失败",
                    "value": {
                      "orderid": "CQHW_E2E_20260728_ORDER_10001",
                      "torderid": "",
                      "code": "0",
                      "msg": "设备不存在"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/aizhct/api/PrepayOrder/scan": {
      "get": {
        "tags": [
          "三方调用康比特/预支付交易-咖啡机对接"
        ],
        "x-apifox-folder": "三方调用康比特/预支付交易-咖啡机对接",
        "summary": "小程序扫码入口：预支付交易转支付订单",
        "description": "# 小程序扫码入口\n\n## 1. 接口概述\n\n消费者扫描咖啡机展示的二维码后进入本接口。接口根据二维码中的 `type=200` 和 `torderid` 查询预支付交易，并按当前登录用户生成平台支付订单。\n\n生成的支付订单来源为咖啡机订单，支付方式沿用手机端订单支付流程。支付成功后，系统会回写预支付交易状态，咖啡机通过接口 C 查询扣款结果。\n\n## 2. 接口信息\n\n- **接口地址**：`https://xxx.com/aizhct/api/PrepayOrder/scan`\n- **请求方法**：GET\n- **接口版本**：v1.0\n\n## 3. 请求头（Header）\n\n| 参数名 | 类型 | 描述 | 示例值 |\n| --- | --- | --- | --- |\n| Access-Token | String | 小程序登录 token | {{terminal_token}} |\n\n说明：该请求头由小程序扫码入口携带，咖啡机设备本身不需要请求头。\n\n## 4. 请求参数（Body）\n\n本接口为 GET 请求，参数通过 Query 传递。\n\n| 参数名 | 类型 | 是否必填 | 描述 | 示例值 |\n| --- | --- | --- | --- | --- |\n| type | String | 是 | 二维码类型，咖啡机预支付订单固定传 `200` | 200 |\n| torderid | Integer | 是 | 智慧餐厅平台预支付交易号，由接口 A 返回 | 10001 |\n\n请求示例：\n\n```text\ntype=200&torderid=10001\n```\n\n## 5. 响应格式\n\n**扫码成功响应举例**\n\n```json\n{\n  \"message\": \"订单创建成功\",\n  \"status\": 200,\n  \"data\": {\n    \"orderId\": 67874,\n    \"isPay\": 1\n  }\n}\n```\n\n**扫码失败响应举例**\n\n```json\n{\n  \"message\": \"预支付交易不存在\",\n  \"status\": 500,\n  \"data\": []\n}\n```\n\n```json\n{\n  \"message\": \"缺少必要的参数token, 请先登录\",\n  \"status\": 401,\n  \"data\": []\n}\n```\n\n## 6. 状态码说明\n\n| status | 描述 |\n| --- | --- |\n| 200 | 扫码成功，已生成或返回平台支付订单 |\n| 401 | 未登录或登录 token 缺失/失效 |\n| 500 | 业务校验失败，失败原因见 `message` |\n\n## 7. 响应字段说明\n\n| 字段名 | 类型 | 描述 |\n| --- | --- | --- |\n| message | String | 响应消息 |\n| status | Integer | 接口处理状态 |\n| data.orderId | Integer | 平台支付订单 ID，对应 `平台支付订单.id` |\n| data.isPay | Integer | 是否需要继续支付，`1=需要支付`、`0=无需支付或已支付` |\n\n## 8. trace_id 说明\n\n当前小程序扫码入口响应不返回 `trace_id`。问题排查时请提供 `torderid`、小程序用户和接口调用时间。",
        "operationId": "scanPrepayOrder",
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "prepay"
            },
            "description": "二维码类型标识。当前建议传 prepay。"
          },
          {
            "name": "source",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "example": 1
            },
            "description": "预扣款来源。1=咖啡机。"
          },
          {
            "name": "orderid",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "example": "CQHW_E2E_20260728_ORDER_10001"
            },
            "description": "设备订单号。"
          },
          {
            "name": "machid",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "example": "CQHW_E2E_20260728_MACH_001"
            },
            "description": "咖啡机设备编号，对应平台设备档案中的设备编号。"
          },
          {
            "name": "torderid",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "example": 5
            },
            "description": "智慧餐厅平台预支付交易号，对应 平台预支付交易号。"
          }
        ],
        "security": [
          {
            "MiniAppToken": []
          }
        ],
        "responses": {
          "200": {
            "description": "扫码创建订单结果。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MiniAppResponse"
                },
                "examples": {
                  "success": {
                    "summary": "成功",
                    "value": {
                      "message": "订单创建成功",
                      "status": 200,
                      "data": {
                        "orderId": 67874,
                        "isPay": 1
                      }
                    }
                  },
                  "missingLogin": {
                    "summary": "未登录",
                    "value": {
                      "message": "缺少必要的参数token, 请先登录",
                      "status": 401,
                      "data": []
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/prepayOrder/payResult": {
      "post": {
        "tags": [
          "三方调用康比特/预支付交易-咖啡机对接"
        ],
        "x-apifox-folder": "三方调用康比特/预支付交易-咖啡机对接",
        "summary": "接口 C：查扣款",
        "description": "# 接口 C：查扣款\n\n## 1. 接口概述\n\n咖啡机调用本接口查询消费者是否完成支付。设备应在消费者扫码后轮询本接口，只有返回 `code=1` 时才开始制作咖啡。\n\n系统会校验 `machid` 对应设备是否存在、签名是否正确，并根据 `torderid` 查询预支付交易状态，同时校验设备侧订单号和设备编号是否与取码记录一致。\n\n## 2. 接口信息\n\n- **接口地址**：`https://xxx.com/api/prepayOrder/payResult`\n- **请求方法**：POST\n- **Content-Type**：`application/x-www-form-urlencoded`\n- **接口版本**：v1.0\n\n## 3. 请求头（Header）\n\n咖啡机对接接口不需要请求头。设备身份通过 `machid` 和签名参数校验。\n\n## 4. 请求参数（Body）\n\n| 参数名 | 类型 | 是否必填 | 描述 | 示例值 |\n| --- | --- | --- | --- | --- |\n| orderid | String | 是 | 设备侧订单号，与取码接口传入的 `orderid` 一致 | 260728144800001 |\n| machid | String | 是 | 咖啡机设备编号，对应 平台设备档案中的设备编号 | CQHW_COFFEE_001 |\n| torderid | String | 否 | 智慧餐厅平台预支付交易号，接口 A 返回，建议必传 | 10001 |\n| timestamp | String | 是 | 时间戳，参与签名 | 1785218919 |\n| randstr | String | 是 | 随机字符串，参与签名 | CQHW_RAND_C |\n| sign | String | 是 | 签名值。生成方式：取配置 appkey（默认 1234567890abcdef）、timestamp、randstr 三个字符串按字典序升序排序后直接拼接，计算 sha1 小写值。 | 按签名规则生成 |\n\n请求示例：\n\n```json\n{\n  \"orderid\": \"260728144800001\",\n  \"machid\": \"CQHW_COFFEE_001\",\n  \"torderid\": \"10001\",\n  \"timestamp\": \"1785218919\",\n  \"randstr\": \"CQHW_RAND_C\",\n  \"sign\": \"按签名规则生成\"\n}\n```\n\n## 5. 响应格式\n\n**支付成功响应举例**\n\n```json\n{\n  \"orderid\": \"260728144800001\",\n  \"torderid\": \"10001\",\n  \"code\": \"1\",\n  \"msg\": \"消费者付款成功\"\n}\n```\n\n**支付失败响应举例**\n\n```json\n{\n  \"orderid\": \"260728144800001\",\n  \"torderid\": \"10001\",\n  \"code\": \"2\",\n  \"msg\": \"正在等待消费者付款\"\n}\n```\n\n```json\n{\n  \"orderid\": \"260728144800001\",\n  \"torderid\": \"10001\",\n  \"code\": \"0\",\n  \"msg\": \"预支付交易不存在\"\n}\n```\n\n## 6. 状态码说明\n\n| code | 描述 | 设备处理建议 |\n| --- | --- | --- |\n| 0 | 失败，失败原因见 `msg` | 停止本次交易或提示异常 |\n| 1 | 消费者付款成功 | 开始制作/出货 |\n| 2 | 正在等待消费者付款 | 继续等待或按设备策略轮询 |\n| 3 | 此次交易已过期 | 停止本次交易 |\n| 4 | 此次交易已关闭 | 当前系统暂不主动产生该状态，保留兼容 |\n| 5 | 此次交易已完成 | 已出货完成，设备无需重复制作 |\n\n## 7. 响应字段说明\n\n| 字段名 | 类型 | 描述 |\n| --- | --- | --- |\n| orderid | String | 设备侧订单号 |\n| torderid | String | 智慧餐厅平台预支付交易号 |\n| code | String | 交易状态码 |\n| msg | String | 状态说明或失败原因 |\n\n## 8. trace_id 说明\n\n当前咖啡机对接接口响应不返回 `trace_id`。问题排查时请提供 `machid`、`orderid`、`torderid`、接口调用时间和响应 `msg`。",
        "operationId": "queryPrepayOrderPayment",
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/PrepayQueryRequest"
              },
              "examples": {
                "queryPaid": {
                  "summary": "查询已支付订单",
                  "value": {
                    "orderid": "CQHW_E2E_20260728_ORDER_10001",
                    "machid": "CQHW_E2E_20260728_MACH_001",
                    "torderid": "5",
                    "timestamp": "1785218919",
                    "randstr": "CQHW_E2E_20260728_RAND_C",
                    "sign": "按签名算法生成"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "扣款查询结果。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrepayStatusResponse"
                },
                "examples": {
                  "paid": {
                    "summary": "消费者付款成功",
                    "value": {
                      "orderid": "CQHW_E2E_20260728_ORDER_10001",
                      "torderid": "5",
                      "code": "1",
                      "msg": "消费者付款成功"
                    }
                  },
                  "waiting": {
                    "summary": "等待付款",
                    "value": {
                      "orderid": "CQHW_E2E_20260728_ORDER_UNSCANNED",
                      "torderid": "7",
                      "code": "2",
                      "msg": "正在等待消费者付款"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/prepayOrder/fulfillResult": {
      "post": {
        "tags": [
          "三方调用康比特/预支付交易-咖啡机对接"
        ],
        "x-apifox-folder": "三方调用康比特/预支付交易-咖啡机对接",
        "summary": "接口 B：报结果",
        "description": "# 接口 B：报结果\n\n## 1. 接口概述\n\n咖啡机完成制作/出货后调用本接口回传出货结果。系统记录设备回传内容，并更新平台预支付交易的出货状态。\n\n出货成功时，预支付交易状态更新为 `code=5 此次交易已完成`；出货失败时记录失败原因，并将本次交易按失败状态处理，便于后续人工核查。\n\n## 2. 接口信息\n\n- **接口地址**：`https://xxx.com/api/prepayOrder/fulfillResult`\n- **请求方法**：POST\n- **Content-Type**：`application/x-www-form-urlencoded`\n- **接口版本**：v1.0\n\n## 3. 请求头（Header）\n\n咖啡机对接接口不需要请求头。设备身份通过 `machid` 和签名参数校验。\n\n## 4. 请求参数（Body）\n\n| 参数名 | 类型 | 是否必填 | 描述 | 示例值 |\n| --- | --- | --- | --- | --- |\n| orderid | String | 是 | 设备侧订单号，与取码接口传入的 `orderid` 一致 | 260728144800001 |\n| machid | String | 是 | 咖啡机设备编号，对应 平台设备档案中的设备编号 | CQHW_COFFEE_001 |\n| torderid | String | 否 | 智慧餐厅平台预支付交易号，接口 A 返回，建议必传 | 10001 |\n| status | Integer | 是 | 出货结果，`1=成功`、`0=失败` | 1 |\n| errinfo | String | 否 | 出货失败原因；`status=0` 时建议传入 | 设备出货失败 |\n| timestamp | String | 是 | 时间戳，参与签名 | 1785218920 |\n| randstr | String | 是 | 随机字符串，参与签名 | CQHW_RAND_B |\n| sign | String | 是 | 签名值。生成方式：取配置 appkey（默认 1234567890abcdef）、timestamp、randstr 三个字符串按字典序升序排序后直接拼接，计算 sha1 小写值。 | 按签名规则生成 |\n\n请求示例：\n\n```json\n{\n  \"orderid\": \"260728144800001\",\n  \"machid\": \"CQHW_COFFEE_001\",\n  \"torderid\": \"10001\",\n  \"timestamp\": \"1785218920\",\n  \"randstr\": \"CQHW_RAND_B\",\n  \"sign\": \"按签名规则生成\",\n  \"status\": \"1\",\n  \"errinfo\": \"\"\n}\n```\n\n## 5. 响应格式\n\n**上报成功响应举例**\n\n```json\n{\n  \"orderid\": \"260728144800001\",\n  \"torderid\": \"10001\",\n  \"code\": \"1\",\n  \"msg\": \"成功\"\n}\n```\n\n**上报失败响应举例**\n\n```json\n{\n  \"orderid\": \"260728144800001\",\n  \"torderid\": \"10001\",\n  \"code\": \"0\",\n  \"msg\": \"签名错误\"\n}\n```\n\n```json\n{\n  \"orderid\": \"260728144800001\",\n  \"torderid\": \"10001\",\n  \"code\": \"0\",\n  \"msg\": \"预支付交易不存在\"\n}\n```\n\n## 6. 状态码说明\n\n| code | 描述 |\n| --- | --- |\n| 1 | 系统接收并处理成功 |\n| 0 | 系统处理失败，失败原因见 `msg` |\n\n出货状态说明：\n\n| status | 描述 | 系统处理 |\n| --- | --- | --- |\n| 1 | 出货成功 | 更新预支付交易为已完成 `交易状态更新为已完成`，出货状态为成功 |\n| 0 | 出货失败 | 记录 `errinfo`，出货状态为失败，交易状态更新为失败 |\n\n## 7. 响应字段说明\n\n| 字段名 | 类型 | 描述 |\n| --- | --- | --- |\n| orderid | String | 设备侧订单号 |\n| torderid | String | 智慧餐厅平台预支付交易号 |\n| code | String | 接口处理结果，`1` 成功、`0` 失败 |\n| msg | String | 响应消息，描述处理结果或失败原因 |\n\n## 8. trace_id 说明\n\n当前咖啡机对接接口响应不返回 `trace_id`。问题排查时请提供 `machid`、`orderid`、`torderid`、接口调用时间和响应 `msg`。",
        "operationId": "reportPrepayOrderFulfillment",
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/PrepayFulfillRequest"
              },
              "examples": {
                "success": {
                  "summary": "出货成功",
                  "value": {
                    "orderid": "CQHW_E2E_20260728_ORDER_10001",
                    "machid": "CQHW_E2E_20260728_MACH_001",
                    "torderid": "5",
                    "status": "1",
                    "errinfo": "",
                    "timestamp": "1785218920",
                    "randstr": "CQHW_E2E_20260728_RAND_B",
                    "sign": "按签名算法生成"
                  }
                },
                "fail": {
                  "summary": "出货失败",
                  "value": {
                    "orderid": "CQHW_E2E_20260728_ORDER_10001",
                    "machid": "CQHW_E2E_20260728_MACH_001",
                    "torderid": "5",
                    "status": "0",
                    "errinfo": "设备出货失败",
                    "timestamp": "1785218920",
                    "randstr": "CQHW_E2E_20260728_RAND_B",
                    "sign": "按签名算法生成"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "报结果处理结果。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrepayFulfillResponse"
                },
                "examples": {
                  "success": {
                    "summary": "成功",
                    "value": {
                      "orderid": "CQHW_E2E_20260728_ORDER_10001",
                      "torderid": "5",
                      "code": "1",
                      "msg": "成功"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "MiniAppToken": {
        "type": "apiKey",
        "in": "header",
        "name": "Access-Token",
        "description": "小程序登录 token。"
      }
    },
    "schemas": {
      "PrepayCodeRequest": {
        "type": "object",
        "required": [
          "orderid",
          "machid",
          "timestamp",
          "randstr",
          "sign"
        ],
        "properties": {
          "orderid": {
            "type": "string",
            "description": "设备侧订单号。后续查扣款、报结果均使用该订单号。",
            "maxLength": 64
          },
          "machid": {
            "type": "string",
            "description": "咖啡机设备编号，对应平台设备档案中的设备编号。",
            "maxLength": 32
          },
          "trackno": {
            "type": "string",
            "description": "设备货道、轨道或商品编号。",
            "maxLength": 32
          },
          "name": {
            "type": "string",
            "description": "商品名称。",
            "maxLength": 128
          },
          "price": {
            "type": "integer",
            "description": "金额，单位分。",
            "minimum": 0,
            "example": 1200
          },
          "channelid": {
            "type": "string",
            "description": "设备或第三方支付渠道标识。",
            "maxLength": 16
          },
          "timestamp": {
            "type": "string",
            "description": "时间戳，参与签名。"
          },
          "randstr": {
            "type": "string",
            "description": "随机字符串，参与签名。"
          },
          "sign": {
            "type": "string",
            "description": "签名值。生成方式：取配置 appkey（默认 1234567890abcdef）、timestamp、randstr 三个字符串按字典序升序排序后直接拼接，计算 sha1 小写值。"
          }
        }
      },
      "PrepayQueryRequest": {
        "type": "object",
        "required": [
          "orderid",
          "machid",
          "timestamp",
          "randstr",
          "sign"
        ],
        "properties": {
          "orderid": {
            "type": "string",
            "description": "设备侧订单号，与取码接口传入的 orderid 一致。"
          },
          "machid": {
            "type": "string",
            "description": "咖啡机设备编号，对应平台设备档案中的设备编号。"
          },
          "torderid": {
            "type": "string",
            "description": "平台预支付交易号，接口 A 返回；建议传入，传入时会校验设备订单号和设备编号是否匹配。"
          },
          "timestamp": {
            "type": "string",
            "description": "时间戳，参与签名。"
          },
          "randstr": {
            "type": "string",
            "description": "随机字符串，参与签名。"
          },
          "sign": {
            "type": "string",
            "description": "签名值。生成方式：取配置 appkey（默认 1234567890abcdef）、timestamp、randstr 三个字符串按字典序升序排序后直接拼接，计算 sha1 小写值。"
          }
        }
      },
      "PrepayFulfillRequest": {
        "allOf": [
          {
            "$ref": "#/components/schemas/PrepayQueryRequest"
          },
          {
            "type": "object",
            "required": [
              "status"
            ],
            "properties": {
              "status": {
                "type": "integer",
                "description": "出货状态：1=成功，0=失败。",
                "enum": [
                  0,
                  1
                ]
              },
              "errinfo": {
                "type": "string",
                "description": "出货失败原因。",
                "maxLength": 500
              }
            }
          }
        ]
      },
      "PrepayCodeResponse": {
        "type": "object",
        "properties": {
          "orderid": {
            "type": "string",
            "description": "设备上传订单号。"
          },
          "torderid": {
            "type": "string",
            "description": "平台预支付交易号。后续查扣款、报结果时建议原样传回。"
          },
          "twocode": {
            "type": "string",
            "description": "返回给设备展示的二维码内容。"
          },
          "code": {
            "type": "string",
            "description": "1=成功，0=失败。"
          },
          "msg": {
            "type": "string",
            "description": "提示信息。"
          }
        }
      },
      "PrepayStatusResponse": {
        "type": "object",
        "properties": {
          "orderid": {
            "type": "string"
          },
          "torderid": {
            "type": "string"
          },
          "code": {
            "type": "string",
            "description": "0=失败，1=消费者付款成功，2=正在等待消费者付款，3=此次交易已过期，4=此次交易已关闭，5=此次交易已完成。",
            "enum": [
              "0",
              "1",
              "2",
              "3",
              "4",
              "5"
            ]
          },
          "msg": {
            "type": "string"
          }
        }
      },
      "PrepayFulfillResponse": {
        "type": "object",
        "properties": {
          "orderid": {
            "type": "string"
          },
          "torderid": {
            "type": "string"
          },
          "code": {
            "type": "string",
            "description": "1=接收成功，0=失败。"
          },
          "msg": {
            "type": "string"
          }
        }
      },
      "MiniAppResponse": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          },
          "data": {
            "type": "object",
            "properties": {
              "orderId": {
                "type": "integer",
                "description": "平台支付订单 ID。"
              },
              "isPay": {
                "type": "integer",
                "description": "1=需要继续支付，0=无需支付或已支付。",
                "enum": [
                  0,
                  1
                ]
              }
            }
          }
        }
      }
    }
  }
}
