API 文档与开发者指南

v1 · 正式版

快速接入

在站点上接收加密支付只需三步:创建 API 密钥、登记收款钱包地址、开出第一笔订单。由于全程非托管,收款资金直接进入由您控制的钱包。

  • POST /v1/merchants/{merchant_id}/api-keys — 生成用于签名请求的 API 密钥对。
  • POST /v1/addresses — 登记 USDT 等代币收款所用的固定钱包地址(每个网络与资产各一个)。
  • POST /v1/sweep-addresses — 登记 TRX、BNB、GRAM 等原生币收款归集的主钱包。
  • POST /v1/webhooks — 登记付款完成时接收通知的 URL 接口。
API 密钥的 Secret 在服务端加密存储,出于安全考虑仅在创建时显示一次。若遗失,可在控制台生成新密钥并一键停用旧密钥。

请求签名(HMAC)

所有 HTTP 请求均使用 HMAC-SHA256 签名。签名基于请求的原始报文体(raw bytes)计算,因此即使 JSON 字段顺序发生变化,签名依然有效。

规范化签名模板
模板
METHOD \n PATH \n TIMESTAMP \n NONCE \n SHA256(raw_body)
X-Api-Key
API 密钥 ID(pk_…)
X-Timestamp
Unix 时间戳(秒,允许服务器时钟容差)
X-Nonce
唯一随机字符串(最长 128 字符,一次性)
X-Signature
hex(hmac_sha256(secret, canonical))

请求安全由两层保障:时间戳须落在容差窗口内,且每个 nonce 仅可使用一次。重复提交同一请求会被自动拒绝(HTTP 401)。

Python 签名请求客户端示例
PYTHON
import hashlib, hmac, os, time, json, urllib.request
KEY_ID = os.environ["COINZEN_KEY_ID"]
SECRET = os.environ["COINZEN_SECRET"]
BASE = "https://coinzen.cerceyn.com"
def request(method: str, path: str, payload: dict | None = None) -> bytes:
body = json.dumps(payload).encode() if payload is not None else b""
ts = str(int(time.time()))
nonce = os.urandom(16).hex()
canonical = "\n".join(
[method.upper(), path, ts, nonce, hashlib.sha256(body).hexdigest()]
)
signature = hmac.new(SECRET.encode(), canonical.encode(), hashlib.sha256).hexdigest()
req = urllib.request.Request(
BASE + path,
data=body or None,
method=method.upper(),
headers={
"X-Api-Key": KEY_ID,
"X-Timestamp": ts,
"X-Nonce": nonce,
"X-Signature": signature,
"Content-Type": "application/json",
},
)
with urllib.request.urlopen(req) as resp:
return resp.read()

订单生命周期

创建订单后即进入状态机。若未指定网络与资产,订单以 selecting 状态开始。客户在支付页面选定网络与币种后,订单转入 pending 并分配收款地址。

  • selecting pending, expired, cancelled
  • pending confirming, partially_paid, expired, cancelled
  • confirming paid, overpaid, failed
  • paidoverpaid — 若客户对已付订单再次转账,金额会自动更新。

paidoverpaidexpiredcancelledfailed 为终态。遇到链上重组或迟到付款时,系统会自动更新状态并通过回调通知您的系统。

amount_exacttrue 时,客户须转账与指定金额完全一致的数额,系统才能即时且无歧义地完成对账。

回调通知

订单状态的每次变化都会推送到您登记的回调接口。每个数据包均使用 HMAC-SHA256 签名,您可据此确认数据完整且确实来自 Coinzen。

X-Coinzen-Signature
t=<unix>,v1=<hex hmac_sha256(secret, "<t>.<raw_body>")>
X-Coinzen-Delivery
唯一投递 ID(UUID)
X-Coinzen-Event
触发的事件名称(例如 invoice.paid)
Python 回调验签示例
PYTHON
import hashlib, hmac, time
def verify(raw_body: bytes, header: str, secret: str, tolerance: int = 300) -> bool:
"""X-Coinzen-Signature: t=<unix>,v1=<hex>"""
parts = dict(p.split("=", 1) for p in header.split(","))
t, v1 = parts["t"], parts["v1"]
if abs(time.time() - int(t)) > tolerance:
return False
expected = hmac.new(
secret.encode(), f"{t}.".encode() + raw_body, hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, v1)

支持的回调事件

  • invoice.pending
  • invoice.confirming
  • invoice.partially_paid
  • invoice.paid
  • invoice.overpaid
  • invoice.expired
  • invoice.cancelled
  • payment.reverted
  • deposit.unmatched
  • credit.low
  • credit.exhausted

自动重试机制

首次投递在付款完成后立即进行。若您的服务器未返回 200 OK,系统会按 30 · 120 · 600 · 3600 · 21600 · 86400 秒的间隔分七级自动重试。全部重试失败后,记录转入 dead_letter 状态,可在控制台一键重新入队。

手续费与服务余额

Coinzen 从不从客户付款中扣取手续费。USDT 及其他加密货币付款直接进入您的地址,该钱包的私钥仅由您持有。平台服务费从您预先充值的服务余额中扣减,因此收款始终足额。

  • 标准费率为 1%。新开通账户前 45 天适用 0.1% 的优惠费率。当前适用费率可在 GET /v1/credit 响应的 fee_bps 字段查看(基点:10 = 0.1%,100 = 1%)。
  • 仅对成功完成的订单(paidoverpaid)收取手续费。
  • 已取消、已过期或金额不足的订单不收取任何手续费。
  • 服务余额用尽时,已开订单的收款流程不受影响,正常处理;仅新建订单的请求会收到余额提示(HTTP 402)。

两步扣费模型

订单付款完成时,手续费记录立即以 pending 状态创建,不依赖任何外部服务,以免拖慢链上跟踪速度。汇率换算在后台完成后,净额从余额中扣减。

若发生链上重组导致付款回退,手续费扣减会立即作废;若已扣减,则以 reversal 记录退回余额。

服务余额充值

调用 POST /v1/credit/deposit-addresses 可获得专属的 USDT 长期充值地址。向该地址转入的资金在链上确认后即自动计入服务余额,无需人工审核或等待。

该充值地址是您的手续费充值地址,请勿作为收款地址提供给客户。

自动补足

启用后,即使服务余额归零,您的销售也不会中断。系统会将下一笔小额订单的收款直接转入服务余额,服务持续可用。

  • 转入服务余额的该笔订单不再另行收取手续费。
  • 出于安全考虑设有上限(默认 25 USD)。超过上限的订单不会被转入,大额订单不受影响。
  • 可随时通过 PUT /v1/credit/auto 接口或控制台启停,并自行设定上限。

余额提醒

服务余额低于阈值时触发 credit.low 事件,用尽时触发 credit.exhausted,让您提前知悉。

支持的区块链网络与资产

下表为正式网络注册表的摘要。如需运行时的实时清单,请调用 GET /v1/networks

区块链网络资产小数位数收款模式合约地址
TRONTRX6逐单动态地址原生币
TRONUSDT6固定地址 + 唯一金额TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t
BSCBNB18逐单动态地址原生币
BSCUSDT18固定地址 + 唯一金额0x55d398326f99059fF775485246999027B3197955
TONGRAM9逐单动态地址原生币
TONUSDT6固定地址 + 唯一金额EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs

API 接口

方法路径功能说明权限范围
GET/healthz服务健康检查public
GET/readyz依赖与就绪状态public
GET/v1/networks支持的区块链网络与资产public
POST/v1/invoices创建收款订单invoices:write
GET/v1/invoices订单列表(分页)invoices:read
GET/v1/invoices/{invoice_id}获取订单详情invoices:read
POST/v1/invoices/{invoice_id}/cancel取消订单invoices:write
GET/v1/rates获取可锁定的汇率报价invoices:read
GET/v1/balances按网络与资产查询钱包余额invoices:read
GET/v1/deposits/unmatched列出未匹配的入账转账invoices:read
POST/v1/deposits/{deposit_id}/attach手动将入账转账关联到订单invoices:write
POST/v1/addresses登记固定收款钱包invoices:write
GET/v1/addresses列出已登记的固定地址invoices:read
POST/v1/sweep-addresses登记原生币归集钱包invoices:write
GET/v1/credit当前服务余额invoices:read
GET/v1/credit/entries余额明细与变动记录invoices:read
POST/v1/credit/deposit-addresses获取服务余额充值地址invoices:write
PUT/v1/credit/auto更新自动补足设置invoices:write
PUT/v1/merchants/{merchant_id}/credit/fee更新商户专属费率admin
POST/v1/webhooks登记回调接口webhooks:write
GET/v1/webhooks/deliveries回调通知与投递记录webhooks:read
POST/v1/webhooks/deliveries/{delivery_id}/replay重发失败的通知webhooks:write
API 文档与开发者指南 · Coinzen