openapi: 3.0.3
info:
  title: 'Dlainex Unipay Public API'
  version: 1.0.0
  description: 'Dlainex 对外统一支付接口（仅包含 `@PaymentVerify` 暴露接口）。

### 签名规则
- 算法：`SHA256withRSA`
- 参数名 ASCII 排序
- 排除 `sign` 字段
- 空值不参与签名
- 嵌套对象扁平化后拼接 `k=v&...`
- 请求验签：商户公钥；响应签名：平台私钥

### 公共请求字段
- `mchNo`, `appId`, `clientIp`, `nonceStr`, `sign`, `reqTime`

### 返回结构
- `code`, `msg`, `data`, `sign`, `resTime`, `traceId`

### 常见返回码
- `0`: success
- `10506`: 参数校验失败
- `20052`: 验签失败
- `20023`: 配置未启用
- `30000`: 系统未知异常'
servers:
  -
    url: 'https://{host}'
    variables:
      host:
        default: api.example.com
        description: 'Dlainex 网关域名'
tags:
  -
    name: 'Unipay Trade'
    description: '统一交易接口'
  -
    name: 'Unipay Query'
    description: '统一查询接口'
  -
    name: 'Unipay Sync'
    description: '统一同步接口'
paths:
  /unipay/close:
    post:
      tags:
        - 'Unipay Trade'
      operationId: close
      summary: '关闭和撤销接口'
      description: '关闭和撤销接口（来自 /unipay/close）'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PayCloseParam'
            example:
              clientIp: 127.0.0.1
              nonceStr: nonce-20260414-001
              sign: '<BASE64_RSA_SIGNATURE>'
              reqTime: '2026-04-14 12:00:00'
              mchNo: M2026000001
              appId: APP20260001
              orderNo: P202604140001
              bizOrderNo: BIZ-PAY-20260414-001
              outOrderNo: OUT-PAY-001
              useCancel: true
      responses:
        200:
          description: '业务响应（HTTP 200，按 code 判断成功失败）'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DaxResult_Void'
              examples:
                success:
                  summary: '成功示例'
                  value:
                    code: 0
                    msg: success
                    data: null
                    sign: '<BASE64_RSA_SIGNATURE>'
                    resTime: '2026-04-14 12:00:01'
                    traceId: f8e44de6f6a1467bb9cbf9be92f0ff3a
                failed:
                  summary: '失败示例（验签失败）'
                  value:
                    code: 20052
                    msg: '验签失败'
                    data: null
                    sign: '<BASE64_RSA_SIGNATURE>'
                    resTime: '2026-04-14 12:00:01'
                    traceId: f8e44de6f6a1467bb9cbf9be92f0ff3a
  /unipay/inqury:
    post:
      tags:
        - 'Unipay Trade'
      operationId: inqury
      summary: '转账预查询接口'
      description: '转账预查询接口（来自 /unipay/inqury）'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InquryParam'
            example:
              clientIp: 127.0.0.1
              nonceStr: nonce-20260414-001
              sign: '<BASE64_RSA_SIGNATURE>'
              reqTime: '2026-04-14 12:00:00'
              mchNo: M2026000001
              appId: APP20260001
              bizInquryNo: BIZ-INQURY-20260414-001
              channel: sandbox_channel
              payeeType: bank_card
              payeeAccount: 6222020202020202
              payeeName: 'ZHANG SAN'
              payeeCode: BCA
              extraParam: '{"scene":"mobile"}'
              attach: '{"orderTag":"vip"}'
      responses:
        200:
          description: '业务响应（HTTP 200，按 code 判断成功失败）'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DaxResult_InquryResult'
              examples:
                success:
                  summary: '成功示例'
                  value:
                    code: 0
                    msg: success
                    data:
                      bizInquryNo: BIZ-INQURY-20260414-001
                      inquryNo: string
                      outInquryNo: OUT-INQURY-001
                      status: success
                      accountValid: true
                      uploadPayeeName: 'ZHANG SAN'
                      channelPayeeName: 'ZHANG SAN'
                      errorMsg: '验签失败'
                    sign: '<BASE64_RSA_SIGNATURE>'
                    resTime: '2026-04-14 12:00:01'
                    traceId: f8e44de6f6a1467bb9cbf9be92f0ff3a
                failed:
                  summary: '失败示例（验签失败）'
                  value:
                    code: 20052
                    msg: '验签失败'
                    data: null
                    sign: '<BASE64_RSA_SIGNATURE>'
                    resTime: '2026-04-14 12:00:01'
                    traceId: f8e44de6f6a1467bb9cbf9be92f0ff3a
  /unipay/pay:
    post:
      tags:
        - 'Unipay Trade'
      operationId: pay
      summary: '支付接口'
      description: '支付接口（来自 /unipay/pay）'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PayParam'
            example:
              clientIp: 127.0.0.1
              nonceStr: nonce-20260414-001
              sign: '<BASE64_RSA_SIGNATURE>'
              reqTime: '2026-04-14 12:00:00'
              mchNo: M2026000001
              appId: APP20260001
              bizOrderNo: BIZ-PAY-20260414-001
              title: 'Order Payment'
              description: 'Payment for order #001'
              expiredTime: '2026-04-14 12:00:00'
              channel: sandbox_channel
              method: qrcode
              otherMethod: opm_virtual_account
              limitPay: string
              amount: 12.5
              openId: string
              authCode: string
              terminalNo: string
              extraParam: '{"scene":"mobile"}'
              attach: '{"orderTag":"vip"}'
              returnUrl: https://merchant.example.com/return
              quitUrl: https://merchant.example.com/quit
              notifyUrl: https://merchant.example.com/callback
      responses:
        200:
          description: '业务响应（HTTP 200，按 code 判断成功失败）'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DaxResult_PayResult'
              examples:
                success:
                  summary: '成功示例'
                  value:
                    code: 0
                    msg: success
                    data:
                      bizOrderNo: BIZ-PAY-20260414-001
                      orderNo: P202604140001
                      status: success
                      payBody: '{"qrCode":"https://..."}'
                    sign: '<BASE64_RSA_SIGNATURE>'
                    resTime: '2026-04-14 12:00:01'
                    traceId: f8e44de6f6a1467bb9cbf9be92f0ff3a
                failed:
                  summary: '失败示例（验签失败）'
                  value:
                    code: 20052
                    msg: '验签失败'
                    data: null
                    sign: '<BASE64_RSA_SIGNATURE>'
                    resTime: '2026-04-14 12:00:01'
                    traceId: f8e44de6f6a1467bb9cbf9be92f0ff3a
  /unipay/query/payOrder:
    post:
      tags:
        - 'Unipay Query'
      operationId: queryPayOrder
      summary: '支付订单查询接口'
      description: '支付订单查询接口（来自 /unipay/query/payOrder）'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QueryPayParam'
            example:
              clientIp: 127.0.0.1
              nonceStr: nonce-20260414-001
              sign: '<BASE64_RSA_SIGNATURE>'
              reqTime: '2026-04-14 12:00:00'
              mchNo: M2026000001
              appId: APP20260001
              orderNo: P202604140001
              bizOrderNo: BIZ-PAY-20260414-001
              outOrderNo: OUT-PAY-001
      responses:
        200:
          description: '业务响应（HTTP 200，按 code 判断成功失败）'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DaxResult_PayOrderResult'
              examples:
                success:
                  summary: '成功示例'
                  value:
                    code: 0
                    msg: success
                    data:
                      bizOrderNo: BIZ-PAY-20260414-001
                      orderNo: P202604140001
                      outOrderNo: OUT-PAY-001
                      title: 'Order Payment'
                      description: 'Payment for order #001'
                      channel: sandbox_channel
                      method: qrcode
                      otherMethod: opm_virtual_account
                      limitPay: string
                      amount: 12.5
                      fee: 0.01
                      realAmount: 0.01
                      refundableBalance: 0.01
                      status: success
                      refundStatus: string
                      settleStatus: string
                      settleType: string
                      settleTime: '2026-04-14 12:00:00'
                      payTime: '2026-04-14 12:00:00'
                      closeTime: '2026-04-14 12:00:00'
                      expiredTime: '2026-04-14 12:00:00'
                      attach: '{"orderTag":"vip"}'
                      errorMsg: '验签失败'
                    sign: '<BASE64_RSA_SIGNATURE>'
                    resTime: '2026-04-14 12:00:01'
                    traceId: f8e44de6f6a1467bb9cbf9be92f0ff3a
                failed:
                  summary: '失败示例（验签失败）'
                  value:
                    code: 20052
                    msg: '验签失败'
                    data: null
                    sign: '<BASE64_RSA_SIGNATURE>'
                    resTime: '2026-04-14 12:00:01'
                    traceId: f8e44de6f6a1467bb9cbf9be92f0ff3a
  /unipay/query/refundOrder:
    post:
      tags:
        - 'Unipay Query'
      operationId: queryRefundOrder
      summary: '退款订单查询接口'
      description: '退款订单查询接口（来自 /unipay/query/refundOrder）'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QueryRefundParam'
            example:
              clientIp: 127.0.0.1
              nonceStr: nonce-20260414-001
              sign: '<BASE64_RSA_SIGNATURE>'
              reqTime: '2026-04-14 12:00:00'
              mchNo: M2026000001
              appId: APP20260001
              refundNo: R202604140001
              bizRefundNo: BIZ-REFUND-20260414-001
      responses:
        200:
          description: '业务响应（HTTP 200，按 code 判断成功失败）'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DaxResult_RefundOrderResult'
              examples:
                success:
                  summary: '成功示例'
                  value:
                    code: 0
                    msg: success
                    data:
                      orderId: 1
                      orderNo: P202604140001
                      outOrderNo: OUT-PAY-001
                      bizOrderNo: BIZ-PAY-20260414-001
                      title: 'Order Payment'
                      refundNo: R202604140001
                      bizRefundNo: BIZ-REFUND-20260414-001
                      outRefundNo: OUT-REFUND-001
                      channel: sandbox_channel
                      orderAmount: 1
                      amount: 12.5
                      fee: 0.01
                      reason: 'User requested refund'
                      finishTime: '2026-04-14 12:00:00'
                      status: success
                      attach: '{"orderTag":"vip"}'
                      clientIp: 127.0.0.1
                      errorMsg: '验签失败'
                    sign: '<BASE64_RSA_SIGNATURE>'
                    resTime: '2026-04-14 12:00:01'
                    traceId: f8e44de6f6a1467bb9cbf9be92f0ff3a
                failed:
                  summary: '失败示例（验签失败）'
                  value:
                    code: 20052
                    msg: '验签失败'
                    data: null
                    sign: '<BASE64_RSA_SIGNATURE>'
                    resTime: '2026-04-14 12:00:01'
                    traceId: f8e44de6f6a1467bb9cbf9be92f0ff3a
  /unipay/query/transferOrder:
    post:
      tags:
        - 'Unipay Query'
      operationId: transferOrder
      summary: '转账订单查询接口'
      description: '转账订单查询接口（来自 /unipay/query/transferOrder）'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QueryTransferParam'
            example:
              clientIp: 127.0.0.1
              nonceStr: nonce-20260414-001
              sign: '<BASE64_RSA_SIGNATURE>'
              reqTime: '2026-04-14 12:00:00'
              mchNo: M2026000001
              appId: APP20260001
              bizTransferNo: BIZ-TRANSFER-20260414-001
              transferNo: T202604140001
      responses:
        200:
          description: '业务响应（HTTP 200，按 code 判断成功失败）'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DaxResult_TransferOrderResult'
              examples:
                success:
                  summary: '成功示例'
                  value:
                    code: 0
                    msg: success
                    data:
                      bizTransferNo: BIZ-TRANSFER-20260414-001
                      transferNo: T202604140001
                      outTransferNo: OUT-TRANSFER-001
                      channel: sandbox_channel
                      amount: 12.5
                      fee: 0.01
                      title: 'Order Payment'
                      reason: 'User requested refund'
                      payeeType: bank_card
                      payeeAccount: 6222020202020202
                      payeeName: 'ZHANG SAN'
                      payeeCode: BCA
                      status: success
                      finishTime: '2026-04-14 12:00:00'
                      attach: '{"orderTag":"vip"}'
                      errorMsg: '验签失败'
                    sign: '<BASE64_RSA_SIGNATURE>'
                    resTime: '2026-04-14 12:00:01'
                    traceId: f8e44de6f6a1467bb9cbf9be92f0ff3a
                failed:
                  summary: '失败示例（验签失败）'
                  value:
                    code: 20052
                    msg: '验签失败'
                    data: null
                    sign: '<BASE64_RSA_SIGNATURE>'
                    resTime: '2026-04-14 12:00:01'
                    traceId: f8e44de6f6a1467bb9cbf9be92f0ff3a
  /unipay/refund:
    post:
      tags:
        - 'Unipay Trade'
      operationId: refund
      summary: '退款接口'
      description: '退款接口（来自 /unipay/refund）'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RefundParam'
            example:
              clientIp: 127.0.0.1
              nonceStr: nonce-20260414-001
              sign: '<BASE64_RSA_SIGNATURE>'
              reqTime: '2026-04-14 12:00:00'
              mchNo: M2026000001
              appId: APP20260001
              bizRefundNo: BIZ-REFUND-20260414-001
              orderNo: P202604140001
              bizOrderNo: BIZ-PAY-20260414-001
              outOrderNo: OUT-PAY-001
              amount: 12.5
              extraParam: '{"scene":"mobile"}'
              reason: 'User requested refund'
              attach: '{"orderTag":"vip"}'
              notifyUrl: https://merchant.example.com/callback
      responses:
        200:
          description: '业务响应（HTTP 200，按 code 判断成功失败）'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DaxResult_RefundResult'
              examples:
                success:
                  summary: '成功示例'
                  value:
                    code: 0
                    msg: success
                    data:
                      refundNo: R202604140001
                      bizRefundNo: BIZ-REFUND-20260414-001
                      status: success
                      errorMsg: '验签失败'
                    sign: '<BASE64_RSA_SIGNATURE>'
                    resTime: '2026-04-14 12:00:01'
                    traceId: f8e44de6f6a1467bb9cbf9be92f0ff3a
                failed:
                  summary: '失败示例（验签失败）'
                  value:
                    code: 20052
                    msg: '验签失败'
                    data: null
                    sign: '<BASE64_RSA_SIGNATURE>'
                    resTime: '2026-04-14 12:00:01'
                    traceId: f8e44de6f6a1467bb9cbf9be92f0ff3a
  /unipay/sync/order/pay:
    post:
      tags:
        - 'Unipay Sync'
      operationId: pay
      summary: '支付订单同步接口'
      description: '支付订单同步接口（来自 /unipay/sync/order/pay）'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PaySyncParam'
            example:
              clientIp: 127.0.0.1
              nonceStr: nonce-20260414-001
              sign: '<BASE64_RSA_SIGNATURE>'
              reqTime: '2026-04-14 12:00:00'
              mchNo: M2026000001
              appId: APP20260001
              orderNo: P202604140001
              bizOrderNo: BIZ-PAY-20260414-001
              outOrderNo: OUT-PAY-001
      responses:
        200:
          description: '业务响应（HTTP 200，按 code 判断成功失败）'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DaxResult_PaySyncResult'
              examples:
                success:
                  summary: '成功示例'
                  value:
                    code: 0
                    msg: success
                    data:
                      orderStatus: string
                      adjust: true
                    sign: '<BASE64_RSA_SIGNATURE>'
                    resTime: '2026-04-14 12:00:01'
                    traceId: f8e44de6f6a1467bb9cbf9be92f0ff3a
                failed:
                  summary: '失败示例（验签失败）'
                  value:
                    code: 20052
                    msg: '验签失败'
                    data: null
                    sign: '<BASE64_RSA_SIGNATURE>'
                    resTime: '2026-04-14 12:00:01'
                    traceId: f8e44de6f6a1467bb9cbf9be92f0ff3a
  /unipay/sync/order/refund:
    post:
      tags:
        - 'Unipay Sync'
      operationId: refund
      summary: '退款订单同步接口'
      description: '退款订单同步接口（来自 /unipay/sync/order/refund）'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RefundSyncParam'
            example:
              clientIp: 127.0.0.1
              nonceStr: nonce-20260414-001
              sign: '<BASE64_RSA_SIGNATURE>'
              reqTime: '2026-04-14 12:00:00'
              mchNo: M2026000001
              appId: APP20260001
              refundNo: R202604140001
              bizRefundNo: BIZ-REFUND-20260414-001
      responses:
        200:
          description: '业务响应（HTTP 200，按 code 判断成功失败）'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DaxResult_RefundSyncResult'
              examples:
                success:
                  summary: '成功示例'
                  value:
                    code: 0
                    msg: success
                    data:
                      orderStatus: string
                      adjust: true
                    sign: '<BASE64_RSA_SIGNATURE>'
                    resTime: '2026-04-14 12:00:01'
                    traceId: f8e44de6f6a1467bb9cbf9be92f0ff3a
                failed:
                  summary: '失败示例（验签失败）'
                  value:
                    code: 20052
                    msg: '验签失败'
                    data: null
                    sign: '<BASE64_RSA_SIGNATURE>'
                    resTime: '2026-04-14 12:00:01'
                    traceId: f8e44de6f6a1467bb9cbf9be92f0ff3a
  /unipay/transfer:
    post:
      tags:
        - 'Unipay Trade'
      operationId: transfer
      summary: '转账接口'
      description: '转账接口（来自 /unipay/transfer）'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TransferParam'
            example:
              clientIp: 127.0.0.1
              nonceStr: nonce-20260414-001
              sign: '<BASE64_RSA_SIGNATURE>'
              reqTime: '2026-04-14 12:00:00'
              mchNo: M2026000001
              appId: APP20260001
              bizTransferNo: BIZ-TRANSFER-20260414-001
              channel: sandbox_channel
              amount: 12.5
              title: 'Order Payment'
              reason: 'User requested refund'
              payeeType: bank_card
              payeeAccount: 6222020202020202
              payeeName: 'ZHANG SAN'
              payeeCode: BCA
              extraParam: '{"scene":"mobile"}'
              attach: '{"orderTag":"vip"}'
              notifyUrl: https://merchant.example.com/callback
      responses:
        200:
          description: '业务响应（HTTP 200，按 code 判断成功失败）'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DaxResult_TransferResult'
              examples:
                success:
                  summary: '成功示例'
                  value:
                    code: 0
                    msg: success
                    data:
                      bizTransferNo: BIZ-TRANSFER-20260414-001
                      transferNo: T202604140001
                      status: success
                      errorMsg: '验签失败'
                    sign: '<BASE64_RSA_SIGNATURE>'
                    resTime: '2026-04-14 12:00:01'
                    traceId: f8e44de6f6a1467bb9cbf9be92f0ff3a
                failed:
                  summary: '失败示例（验签失败）'
                  value:
                    code: 20052
                    msg: '验签失败'
                    data: null
                    sign: '<BASE64_RSA_SIGNATURE>'
                    resTime: '2026-04-14 12:00:01'
                    traceId: f8e44de6f6a1467bb9cbf9be92f0ff3a
components:
  schemas:
    PayCloseParam:
      type: object
      properties:
        clientIp:
          type: string
          description: '客户端ip'
          maxLength: 64
        nonceStr:
          type: string
          description: '随机数'
          maxLength: 32
        sign:
          type: string
          description: '签名'
          maxLength: 1024
        reqTime:
          type: string
          format: date-time
          description: '请求时间, 格式yyyy-MM-dd HH:mm:ss'
        mchNo:
          type: string
          description: '商户号'
          maxLength: 32
          minLength: 1
        appId:
          type: string
          description: '应用号'
          maxLength: 32
        orderNo:
          type: string
          description: '订单号'
          maxLength: 100
        bizOrderNo:
          type: string
          description: '商户订单号'
          maxLength: 100
        outOrderNo:
          type: string
          description: '通道订单号'
          maxLength: 150
        useCancel:
          type: boolean
          description: '是否使用撤销方式进行订单关闭'
      required:
        - reqTime
        - mchNo
    InquryParam:
      type: object
      properties:
        clientIp:
          type: string
          description: '客户端ip'
          maxLength: 64
        nonceStr:
          type: string
          description: '随机数'
          maxLength: 32
        sign:
          type: string
          description: '签名'
          maxLength: 1024
        reqTime:
          type: string
          format: date-time
          description: '请求时间, 格式yyyy-MM-dd HH:mm:ss'
        mchNo:
          type: string
          description: '商户号'
          maxLength: 32
          minLength: 1
        appId:
          type: string
          description: '应用号'
          maxLength: 32
        bizInquryNo:
          type: string
          description: '商户查询号'
          maxLength: 100
        channel:
          type: string
          description: '支付通道（special商户必填，agent商户可不传）'
          maxLength: 32
        payeeType:
          type: string
          description: '收款人账号类型'
          maxLength: 32
          minLength: 1
        payeeAccount:
          type: string
          description: '收款人账号'
          maxLength: 100
          minLength: 1
        payeeName:
          type: string
          description: '上传的收款人姓名'
          maxLength: 50
        payeeCode:
          type: string
          description: '收款编码(如银行代码)'
          maxLength: 16
        extraParam:
          type: string
          description: '查询扩展参数'
          maxLength: 2048
        attach:
          type: string
          description: '商户扩展参数'
          maxLength: 500
      required:
        - reqTime
        - mchNo
        - bizInquryNo
        - payeeType
        - payeeAccount
    InquryResult:
      type: object
      properties:
        bizInquryNo:
          type: string
          description: '商户查询号'
        inquryNo:
          type: string
          description: '查询号'
        outInquryNo:
          type: string
          description: '上游查询ID(通道查询号，占位)'
        status:
          type: string
          description: '状态'
        accountValid:
          type: boolean
          description: '账户是否有效'
        uploadPayeeName:
          type: string
          description: '上传账户名'
        channelPayeeName:
          type: string
          description: '通道返回账户名'
        errorMsg:
          type: string
          description: '提示信息'
    PayParam:
      type: object
      properties:
        clientIp:
          type: string
          description: '客户端ip'
          maxLength: 64
        nonceStr:
          type: string
          description: '随机数'
          maxLength: 32
        sign:
          type: string
          description: '签名'
          maxLength: 1024
        reqTime:
          type: string
          format: date-time
          description: '请求时间, 格式yyyy-MM-dd HH:mm:ss'
        mchNo:
          type: string
          description: '商户号'
          maxLength: 32
          minLength: 1
        appId:
          type: string
          description: '应用号'
          maxLength: 32
        bizOrderNo:
          type: string
          description: '商户订单号'
          maxLength: 100
          minLength: 1
        title:
          type: string
          description: '支付标题'
          maxLength: 100
          minLength: 1
        description:
          type: string
          description: '支付描述'
          maxLength: 50
        expiredTime:
          type: string
          format: date-time
          description: '过期时间'
        channel:
          type: string
          description: '支付通道编码（special商户必填，agent商户可不传）'
          maxLength: 32
        method:
          type: string
          description: '支付方式编码'
          maxLength: 32
          minLength: 1
        otherMethod:
          type: string
          description: '其他支付方式'
          maxLength: 128
        limitPay:
          type: string
          description: '限制用户支付类型'
          maxLength: 128
        amount:
          type: number
          format: double
          description: '支付金额'
          minimum: 0.01
        openId:
          type: string
          description: '用户标识OpenId'
          maxLength: 128
        authCode:
          type: string
          description: '付款码'
          maxLength: 128
        terminalNo:
          type: string
          description: '终端设备编码'
          maxLength: 128
        extraParam:
          type: string
          description: '支付扩展参数'
          maxLength: 2048
        attach:
          type: string
          description: '商户扩展参数'
          maxLength: 500
        returnUrl:
          type: string
          description: '同步通知URL'
          maxLength: 200
        quitUrl:
          type: string
          description: '退出地址'
          maxLength: 200
        notifyUrl:
          type: string
          description: '异步通知地址'
          maxLength: 200
      required:
        - reqTime
        - mchNo
        - bizOrderNo
        - title
        - method
        - amount
    PayResult:
      type: object
      properties:
        bizOrderNo:
          type: string
          description: '商户订单号'
        orderNo:
          type: string
          description: '订单号'
        status:
          type: string
          description: '支付状态'
        payBody:
          type: string
          description: '支付参数体'
    QueryPayParam:
      type: object
      properties:
        clientIp:
          type: string
          description: '客户端ip'
          maxLength: 64
        nonceStr:
          type: string
          description: '随机数'
          maxLength: 32
        sign:
          type: string
          description: '签名'
          maxLength: 1024
        reqTime:
          type: string
          format: date-time
          description: '请求时间, 格式yyyy-MM-dd HH:mm:ss'
        mchNo:
          type: string
          description: '商户号'
          maxLength: 32
          minLength: 1
        appId:
          type: string
          description: '应用号'
          maxLength: 32
        orderNo:
          type: string
          description: '订单号'
          maxLength: 100
        bizOrderNo:
          type: string
          description: '商户订单号'
          maxLength: 100
        outOrderNo:
          type: string
          description: '通道订单号'
          maxLength: 150
      required:
        - reqTime
        - mchNo
    PayOrderResult:
      type: object
      properties:
        bizOrderNo:
          type: string
          description: '商户订单号'
        orderNo:
          type: string
          description: '支付订单号'
        outOrderNo:
          type: string
          description: '通道支付订单号'
        title:
          type: string
          description: '标题'
        description:
          type: string
          description: '描述'
        channel:
          type: string
          description: '支付通道'
        method:
          type: string
          description: '支付方式'
        otherMethod:
          type: string
          description: '其他支付方式'
        limitPay:
          type: string
          description: '限制用户支付类型'
        amount:
          type: number
          format: double
          description: '金额'
        fee:
          type: number
          format: double
          description: '手续费'
        realAmount:
          type: number
          format: double
          description: '实收金额'
        refundableBalance:
          type: number
          format: double
          description: '可退款余额'
        status:
          type: string
          description: '支付状态'
        refundStatus:
          type: string
          description: '退款状态'
        settleStatus:
          type: string
          description: '结算状态'
        settleType:
          type: string
          description: '结算类型'
        settleTime:
          type: string
          format: date-time
          description: '结算时间'
        payTime:
          type: string
          format: date-time
          description: '支付时间'
        closeTime:
          type: string
          format: date-time
          description: '关闭时间'
        expiredTime:
          type: string
          format: date-time
          description: '过期时间'
        attach:
          type: string
          description: '商户扩展参数'
        errorMsg:
          type: string
          description: '错误信息'
    QueryRefundParam:
      type: object
      properties:
        clientIp:
          type: string
          description: '客户端ip'
          maxLength: 64
        nonceStr:
          type: string
          description: '随机数'
          maxLength: 32
        sign:
          type: string
          description: '签名'
          maxLength: 1024
        reqTime:
          type: string
          format: date-time
          description: '请求时间, 格式yyyy-MM-dd HH:mm:ss'
        mchNo:
          type: string
          description: '商户号'
          maxLength: 32
          minLength: 1
        appId:
          type: string
          description: '应用号'
          maxLength: 32
        refundNo:
          type: string
          description: '退款号'
          maxLength: 100
        bizRefundNo:
          type: string
          description: '商户退款号'
          maxLength: 100
      required:
        - reqTime
        - mchNo
    RefundOrderResult:
      type: object
      properties:
        orderId:
          type: integer
          format: int64
          description: '支付订单ID'
        orderNo:
          type: string
          description: '支付订单号'
        outOrderNo:
          type: string
          description: '通道支付订单号'
        bizOrderNo:
          type: string
          description: '商户支付订单号'
        title:
          type: string
          description: '支付标题'
        refundNo:
          type: string
          description: '退款号'
        bizRefundNo:
          type: string
          description: '商户退款号'
        outRefundNo:
          type: string
          description: '通道退款交易号'
        channel:
          type: string
          description: '支付通道'
        orderAmount:
          type: integer
          format: int32
          description: '订单金额'
        amount:
          type: number
          format: double
          description: '退款金额'
        fee:
          type: number
          format: double
          description: '退款手续费'
        reason:
          type: string
          description: '退款原因'
        finishTime:
          type: string
          format: date-time
          description: '退款结束时间'
        status:
          type: string
          description: '退款状态'
        attach:
          type: string
          description: '商户扩展参数,回调时会原样返回'
        clientIp:
          type: string
          description: '终端ip'
        errorMsg:
          type: string
          description: '错误信息'
    QueryTransferParam:
      type: object
      properties:
        clientIp:
          type: string
          description: '客户端ip'
          maxLength: 64
        nonceStr:
          type: string
          description: '随机数'
          maxLength: 32
        sign:
          type: string
          description: '签名'
          maxLength: 1024
        reqTime:
          type: string
          format: date-time
          description: '请求时间, 格式yyyy-MM-dd HH:mm:ss'
        mchNo:
          type: string
          description: '商户号'
          maxLength: 32
          minLength: 1
        appId:
          type: string
          description: '应用号'
          maxLength: 32
        bizTransferNo:
          type: string
          description: '商户转账号'
          maxLength: 100
        transferNo:
          type: string
          description: '转账号'
          maxLength: 32
      required:
        - reqTime
        - mchNo
    TransferOrderResult:
      type: object
      properties:
        bizTransferNo:
          type: string
          description: '商户转账号'
        transferNo:
          type: string
          description: '转账号'
        outTransferNo:
          type: string
          description: '通道转账号'
        channel:
          type: string
          description: '支付通道'
        amount:
          type: number
          format: double
          description: '转账金额'
        fee:
          type: number
          format: double
          description: '手续费'
        title:
          type: string
          description: '标题'
        reason:
          type: string
          description: '转账原因/备注'
        payeeType:
          type: string
          description: '收款人类型'
        payeeAccount:
          type: string
          description: '收款人账号'
        payeeName:
          type: string
          description: '收款人姓名'
        payeeCode:
          type: string
          description: '收款编码(如银行代码)'
        status:
          type: string
          description: '状态'
        finishTime:
          type: string
          format: date-time
          description: '完成时间'
        attach:
          type: string
          description: '商户扩展参数'
        errorMsg:
          type: string
          description: '错误原因'
    RefundParam:
      type: object
      properties:
        clientIp:
          type: string
          description: '客户端ip'
          maxLength: 64
        nonceStr:
          type: string
          description: '随机数'
          maxLength: 32
        sign:
          type: string
          description: '签名'
          maxLength: 1024
        reqTime:
          type: string
          format: date-time
          description: '请求时间, 格式yyyy-MM-dd HH:mm:ss'
        mchNo:
          type: string
          description: '商户号'
          maxLength: 32
          minLength: 1
        appId:
          type: string
          description: '应用号'
          maxLength: 32
        bizRefundNo:
          type: string
          description: '商户退款号'
          maxLength: 100
          minLength: 1
        orderNo:
          type: string
          description: '订单号'
          maxLength: 100
        bizOrderNo:
          type: string
          description: '商户订单号'
          maxLength: 100
        outOrderNo:
          type: string
          description: '通道订单号'
          maxLength: 150
        amount:
          type: number
          format: double
          description: '退款金额'
          minimum: 0.01
        extraParam:
          type: string
          description: '退款扩展参数'
          maxLength: 2048
        reason:
          type: string
          description: '退款原因'
          maxLength: 50
        attach:
          type: string
          description: '商户扩展参数'
          maxLength: 500
        notifyUrl:
          type: string
          description: '异步通知地址'
          maxLength: 200
      required:
        - reqTime
        - mchNo
        - bizRefundNo
        - amount
    RefundResult:
      type: object
      properties:
        refundNo:
          type: string
          description: '退款号'
        bizRefundNo:
          type: string
          description: '商户退款号'
        status:
          type: string
          description: '退款状态'
        errorMsg:
          type: string
          description: '错误提示'
    PaySyncParam:
      type: object
      properties:
        clientIp:
          type: string
          description: '客户端ip'
          maxLength: 64
        nonceStr:
          type: string
          description: '随机数'
          maxLength: 32
        sign:
          type: string
          description: '签名'
          maxLength: 1024
        reqTime:
          type: string
          format: date-time
          description: '请求时间, 格式yyyy-MM-dd HH:mm:ss'
        mchNo:
          type: string
          description: '商户号'
          maxLength: 32
          minLength: 1
        appId:
          type: string
          description: '应用号'
          maxLength: 32
        orderNo:
          type: string
          description: '订单号'
          maxLength: 100
        bizOrderNo:
          type: string
          description: '商户订单号'
          maxLength: 100
        outOrderNo:
          type: string
          description: '通道订单号'
          maxLength: 150
      required:
        - reqTime
        - mchNo
    PaySyncResult:
      type: object
      properties:
        orderStatus:
          type: string
          description: '同步状态'
        adjust:
          type: boolean
          description: '是否触发了调整'
    RefundSyncParam:
      type: object
      properties:
        clientIp:
          type: string
          description: '客户端ip'
          maxLength: 64
        nonceStr:
          type: string
          description: '随机数'
          maxLength: 32
        sign:
          type: string
          description: '签名'
          maxLength: 1024
        reqTime:
          type: string
          format: date-time
          description: '请求时间, 格式yyyy-MM-dd HH:mm:ss'
        mchNo:
          type: string
          description: '商户号'
          maxLength: 32
          minLength: 1
        appId:
          type: string
          description: '应用号'
          maxLength: 32
        refundNo:
          type: string
          description: '退款号'
          maxLength: 100
        bizRefundNo:
          type: string
          description: '商户退款号'
          maxLength: 100
      required:
        - reqTime
        - mchNo
    RefundSyncResult:
      type: object
      properties:
        orderStatus:
          type: string
          description: '同步状态'
        adjust:
          type: boolean
          description: '是否触发了调整'
    TransferParam:
      type: object
      properties:
        clientIp:
          type: string
          description: '客户端ip'
          maxLength: 64
        nonceStr:
          type: string
          description: '随机数'
          maxLength: 32
        sign:
          type: string
          description: '签名'
          maxLength: 1024
        reqTime:
          type: string
          format: date-time
          description: '请求时间, 格式yyyy-MM-dd HH:mm:ss'
        mchNo:
          type: string
          description: '商户号'
          maxLength: 32
          minLength: 1
        appId:
          type: string
          description: '应用号'
          maxLength: 32
        bizTransferNo:
          type: string
          description: '商户转账号'
          maxLength: 100
        channel:
          type: string
          description: '支付通道（special商户必填，agent商户可不传）'
          maxLength: 32
        amount:
          type: number
          format: double
          description: '转账金额'
          minimum: 0.01
        title:
          type: string
          description: '标题'
          maxLength: 100
        reason:
          type: string
          description: '转账原因/备注'
          maxLength: 50
        payeeType:
          type: string
          description: '收款人账号类型'
          maxLength: 32
          minLength: 1
        payeeAccount:
          type: string
          description: '收款人账号'
          maxLength: 100
          minLength: 1
        payeeName:
          type: string
          description: '收款人姓名'
          maxLength: 50
        payeeCode:
          type: string
          description: '收款编码(如银行代码)'
          maxLength: 16
        extraParam:
          type: string
          description: '转账扩展参数'
          maxLength: 2048
        attach:
          type: string
          description: '商户扩展参数,回调时会原样返回'
          maxLength: 500
        notifyUrl:
          type: string
          description: '回调通知地址'
          maxLength: 200
      required:
        - reqTime
        - mchNo
        - bizTransferNo
        - amount
        - payeeType
        - payeeAccount
    TransferResult:
      type: object
      properties:
        bizTransferNo:
          type: string
          description: '商户转账号'
        transferNo:
          type: string
          description: '转账号'
        status:
          type: string
          description: '状态'
        errorMsg:
          type: string
          description: '提示信息'
    PaymentCommonParam:
      type: object
      properties:
        clientIp:
          type: string
          description: '客户端ip'
          maxLength: 64
        nonceStr:
          type: string
          description: '随机数'
          maxLength: 32
        sign:
          type: string
          description: '签名'
          maxLength: 1024
        reqTime:
          type: string
          format: date-time
          description: '请求时间, 格式yyyy-MM-dd HH:mm:ss'
      required:
        - reqTime
    MerchantPaymentCommonParam:
      type: object
      properties:
        clientIp:
          type: string
          description: '客户端ip'
          maxLength: 64
        nonceStr:
          type: string
          description: '随机数'
          maxLength: 32
        sign:
          type: string
          description: '签名'
          maxLength: 1024
        reqTime:
          type: string
          format: date-time
          description: '请求时间, 格式yyyy-MM-dd HH:mm:ss'
        mchNo:
          type: string
          description: '商户号'
          maxLength: 32
          minLength: 1
        appId:
          type: string
          description: '应用号'
          maxLength: 32
      required:
        - reqTime
        - mchNo
    DaxResult:
      type: object
      properties:
        code:
          type: integer
          format: int32
          description: '状态码'
        msg:
          type: string
          description: '提示信息'
        data:
          $ref: '#/components/schemas/T'
          description: '业务内容'
        sign:
          type: string
          description: '签名'
        resTime:
          type: string
          format: date-time
          description: '响应时间'
        traceId:
          type: string
          description: '追踪ID'
    DaxResult_Void:
      type: object
      properties:
        code:
          type: integer
          format: int32
          description: '业务状态码'
        msg:
          type: string
          description: '业务提示信息'
        data:
          nullable: true
        sign:
          type: string
          description: '响应签名（平台私钥签名）'
        resTime:
          type: string
          format: date-time
          description: '响应时间'
        traceId:
          type: string
          description: '链路追踪ID'
      required:
        - code
        - msg
    DaxResult_InquryResult:
      type: object
      properties:
        code:
          type: integer
          format: int32
          description: '业务状态码'
        msg:
          type: string
          description: '业务提示信息'
        data:
          $ref: '#/components/schemas/InquryResult'
        sign:
          type: string
          description: '响应签名（平台私钥签名）'
        resTime:
          type: string
          format: date-time
          description: '响应时间'
        traceId:
          type: string
          description: '链路追踪ID'
      required:
        - code
        - msg
    DaxResult_PayResult:
      type: object
      properties:
        code:
          type: integer
          format: int32
          description: '业务状态码'
        msg:
          type: string
          description: '业务提示信息'
        data:
          $ref: '#/components/schemas/PayResult'
        sign:
          type: string
          description: '响应签名（平台私钥签名）'
        resTime:
          type: string
          format: date-time
          description: '响应时间'
        traceId:
          type: string
          description: '链路追踪ID'
      required:
        - code
        - msg
    DaxResult_PayOrderResult:
      type: object
      properties:
        code:
          type: integer
          format: int32
          description: '业务状态码'
        msg:
          type: string
          description: '业务提示信息'
        data:
          $ref: '#/components/schemas/PayOrderResult'
        sign:
          type: string
          description: '响应签名（平台私钥签名）'
        resTime:
          type: string
          format: date-time
          description: '响应时间'
        traceId:
          type: string
          description: '链路追踪ID'
      required:
        - code
        - msg
    DaxResult_RefundOrderResult:
      type: object
      properties:
        code:
          type: integer
          format: int32
          description: '业务状态码'
        msg:
          type: string
          description: '业务提示信息'
        data:
          $ref: '#/components/schemas/RefundOrderResult'
        sign:
          type: string
          description: '响应签名（平台私钥签名）'
        resTime:
          type: string
          format: date-time
          description: '响应时间'
        traceId:
          type: string
          description: '链路追踪ID'
      required:
        - code
        - msg
    DaxResult_TransferOrderResult:
      type: object
      properties:
        code:
          type: integer
          format: int32
          description: '业务状态码'
        msg:
          type: string
          description: '业务提示信息'
        data:
          $ref: '#/components/schemas/TransferOrderResult'
        sign:
          type: string
          description: '响应签名（平台私钥签名）'
        resTime:
          type: string
          format: date-time
          description: '响应时间'
        traceId:
          type: string
          description: '链路追踪ID'
      required:
        - code
        - msg
    DaxResult_RefundResult:
      type: object
      properties:
        code:
          type: integer
          format: int32
          description: '业务状态码'
        msg:
          type: string
          description: '业务提示信息'
        data:
          $ref: '#/components/schemas/RefundResult'
        sign:
          type: string
          description: '响应签名（平台私钥签名）'
        resTime:
          type: string
          format: date-time
          description: '响应时间'
        traceId:
          type: string
          description: '链路追踪ID'
      required:
        - code
        - msg
    DaxResult_PaySyncResult:
      type: object
      properties:
        code:
          type: integer
          format: int32
          description: '业务状态码'
        msg:
          type: string
          description: '业务提示信息'
        data:
          $ref: '#/components/schemas/PaySyncResult'
        sign:
          type: string
          description: '响应签名（平台私钥签名）'
        resTime:
          type: string
          format: date-time
          description: '响应时间'
        traceId:
          type: string
          description: '链路追踪ID'
      required:
        - code
        - msg
    DaxResult_RefundSyncResult:
      type: object
      properties:
        code:
          type: integer
          format: int32
          description: '业务状态码'
        msg:
          type: string
          description: '业务提示信息'
        data:
          $ref: '#/components/schemas/RefundSyncResult'
        sign:
          type: string
          description: '响应签名（平台私钥签名）'
        resTime:
          type: string
          format: date-time
          description: '响应时间'
        traceId:
          type: string
          description: '链路追踪ID'
      required:
        - code
        - msg
    DaxResult_TransferResult:
      type: object
      properties:
        code:
          type: integer
          format: int32
          description: '业务状态码'
        msg:
          type: string
          description: '业务提示信息'
        data:
          $ref: '#/components/schemas/TransferResult'
        sign:
          type: string
          description: '响应签名（平台私钥签名）'
        resTime:
          type: string
          format: date-time
          description: '响应时间'
        traceId:
          type: string
          description: '链路追踪ID'
      required:
        - code
        - msg
