统一下单 API 文档

聚合支付演示 · 商户服务端接入说明(Mock 渠道,非生产环境)

概述

商户系统通过 HTTPS 调用本平台 统一下单 接口创建支付订单,再引导用户完成支付(演示环境为 Mock)。支付成功后平台按费率结算并入账,同时可查询订单状态。

基础地址(本地演示):http://localhost:3000

接入准备

  1. 运营在后台完成 商户开户审核通过
  2. 商户登录 商户后台接入信息,获取 App KeyApp Secret
  3. 将密钥配置在商户服务端,用于 API 请求鉴权

鉴权方式

每个请求在 HTTP 头中携带商户密钥(演示环境,生产环境建议改为签名方案):

请求头说明
X-Api-Key商户 App Key,形如 pk_xxx
X-Api-Secret商户 App Secret,形如 sk_xxx
Content-Typeapplication/json

基础约定

项目说明
协议HTTPS(本地演示可用 HTTP)
编码UTF-8
金额单位元,最多两位小数
支付渠道 channelwechat 微信 · alipay 支付宝 · unionpay 银联(Mock);须为商户已开通渠道。不传则顾客在收银台自选
订单状态 statuspending 待支付 · paid 已支付
响应格式JSON,含 okcodemessagedata

统一下单

POST /api/v1/unified/order

请求参数(Body JSON)

参数类型必填说明
amountnumber订单金额(元),如 99.00
channelstring已开通渠道之一;省略时 pay_url 收银台由用户选择
subjectstring商品描述,默认「演示商品」
out_trade_nostring商户订单号,不传则由平台生成
notify_urlstring支付成功后的异步通知地址(http/https)。运营在后台对该订单执行「手动回调」时,平台将向该 URL POST JSON(超时 8 秒)。收银台支付成功不发此通知,请用「查询订单」确认
client_ipstring用户 IP,便于对账

响应 data 字段

字段说明
order_id平台订单 ID
out_trade_no商户订单号
amount / amount_fen金额(元 / 分)
channel / subject / status渠道、描述、状态
pay_url收银台地址,如 /pay.html?id={order_id}
created_at创建时间(ISO8601)
paid_at支付成功时间;仅 status=paid 时有值
fee_amount / net_amount手续费、入账金额;仅已支付时有值

响应示例

{
  "ok": true,
  "code": "SUCCESS",
  "message": "下单成功",
  "data": {
    "order_id": "uuid",
    "out_trade_no": "P1779438078562110",
    "amount": 99,
    "amount_fen": 9900,
    "channel": "wechat",
    "subject": "演示商品",
    "status": "pending",
    "pay_url": "/pay.html?id=uuid",
    "notify_url": "https://merchant.example.com/pay/notify",
    "created_at": "2026-05-22T08:21:18.562Z",
    "paid_at": null
  }
}

查询订单

GET /api/v1/unified/order/{out_trade_no}

根据 商户订单号 查询单笔订单;已支付订单含 fee_amountnet_amountpaid_at(支付成功时间)。

已支付订单 data 补充字段

字段说明
statuspaid
paid_at支付成功时间(ISO8601)
fee_rate / fee_amount费率、手续费(元)
net_amount商户入账金额(元)

订单列表

GET /api/v1/unified/orders?status=pending&limit=50

Query说明
status可选,pending / paid
limit可选,默认 50,最大建议 100

返回数组元素字段与「查询订单」一致,含 created_atpaid_at 等。

支付结果与异步通知

演示环境为 Mock 渠道。支付成功方式:① 顾客打开 pay_url 收银台完成支付;② 运营在后台订单列表点击 手动回调。两种方式均会将 status 置为 paid 并写入 paid_at、账变流水。

异步通知 notify_url

统一下单时传入 notify_url 后,当运营对该笔待支付订单执行 手动回调 且入账成功时,平台向该地址发起:

POST {notify_url} · Content-Type: application/json · 超时 8 秒

商户接口建议返回 HTTP 2xx 表示接收成功;非 2xx 视为通知失败(可在运营操作日志中查看结果)。

说明:收银台支付成功不会触发 notify_url,请对收银台场景使用「查询订单」轮询或改由运营手动回调。

通知 Body 示例

{
  "event": "payment.success",
  "order_id": "uuid",
  "out_trade_no": "M20260522001",
  "merchant_id": "uuid",
  "amount": 99,
  "amount_fen": 9900,
  "channel": "wechat",
  "status": "paid",
  "fee_amount": 0.59,
  "net_amount": 98.41,
  "paid_at": "2026-05-24T12:00:00.000Z",
  "subject": "演示商品"
}

通知字段

字段说明
event固定 payment.success
order_id平台订单 ID
out_trade_no商户订单号
merchant_id商户 ID
amount / amount_fen订单金额(元 / 分)
channel支付渠道
statuspaid
fee_amount / net_amount手续费、入账金额
paid_at支付成功时间
subject商品描述

错误码

codeHTTP说明
SUCCESS200成功
AUTH_REQUIRED401未提供 API 密钥
AUTH_INVALID401密钥错误
MERCHANT_INACTIVE403商户未开通
INVALID_PARAM400参数无效
DUPLICATE_OUT_TRADE_NO400商户订单号重复
ORDER_NOT_FOUND404订单不存在

调用示例(cURL)

YOUR_KEYYOUR_SECRET 替换为商户后台中的密钥。

统一下单

curl -X POST "http://localhost:3000/api/v1/unified/order" \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: YOUR_KEY" \
  -H "X-Api-Secret: YOUR_SECRET" \
  -d "{\"amount\":99,\"channel\":\"wechat\",\"subject\":\"演示商品\",\"out_trade_no\":\"M20260522001\",\"notify_url\":\"https://merchant.example.com/pay/notify\"}"

查询订单

curl "http://localhost:3000/api/v1/unified/order/M20260522001" \
  -H "X-Api-Key: YOUR_KEY" \
  -H "X-Api-Secret: YOUR_SECRET"