openapi: 3.0.3
info:
  title: 'Dlainex Unipay Agent Merchant API'
  version: 1.0.0
  description: 'Dlainex 对外统一支付接口（代理商户版，仅包含 `@PaymentVerify` 暴露接口）。

本文件面向 `agent` 商户。上游渠道对代理商户透明，交易请求不传 `channel`，后端按所属 ISV 的启用渠道自动选路。
响应中不暴露上游通道、上游单号、上游账户名和上游错误信息。

### 签名规则
- 算法：`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 Options'
    description: '统一能力列表接口'
  -
    name: 'Unipay Query'
    description: '统一查询接口'
  -
    name: 'Unipay Sync'
    description: '统一同步接口'
paths:
  /unipay/pay:
    post:
      tags:
        - 'Unipay Trade'
      operationId: pay_agent
      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'
              method: mex_virtual_account
              limitPay: string
              amount: 12.5
              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
      callbacks:
        merchantCallback:
          {$request.body#/notifyUrl}:
            post:
              summary: '支付接口回调通知'
              description: '平台向商户 notifyUrl 发送订单状态通知。商户返回纯文本 SUCCESS 表示处理成功。'
              requestBody:
                required: true
                content:
                  application/json:
                    schema:
                      $ref: '#/components/schemas/DaxNoticeResult_PayOrderResult'
                    example:
                      code: 0
                      msg: success
                      data:
                        bizOrderNo: BIZ-PAY-20260414-001
                        orderNo: P202604140001
                        title: 'Order Payment'
                        description: 'Payment for order #001'
                        method: mex_virtual_account
                        limitPay: string
                        amount: 12.5
                        fee: 0.01
                        realAmount: 0.01
                        status: success
                        settleStatus: not_settle
                        settleType: 'D+1'
                        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"}'
                      sign: '<BASE64_RSA_SIGNATURE>'
                      resTime: '2026-04-14 12:00:01'
                      traceId: f8e44de6f6a1467bb9cbf9be92f0ff3a
                      noticeType: order_status_changed
                      mchNo: M2026000001
                      appId: APP20260001
              responses:
                200:
                  description: '商户处理成功需返回纯文本 SUCCESS'
                  content:
                    text/plain:
                      schema:
                        type: string
                      example: SUCCESS
  /unipay/options/pay-methods:
    post:
      tags:
        - 'Unipay Options'
      operationId: payMethods_agent
      summary: '查询支付接口method列表'
      description: '查询支付接口method列表（代理商户版，来自 /unipay/options/pay-methods）'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UnipayOptionsParam'
            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
      responses:
        200:
          description: '业务响应（HTTP 200，按 code 判断成功失败）'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DaxResult_List_UnipayOptionResult'
              examples:
                success:
                  summary: '成功示例'
                  value:
                    code: 0
                    msg: success
                    data:
                      -
                        code: mex_virtual_account
                        name: 'MEX虚拟账户入金'
                    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/options/payee-types:
    post:
      tags:
        - 'Unipay Options'
      operationId: payeeTypes_agent
      summary: '查询转账接口payeeType列表'
      description: '查询转账接口payeeType列表（代理商户版，来自 /unipay/options/payee-types）'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UnipayOptionsParam'
            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
      responses:
        200:
          description: '业务响应（HTTP 200，按 code 判断成功失败）'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DaxResult_List_UnipayOptionResult'
              examples:
                success:
                  summary: '成功示例'
                  value:
                    code: 0
                    msg: success
                    data:
                      -
                        code: spei_transfer
                        name: 'SPEI 转账'
                    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/options/payee-codes:
    post:
      tags:
        - 'Unipay Options'
      operationId: payeeCodes_agent
      summary: '查询转账接口payeeCode列表'
      description: '查询转账接口payeeCode列表（代理商户版，来自 /unipay/options/payee-codes）'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UnipayPayeeCodeOptionsParam'
            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
              payeeType: spei_transfer
      responses:
        200:
          description: '业务响应（HTTP 200，按 code 判断成功失败）'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DaxResult_List_UnipayOptionResult'
              examples:
                success:
                  summary: '成功示例'
                  value:
                    code: 0
                    msg: success
                    data:
                      -
                        code: mx_banxico
                        name: BANXICO
                    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/close:
    post:
      tags:
        - 'Unipay Trade'
      operationId: close_agent
      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
              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_agent
      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
              payeeType: spei_transfer
              payeeAccount: 6222020202020202
              payeeName: 'ZHANG SAN'
              payeeCode: mx_banxico
              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
                      status: valid
                      accountValid: true
                      uploadPayeeName: 'ZHANG SAN'
                    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_agent
      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
              amount: 12.5
              title: 'Order Payment'
              reason: 'Manual operation remark'
              payeeType: spei_transfer
              payeeAccount: 6222020202020202
              payeeName: 'ZHANG SAN'
              payeeCode: mx_banxico
              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: progress
                    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
      callbacks:
        merchantCallback:
          {$request.body#/notifyUrl}:
            post:
              summary: '转账接口回调通知'
              description: '平台向商户 notifyUrl 发送订单状态通知。商户返回纯文本 SUCCESS 表示处理成功。'
              requestBody:
                required: true
                content:
                  application/json:
                    schema:
                      $ref: '#/components/schemas/DaxNoticeResult_TransferOrderResult'
                    example:
                      code: 0
                      msg: success
                      data:
                        bizTransferNo: BIZ-TRANSFER-20260414-001
                        transferNo: T202604140001
                        amount: 12.5
                        fee: 0.01
                        title: 'Order Payment'
                        reason: 'Manual operation remark'
                        payeeType: spei_transfer
                        payeeAccount: 6222020202020202
                        payeeName: 'ZHANG SAN'
                        payeeCode: mx_banxico
                        status: success
                        finishTime: '2026-04-14 12:00:00'
                        attach: '{"orderTag":"vip"}'
                      sign: '<BASE64_RSA_SIGNATURE>'
                      resTime: '2026-04-14 12:00:01'
                      traceId: f8e44de6f6a1467bb9cbf9be92f0ff3a
                      noticeType: order_status_changed
                      mchNo: M2026000001
                      appId: APP20260001
              responses:
                200:
                  description: '商户处理成功需返回纯文本 SUCCESS'
                  content:
                    text/plain:
                      schema:
                        type: string
                      example: SUCCESS
  /unipay/query/payOrder:
    post:
      tags:
        - 'Unipay Query'
      operationId: queryPayOrder_agent
      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
      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
                      title: 'Order Payment'
                      description: 'Payment for order #001'
                      method: mex_virtual_account
                      limitPay: string
                      amount: 12.5
                      fee: 0.01
                      realAmount: 0.01
                      status: success
                      settleStatus: not_settle
                      settleType: 'D+1'
                      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"}'
                    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_agent
      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
                      amount: 12.5
                      fee: 0.01
                      title: 'Order Payment'
                      reason: 'Manual operation remark'
                      payeeType: spei_transfer
                      payeeAccount: 6222020202020202
                      payeeName: 'ZHANG SAN'
                      payeeCode: mx_banxico
                      status: success
                      finishTime: '2026-04-14 12:00:00'
                      attach: '{"orderTag":"vip"}'
                    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_agent
      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
      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: success
                      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
components:
  schemas:
    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: '过期时间'
        method:
          type: string
          description: '支付方式编码'
          maxLength: 32
          minLength: 1
        limitPay:
          type: string
          description: '限制用户支付类型'
          maxLength: 128
        amount:
          type: number
          format: double
          description: '支付金额'
          minimum: 0.01
        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: '支付参数体'
    UnipayOptionsParam:
      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
    UnipayOptionResult:
      type: object
      properties:
        code:
          type: string
          description: '编码'
        name:
          type: string
          description: '名称'
    UnipayPayeeCodeOptionsParam:
      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
        payeeType:
          type: string
          description: '收款人类型'
          maxLength: 32
          minLength: 1
      required:
        - reqTime
        - mchNo
        - payeeType
    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
        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
        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: 64
        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: '查询号'
        status:
          type: string
          description: '状态'
        accountValid:
          type: boolean
          description: '账户是否有效'
        uploadPayeeName:
          type: string
          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
        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: 64
        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: '状态'
    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
      required:
        - reqTime
        - mchNo
    PayOrderResult:
      type: object
      properties:
        bizOrderNo:
          type: string
          description: '商户订单号'
        orderNo:
          type: string
          description: '支付订单号'
        title:
          type: string
          description: '标题'
        description:
          type: string
          description: '描述'
        method:
          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: '实收金额'
        status:
          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: '商户扩展参数'
    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: '转账号'
        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: '商户扩展参数'
    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
      required:
        - reqTime
        - mchNo
    PaySyncResult:
      type: object
      properties:
        orderStatus:
          type: string
          description: '同步状态'
        adjust:
          type: boolean
          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_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_List_UnipayOptionResult:
      type: object
      properties:
        code:
          type: integer
          format: int32
          description: '业务状态码'
        msg:
          type: string
          description: '业务提示信息'
        data:
          type: array
          items:
            $ref: '#/components/schemas/UnipayOptionResult'
        sign:
          type: string
          description: '响应签名（平台私钥签名）'
        resTime:
          type: string
          format: date-time
          description: '响应时间'
        traceId:
          type: string
          description: '链路追踪ID'
      required:
        - code
        - msg
    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_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
    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_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_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
    DaxNoticeResult_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'
        noticeType:
          type: string
          description: '通知类型'
        mchNo:
          type: string
          description: '商户号'
        appId:
          type: string
          description: '应用ID'
      required:
        - code
        - msg
        - data
        - mchNo
        - appId
        - sign
    DaxNoticeResult_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'
        noticeType:
          type: string
          description: '通知类型'
        mchNo:
          type: string
          description: '商户号'
        appId:
          type: string
          description: '应用ID'
      required:
        - code
        - msg
        - data
        - mchNo
        - appId
        - sign
