商户自建收银台
创建订单时传入 paymentOptions,拿到全部收款地址与应付数量,在自己的页面里渲染「网络 + 币种 + 地址 + 二维码」。
createOrder({ options: [...] }) → paymentOptions[]- 支付体验完全自定义
- 中途可追加收款方式
- 适合已有成熟结算页的产品
CNIXPay 是面向商户的稳定币支付网关。用一个 API 创建订单,用户在任一网络付款,系统自动确认到账、结算入账并回调你的服务。
一笔订单,可同时挂出多条网络与币种
实际可用组合以接口返回为准
从地址分配到到账确认,从结算记账到回调通知,每个环节都按“钱不能错”的标准设计。
一笔订单可同时挂最多 10 个「网络 × 币种」收款方式,用户在任一网络付款都计入订单,自建收银台和平台收银台都适用。
每笔订单从 HD 钱包派生独立地址,地址池按商户隔离、冷却后仅在同一商户内复用,到账归属清晰可审计。
链上 Webhook 实时推送到账,定时扫链作为兜底。即使某条通道抖动,订单也不会漏单。
订单以 USD 报价,用户用 USDT 或 USDC 按 1:1 支付,同一地址两种币都认;也可以用 TRX、BNB 等原生币报价收款。
用户少付或分多笔转账时,订单持续累计,每笔到账都推送 order.partially_paid;付足即完成,宽限期结束仍未付足则按实收入账并推送 order.underpaid。
回调带 HMAC-SHA256 签名与时间戳。四种订单事件推送失败都会自动重试约 22 小时,投递记录在商户后台可查,也可以重新推送。
你只需要创建订单和处理回调,链上的事交给我们。
服务端调用 POST /orders,传入金额与可选的网络 / 币种收款方式,拿到收款地址或收银台链接。
用户在你的页面或平台收银台,向候选地址转入 USDT / USDC,任选一条网络即可。
系统实时发现入账并核对金额。付足即为已支付,未付足则继续累计等待。
款项记入商户余额并生成流水,同时向你的 callbackUrl 推送签名事件。
五个 REST 接口覆盖全部收款场景:创建、查询、列表、追加收款方式、关闭。统一的 JSON 响应与错误码,金额全部使用字符串,另附 OpenAPI 文件。
请求头 Authorization: Bearer <API Key>,支持 IP 白名单。
商户订单号在应用内唯一,重复下单返回已有订单;追加收款方式、关闭订单重复提交直接返回现状。
各接口限流阈值公开,超限返回 429 并带 Retry-After,方便你做退避。
curl -X POST https://api.cnixpay.com/api/v2/orders \
-H "Authorization: Bearer $CNIXPAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"merchantOrderNo": "ORDER_10086",
"amount": "100.00",
"paymentOptions": [
{ "chain": "tron", "token": "USDT" },
{ "chain": "bsc", "token": "USDC" }
],
"callbackUrl": "https://shop.example.com/notify"
}'{
"code": 0,
"message": "success",
"data": {
"orderNo": "20261017105142a1b2c3d4e5f6",
"status": "pending",
"amount": "100.00",
"currency": "USD",
"paymentOptions": [
{ "chain": "tron", "token": "USDT", "address": "TR7NHq...", "amount": "100.00" },
{ "chain": "bsc", "token": "USDC", "address": "0x55d3...", "amount": "100.00" }
],
"cashierUrl": "https://pay.cnixpay.com/pay/20261017105142a1b2c3d4e5f6",
"expireTime": 1760670400
},
"requestId": "req_1c9e..."
}POST /notify HTTP/1.1
Content-Type: application/json
X-Webhook-Id: evt_7f3c9a...
X-Webhook-Timestamp: 1760670205
X-Webhook-Signature: v2=5b1f0e...
{
"id": "evt_7f3c9a...",
"event": "order.paid",
"createTime": 1760670200,
"data": { "orderNo": "20261017105142a1b2c3d4e5f6", "status": "paid", "version": 3, "...": "..." }
}import crypto from 'node:crypto'
// rawBody 必须是原始请求体(Buffer),不要先解析成 JSON 再序列化
export function verifyWebhook(rawBody, headers, apiSecret) {
const timestamp = headers['x-webhook-timestamp']
const signature = headers['x-webhook-signature'] ?? ''
if (!/^\d+$/.test(timestamp ?? '') || Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) return false
const expected =
'v2=' + crypto.createHmac('sha256', apiSecret).update(`${timestamp}.`).update(rawBody).digest('hex')
const a = Buffer.from(expected)
const b = Buffer.from(signature)
return a.length === b.length && crypto.timingSafeEqual(a, b)
}
// Express: app.post('/notify', express.raw({ type: 'application/json' }), handler)创建订单时传入 paymentOptions,拿到全部收款地址与应付数量,在自己的页面里渲染「网络 + 币种 + 地址 + 二维码」。
createOrder({ options: [...] }) → paymentOptions[]创建订单时不传 paymentOptions,把用户跳转到返回的 cashierUrl。选链、地址、二维码、倒计时与支付结果都由平台页面处理。
createOrder({ }) → cashierUrl商户后台围绕“状态判断”和“下一步操作”设计,财务和开发都能各取所需。
订单结算实时入账,提现到你保存的地址,状态全程可追踪。
按订单号、地址、状态、时间筛选,逐笔查看链上交易哈希与回调记录。
日报、资金明细、收支流水一键导出 CSV,支持中英文表头。
多应用管理,独立 API Key / Secret、回调地址与 IP 白名单。
提现需要 TOTP 两步验证;新增提现地址需邮箱验证码 + TOTP。修改密码或邮箱后,提现自动暂停 24 小时。
API Key 认证、IP 白名单、按接口限流。回调带 HMAC-SHA256 签名与时间戳,可防伪造和重放。
收款地址按商户隔离分配,不与其他商户混用,链上资金归属始终清晰。
金额以整数微单位计算与比较,余额变动逐笔留痕,可对账、可审计。
目前支持 TRON、BNB Smart Chain、Ethereum、Polygon、Solana 上的 USDT 与 USDC(TRON 为 USDT)。具体可用组合由平台配置,以接口返回为准。
不需要。收款地址由平台 HD 钱包派生并监听,订单完成后款项记入你的商户余额,你可以在后台随时提现到自己的链上地址。
订单保持 pending 并继续累计,每笔到账都推送 order.partially_paid;累计达到应付即变为 paid 并推送 order.paid。过期后宽限期结束仍未付足,按实收入账,订单变为 underpaid 并推送 order.underpaid,由你人工处理。
以回调事件里订单的 status == "paid" 为准,务必校验签名、按 X-Webhook-Id 去重、按 version 取最新。发货前可调用查询订单接口再确认一次。
订单以 USD 报价,用户用 USDT 或 USDC 按 1:1 支付;也可以用 TRX、BNB、ETH、POL、SOL 原生币报价,此时只收该币。暂不支持人民币等法币报价。
平台不提供模拟沙箱,建议用小额订单在真实网络上完成联调。
费用与最小提现金额以商户后台展示为准,提现前会明确显示本次手续费与到账金额。
注册商户账号后,在后台创建应用并提交上线,应用详情里会显示 API Key 与 API Secret。API Key 放在请求头 Authorization: Bearer 里;API Secret 只用于验证回调签名,不要放进请求或前端代码。
默认 30 分钟,创建订单时可用 expireMinutes 指定(5–1440 分钟),并以 expireTime 返回。过期后还有一段宽限期,期间到账或补足仍会计入订单;宽限期之后才到的钱由平台人工处理。
累计到账达到应付金额,订单即为 paid;实际到账以 paidAmount 返回,多付部分同样计入你的商户余额。
可以。还没收到付款的 pending 订单可以调用关闭订单接口,关闭后不再自动入账。已收到付款或有链上确认中到账的订单不能关闭。
可以。创建订单时传 callbackUrl 即按订单指定,不传则使用应用的默认回调地址,都必须是 https。你的接口返回任意 HTTP 2xx 即算送达。
只有 4 个:pending 还没有结果,等待即可;paid 已付足,可以发货;underpaid 宽限期结束只收到部分款,需要人工处理;closed 没收到钱,订单已关闭。
可以。一个商户账号下可以创建多个应用,每个应用有独立的 API Key / Secret、回调地址与 IP 白名单,订单和统计也按应用区分。
商户支付 API 目前不包含退款接口。如需退款,请由你的系统从自有钱包向用户地址转账处理。