API 参考
下方每个端点都讲 JSON,部署在 https://api.infraio.xyz(生产)
或 https://api-dev.infraio.xyz(测试),并通过 HMAC-SHA256 鉴权 —
请求签名见 身份验证,错误信封
形态见 错误。
本页列出面向商户集成的端点。没有独立页面的端点,会在相关概念页中说明。
/b2b/v1/* 下的端点使用你的 secret key(sk_…)进行 HMAC 签名,
这是你的后端调用的表面。商户仪表板和托管收银台使用各自的端点,
不属于集成 API。
结账
| 方法 | 路径 | 用途 | 备注 |
|---|---|---|---|
POST | /b2b/v1/checkout-sessions/quick | 一次调用创建会话 — 订单 + 结账会话一并铸造。 | 请求 body 与示例见 快速入门。 |
POST | /b2b/v1/checkout-sessions | 针对已存在订单创建会话。当你的平台已有自己的订单模型,且希望每次尝试一个会话时使用。 | 两步流程。 |
GET | /b2b/v1/checkout-sessions/by-order/{order_id} | 列出某订单曾铸造的所有会话。 | 当买家放弃了一次会话,且你想在自己的仪表板呈现历次尝试时有用。 |
订单
订单是恒定的可计费实体。一个订单可以背靠多个结账会话(例如买家放弃后重试)。
| 方法 | 路径 | 用途 | 备注 |
|---|---|---|---|
POST | /b2b/v1/orders | 不带会话创建订单。 | 当你想稍后给买家发支付链接而不是立即跳转时使用。 |
GET | /b2b/v1/orders/{id} | 读取单个订单,含明细项 + 状态。 | 状态:PENDING → PAID | PARTIAL_PAID | CANCELED。退款后:PARTIALLY_REFUNDED | REFUNDED。 |
GET | /b2b/v1/orders/by-merchant/{merchant_id} | 列出你的订单,cursor 分页。 | 协议见 Cursor 分页。 |
PATCH | /b2b/v1/orders/{id}/cancel | 把未支付订单标记为取消。发出 order.canceled。 | 已支付订单会失败。 |
PATCH | /b2b/v1/orders/{id}/reopen | 反向操作自动取消(canceled_reason=payment_timeout)。 | 当买家在 TTL 过期后回来时有用。 |
退款
saga 流程与 token 生命周期见 退款概念页。
商户发起
| 方法 | 路径 | 用途 | 备注 |
|---|---|---|---|
POST | /b2b/v1/merchants/{merchant_id}/refunds | 商户发起的退款。自动批准(跳过 PENDING)。 | 立即发出 payment.refund.approved。 |
客户发起 — 退款申请 token
买家在我们托管页填退款表单;你只负责铸造 token 并把 URL 交付。你可以 从后端(见下)或商户仪表板铸造 token。续期与取消在仪表板中处理。
| 方法 | 路径 | 鉴权 | 用途 |
|---|---|---|---|
POST | /b2b/v1/merchants/{merchant_id}/refund-requests | HMAC (sk_…) | 从你的后端铸造 token。Body:{ref_type, ref_value, amount, ttl_seconds?, metadata?, hide_summary?, hide_header?}。ref_type 取值 order_id / order_number / session_id / session_key;ref_value 是对应的标识。amount 必填,锁定买家可提交的最大金额。默认 TTL 30 分钟。发出 refund_request.created(source: b2b)。 |
退款生命周期(创建后)
适用于两种流程。下面这些端点操作的是退款本身(id 以 rfn_… 开头),
不是申请 token。
| 方法 | 路径 | 用途 | 备注 |
|---|---|---|---|
GET | /b2b/v1/refunds/{id} | 读取一笔退款。 | 状态:PENDING → APPROVED → EXECUTED | REJECTED。 |
GET | /b2b/v1/refunds/by-merchant/{merchant_id} | 列出你的退款,cursor 分页。 | — |
POST | /b2b/v1/refunds/{id}/approve | 批准一笔 PENDING 退款(仅客户发起 — 商户发起的退款已经处于 APPROVED)。 | 加密:落到 APPROVED,你接着调用 /submit-tx。 |
POST | /b2b/v1/refunds/{id}/reject | 拒绝一笔 PENDING 退款。 | 发出 payment.refund.rejected。 |
POST | /b2b/v1/refunds/{id}/submit-tx | 仅加密 — 标记你广播的链上 tx hash。 | Body:{tx_hash, network, token_address} — 三者必填。 |
目录(只读)
| 方法 | 路径 | 用途 |
|---|---|---|
GET | /v1/supported/networks | InfraIO Pay 可结算的全部链(主网 + 测试网,按环境筛选)。 |
GET | /v1/supported/tokens | 这些链上的稳定币。 |
GET | /v1/supported/currencies | order.currency 接受的货币。 |
健康
| 方法 | 路径 | 鉴权 | 用途 |
|---|---|---|---|
GET | /health | 无(公开) | 存活检查。返回 {"status":"ok"}。请将在线监控指向这里。 |
Cursor 分页
每个 list 端点接受相同的查询参数,返回相同的信封。cursor 不透明,且使用它而不是 offset,这样 当翻页时有新行到达,页面也不会偏移。
| 查询参数 | 类型 | 默认 | 备注 |
|---|---|---|---|
cursor | string | — | 不透明 — 把上一次响应里的 next_cursor 原样复制。 |
limit | int | 20 | 1..100。 |
sort_dir | 'asc' | 'desc' | desc | 按 (created_at, id) 排序。 |
from / to | RFC3339 | — | 可选的时间窗筛选。 |
search | string | — | 在支持的端点上做自由文本筛选。 |
响应信封:
{
"orders": [ /* 当前页的行 */ ],
"next_cursor": "eyJjcmVhdGVkX2F0IjoiMjAyNi0wNS0...",
"has_next": true
}has_next 永远存在。当 has_next 为 false 时,next_cursor 省略。
请把 cursor 当作不透明字符串。
本页未涵盖
本页涵盖面向商户集成的端点。如果你需要未列出的端点或 OpenAPI 规范, 请联系支持团队。