Sign in
支付与提现/静态钱包

静态钱包

与特定订单或用户绑定的永久存款地址,适合周期性和长期支付场景。

静态钱包是用于接收加密货币付款的永久地址,与特定的 order_id 关联,按 project_id + order_id + currency + network 组合保持唯一。

适用场景:

  • 来自同一用户的周期性存款
  • 显示在用户资料页的长期收款地址
  • 希望为每位用户保留稳定地址的高频充值场景

创建静态钱包

POST/v1/static-wallet

请求参数

字段类型必需描述
currencystring加密货币(USDT、BTC、ETH 等)
networkstring网络代码
order_idstring您的订单 / 用户 ID(最多 255 个字符)
labelstring钱包标签(最多 255 个字符)
url_callbackstringwebhook 通知 URL
invite_codestring推荐人代码

请求示例

JSON
{
  "currency": "USDT",
  "network": "TRX-TRC20",
  "order_id": "USER-123",
  "label": "User deposit #123",
  "url_callback": "https://your-site.com/webhook/static"
}

响应示例

JSON
{
  "state": 0,
  "result": {
    "uuid": "019b2265-34d8-7001-a230-8f97de90d481",
    "address": "TXYZabc123...",
    "currency": "USDT",
    "network": "TRX-TRC20",
    "label": "User deposit #123",
    "order_id": "USER-123",
    "status": "active",
    "url": "https://go.2328.io/static/019b2265-34d8-7001-a230-8f97de90d481",
    "created_at": "2026-01-20T12:00:00Z",
    "qr": "data:image/png;base64,iVBORw0..."
  }
}

钱包信息

通过 uuidaddress 获取静态钱包信息。

POST/v1/static-wallet/info
字段类型必需描述
uuidstring是*静态钱包 UUID
addressstring是*区块链钱包地址

uuidaddress 至少需要提供一个。

钱包列表

POST/v1/static-wallet/list
字段类型必需描述
statusstring按状态过滤(activeinactive
currencystring按币种过滤
networkstring按网络过滤
order_idstring按 order_id 过滤
pageint页码(默认:1)
per_pageint每页条数(默认:20,最大:100)

启用 / 禁用钱包

切换静态钱包是否接受新的支付。

POST/v1/static-wallet/disable
POST/v1/static-wallet/enable

两个端点都只接受单一参数:

JSON
{
  "uuid": "019b2265-34d8-7001-a230-8f97de90d481"
}

钱包交易记录

获取静态钱包收到的所有充值。

POST/v1/static-wallet/transactions
字段类型必需描述
uuidstring静态钱包 UUID
date_fromdate起始日期(YYYY-MM-DD)
date_todate结束日期(YYYY-MM-DD)
pageint页码(默认:1)
per_pageint每页条数(默认:15,最大:5000)

静态钱包 webhook

当静态钱包收到付款时,系统会向 url_callback 发送 webhook。

静态钱包 webhook 与常规支付 webhook 格式不同。特别是,静态钱包 webhook 包含 merchant_amount 字段,应使用该字段进行入账。

Webhook 载荷

JSON
{
  "uuid": "a28b293f-5c76-4053-8062-ae9ca4ab784b",
  "order_id": "USER-7666308594",
  "amount": "10.00000000",
  "currency": "USDT",
  "amount_usd": "10.00000000",
  "exchange_rate": "1.00000000",
  "payer_currency": "USDT",
  "payer_amount": "10.00000000",
  "network": "TRX-TRC20",
  "address": "TMU9Tgpchvgbywkbj5SdC8KJS73t5m3M7G",
  "payment_status": "paid",
  "txid": "8369ede26a0da05b1bae154b4bb4072eb2453db30ba86b21831902670929454f",
  "tx_explorer_url": "https://tronscan.org/#/transaction/8369ede26a0da05b1bae154b4bb4072eb2453db30ba86b21831902670929454f",
  "payment_amount": "10.00000000",
  "merchant_amount": "9.920000000000000000",
  "created_at": "2026-05-09T16:13:04+03:00",
  "sign": "dd958d1405febce670a9a196e9141784b9f2a5f39cd6d1832d6f3f68d0de1e10"
}

静态钱包 webhook 不包含 urlexpires_at(地址是永久的,不存在会话概念),但包含 exchange_ratecreated_at

字段说明

字段类型说明
uuidstring本次充值的交易(账单)UUID
order_idstring您配置的静态钱包 order_id
amountdecimal (8 位小数)收到的加密货币金额
currencystring收到的加密货币(与钱包 currency 一致)
amount_usddecimal (8 位小数)收款时的美元等值
exchange_ratedecimal加密货币 / 美元的汇率
payer_currencystring静态钱包场景下与 currency 一致
payer_amountdecimal (8 位小数)静态钱包场景下与 amount 一致
networkstring区块链网络
addressstring静态钱包地址
payment_statusstring?????????? paid?AML ?????????????? aml_lock
txidstring链上交易哈希
tx_explorer_urlstring | null区块链浏览器中的交易链接。若没有 txid 或该转账为内部 P2P,则为 null
payment_amountdecimal (8 位小数)amount 一致
merchant_amountdecimal (18 位小数)扣除手续费后的入账金额 — 应使用此字段为用户入账
created_atstring (ISO 8601)收到充值的时间
signstring (hex)载荷的 HMAC-SHA256 签名

最佳实践

  • 唯一的 order_id — 为每个用户或订单使用唯一的 order_id
  • 幂等性 — 入账前先按 txid 去重,避免重复入账
  • 校验签名 — 入账资金前务必校验 sign 签名
  • 使用 merchant_amount — 按 merchant_amount(而非 payment_amount)为用户入账

生命周期和 idempotency

static wallet 是可重复使用的存款身份,而不是 invoice。它没有预期金额,也没有到期日。一个地址在其生命周期内可以产生任意数量的存款交易。

对于同一个 merchant 项目,创建为 idempotent、order_idcurrencynetwork:返回现有钱包。保持该元组稳定并保留返回的钱包uuid;请勿在每次同一客户打开存款屏幕时使用新的 order_id

充值idempotency与钱包idempotency不同:

  • order_id 标识可重复使用的钱包/客户映射;
  • 钱包uuid标识永久钱包记录;
  • webhook uuid 识别出一笔检测到的存款交易;
  • txid 标识链上转账,是记入的主去重密钥。

对已处理的链/网络/txid 身份使用数据库唯一性约束,并在记入客户内部余额的同一交易中声明它。

启用和禁用语义

禁用钱包会阻止应用程序将其作为活动存款目标处理;它不会删除地址或其历史记录,也无法停止用户已发送的区块链传输。

切勿告诉用户发送到非活动地址的资金会自动退回。区块链转账是不可逆转的。仅在从用户界面中删除地址后禁用,并保留针对延迟存款的操作恢复程序。

重新启用会保留相同的钱包身份和地址。不要仅仅为了改变标签而创建替代品;标签不是 settlement 标识符。

Static wallet 边缘情况

情况正确处理
重复创建请求接受返回的现有钱包并验证其持久元组,而不是期待新地址。
向一个地址进行多笔存款为每笔交易创建单独的本地存款行uuid/txid;切勿将钱包本身标记为“已付款”。
重复 webhook找到已经提交的txid后返回HTTP 200;永远不要再赊账。
确认延迟或链重新观察继续处理 idempotent 并从 /v1/static-wallet/transactions 进行调节。
存款低于最低 auto-convert预计源货币信贷没有完成 convert 块。
Auto-convert 成功分别存储源付款值和目标 convert 结果。
错误的令牌或错误的网络请勿伪造信用。记录证据并升级为支持/恢复,因为可恢复性是特定于链的。
基于备忘录/标签的链显示并验证平台返回的每个目标字段;当需要备忘录时,仅地址可能是不够的。
反洗钱锁定在通过合规流程发布权威状态之前,请勿信任最终用户。
地址显示后钱包被禁用立即将其从 UI 中删除,但继续监控延迟传输的操作警报。

Reconciliation 型号

运行定期作业,对 /v1/static-wallet/transactions 进行分页,按 txid 更新插入存款,并将其 merchant_amount、状态和可选转换结果与您的内部分类帐进行比较。 Webhook 交付应该使 reconciliation 快速,但 reconciliation 必须使其完整。