OOnlobo Gateway OpenAPI 3.1

PRODUCTION API · V1

聚合支付网关
商户接入文档

统一接入支付、退款、订阅、代付与日报。平台只支持标准两位小数币种,交易金额使用分制整数,所有业务结果以订单查询或异步通知为准。

Base URLhttps://onlobo.com/gateway/v1
签名算法HMAC-SHA256
请求格式application/json
重要:HTTP 2xx 只表示请求已被接受,不等于支付成功。读取 data.status,并通过查询或异步通知确认最终结果。
01

SECURITY

签名鉴权

除公开文档和健康检查外,所有 /gateway/v1/** 请求均须携带下列请求头。API Secret 只在后台生成时显示一次。

请求头要求
X-Merchant-Id商户编码
X-Api-Key当前启用的 API Key
X-TimestampUTC Unix 秒,允许与服务器相差 5 分钟
X-Nonce16–128 位字母、数字、下划线或短横线;10 分钟内不可重复
X-Signaturev1= + 小写十六进制 HMAC-SHA256
Idempotency-Key所有创建类请求必需,最长 128 字符

签名原文

UPPERCASE_HTTP_METHOD + "\n" +
requestTarget + "\n" +
timestamp + "\n" +
nonce + "\n" +
lowercase_hex_sha256(rawBody)

requestTarget 是原始路径与原始查询字符串,例如 /gateway/v1/payments?page=1&pageSize=50。查询参数顺序和编码必须与实际发送的 URL 完全一致。

signature = "v1=" + lowercase_hex(
  HMAC_SHA256(apiSecret, canonicalText)
)
02

CONTRACT

幂等与统一响应

幂等范围是“商户 + 操作类型 + Idempotency-Key”。相同 Key 和相同请求返回首次结果;请求内容不同返回 1004

{
  "code": 1,
  "message": "Success",
  "data": {},
  "requestId": "req_..."
}
  • code=1 表示接口处理成功。
  • 错误响应的 datanull
  • 请求体最大 1 MB,超出返回 HTTP 413 / 1007
  • 只支持 ISO 默认精度为两位小数的币种;金额按分传整数,例如 12.34 传 1234
03

PAYMENTS

支付

POST/payments创建支付
{
  "merchantOrderNo": "ORDER-20260820-001",
  "currency": "USD",
  "amount": 1234,
  "paymentMethod": "CARD",
  "channelSelectionMode": "AUTO",
  "country": "US",
  "returnUrl": "https://merchant.example.com/payment/return",
  "notifyUrl": "https://merchant.example.com/api/payment/notify",
  "metadata": {"customerReference": "C10001"}
}

channelSelectionMode 支持 AUTOPREFERREDSTRICT。PREFERRED/STRICT 必须提供后台分配的稳定 channelCode

GET/payments/{paymentNo}查询支付
GET/payments?merchantOrderNo=...按商户订单号查询
GET/payments/{paymentNo}/attempts查询渠道尝试
主要状态CREATEDPROCESSINGREQUIRES_ACTIONAUTHORIZEDSUCCEEDEDFAILEDCANCELLEDEXPIRED

当响应包含 nextAction 时,按其 type 执行 REDIRECT、FORM_POST 或 IFRAME;不得修改或自行补签上游参数。

04

REFUNDS

退款

POST/payments/{paymentNo}/refunds创建退款
{
  "merchantRefundNo": "REFUND-20260820-001",
  "amount": 500,
  "reason": "Customer request"
}
GET/refunds?page=1&pageSize=50退款列表

退款固定使用原支付渠道账户。支付订单的累计成功退款与处理中退款不得超过可退款金额。

05

SUBSCRIPTIONS

订阅

POST/subscriptions创建订阅
{
  "merchantSubscriptionNo": "SUB-20260820-001",
  "customerReference": "C10001",
  "customerEmail": "[email protected]",
  "currency": "USD",
  "planCode": "MONTHLY_STANDARD",
  "paymentMethod": "CARD",
  "notifyUrl": "https://merchant.example.com/api/subscription/notify",
  "paymentMethodData": {}
}

金额、周期数量和周期单位由后台订阅包价格决定,商户请求不能覆盖。失败扣款同样生成完整周期账单。

GET/subscriptions/{no}订阅详情
GET/subscriptions/{no}/invoices完整周期链
GET/subscriptions?customerEmail=...组合查询
POST/subscriptions/{no}/cancel取消订阅
06

PAYOUTS

代付

代付渠道尚未完成生产验收。接口契约保留,但只有后台启用代付能力后才可调用。
POST/payouts创建代付
GET/payouts/{payoutNo}查询代付
POST/payouts/{payoutNo}/query主动查询上游

收款明细由渠道能力决定;完整收款资料只用于向上游发起请求,加密保存且不在查询接口返回。

07

REPORTS

每日交易报表

GET/daily-reports?from=2026-08-01&to=2026-08-20&status=3查询日报
GET/daily-reports/{yyyy-MM-dd}/download下载 Excel

每天 01:00(Asia/Shanghai)生成前一日数据;即使没有交易也会生成空报表。下载接口不接受临时维度筛选。

08

WEBHOOK

商户异步通知

网关在本地订单结果被同步响应、上游订单级异步回调或主动查询确认后,向订单级 notifyUrl 与商户级通知地址分别投递。每个目标独立重试。

1结果确认
2业务事件持久化
3异步投递
4响应 SUCCESS

商户回调响应体去除首尾空白后必须精确等于 SUCCESS,否则视为失败并进入延迟重试。不要仅依赖 HTTP 状态码。

{
  "eventId": "evt_...",
  "eventType": "payment.succeeded",
  "businessNo": "P...",
  "occurredAt": "2026-08-20T13:00:00+08:00",
  "data": {
    "paymentNo": "P...",
    "status": "SUCCEEDED",
    "amount": 1234,
    "currency": "USD"
  }
}

通知按商户 Webhook Secret 使用 HMAC-SHA256 签名;验签应针对收到的原始请求体。具体通知请求头以商户后台当前配置页显示为准。

09

ERRORS

错误码

1001–1007请求、资源、幂等、状态与请求体
1101–1107凭据、时间戳、Nonce 与签名
1201–1202网络策略与回调地址
2001支付订单不存在
2101–2105限额、交易权限与风控并发
3001–3002渠道不可用或结果未知
4001上游回调签名错误
9001内部错误