原文签名,服务端调用
API Key 与签名密钥保留在后端,对时间戳、点号和实际发送的 JSON 原文计算 HMAC-SHA256。
支付接入
从商户后端创建 USDT / USDC 支付订单、获取收银台、查询付款状态并验证签名 Webhook。支持钱包快捷支付与手动转账,提供金额匹配和回调重发文档,密钥保留在服务端。
TRON 暂不支持 USDC。支付组合需要后台启用并配置有效的收款钱包。USDbC、USDC.e 及其他合约不能替代此处列出的币种。
Ethereum、Polygon、Solana 和 Base 使用 Circle 发行的原生 USDC。 BNB Smart Chain 使用 Binance-Peg USDC,精度为 18 位,并非 Circle 发行的原生 USDC。 Base 主网支持原生 USDC 与桥接 USDT。是否可收款取决于后台启用状态和有效的收款钱包。
操作步骤
适合自定义网站、SaaS 与数字商品后端。示例使用 USDC / Base;网络与币种需要同时匹配启用配置。
先在自己的数据库保存订单号、价格、买家与币种网络。服务端使用同一商户的 API Key 和当前 Webhook 密钥,对实际发送的 JSON 原文签名。
创建成功后保存 checkoutUrl 与 payment 返回值。向客户展示完整应付金额;发生超时先按原 externalOrderId 查询,重复编号被拒绝不代表应新建付款。
回调先验证原始请求体、时间戳与签名,再核对保存的本地订单、网络、币种、收款地址、应付及实付信息。浏览器返回页面不作为支付依据。
在事务或持久队列中可靠记录有效通知,确保同一订单只交付一次,再返回 2xx。CONFIRMED 已表示付款确认,不必只等待 COMPLETED。
BoltUtil 核对付款并发送签名回调。您的服务端验签、核对订单状态并去重后,再交付商品、开通服务或入账。
接入要点
API Key 与签名密钥保留在后端,对时间戳、点号和实际发送的 JSON 原文计算 HMAC-SHA256。
请求超时不代表创建失败。保留 externalOrderId,先查询状态,再决定重试,避免盲目生成新编号。
BoltUtil 核对付款并发送签名回调。您的服务端需要验签、核对本地订单和付款信息、去重,再执行开通、发货或入账。
import crypto from 'node:crypto'
// Node.js 20+ server module. Call only after authenticating the buyer.
// order must come from your database, with ownership and price checked.
// Never pass req.body directly; persist externalOrderId before calling.
export async function createStablecoinCheckout(order) {
const key = process.env.BOLTUTIL_API_KEY
const secret = process.env.BOLTUTIL_API_SECRET
if (!key || !secret) throw new Error('Missing server credentials')
const payload = JSON.stringify({
externalOrderId: order.externalOrderId,
amount: order.amount,
currency: 'USDC',
network: 'BASE',
notifyUrl: 'https://merchant.com/webhooks/boltutil',
returnUrl: 'https://merchant.com/orders/complete'
})
const timestamp = Date.now().toString()
const signature = crypto.createHmac('sha256', secret)
.update(`${timestamp}.${payload}`).digest('hex')
// A timeout does not prove creation failed. Query order/status using
// the SAME externalOrderId before deciding whether to retry.
const response = await fetch('https://api.boltutil.com/api/v1/order/create', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Bolt-Key': key,
'X-Bolt-Timestamp': timestamp,
'X-Bolt-Signature': signature
},
body: payload,
signal: AbortSignal.timeout(10000)
})
const result = await response.json()
if (!response.ok || result.code !== 200 || !result.data?.checkoutUrl) {
throw new Error('Create order failed; reconcile the saved order')
}
// Save result.data on the server. Return only checkout data to the buyer.
return result.data
}此处为服务端接入示例,不会发送请求。实际调用需 API Key、时间戳与请求原文签名,并校验本地订单和价格。
查看开发文档支付接入
示例用于验证建单协议、金额和原文签名,不包含您的订单数据库与持久去重。默认回调返回 503,避免未保存通知就确认接收。完成本地协议测试后,再接入自己的订单事务与履约流程;WooCommerce 应使用官方插件对应的集成接口。
同一商户下的 externalOrderId 必须唯一,重复创建会被拒绝。请求超时后先查询原订单,不要直接生成新编号。
不会。客户直接转入您配置的收款钱包。BoltUtil 负责订单与链上付款核对,不托管资金,不需要私钥、助记词或提现权限。
TRON 仅支持 USDT。其他网络支持配置的 USDT / USDC 版本,实际可用组合取决于渠道启用状态与商户钱包。请以接口和收银台返回为准。
returnUrl 只是页面跳转。请以已验证的签名回调或可信的服务端查询为依据,核对订单后幂等处理。
免费商户可查看自己的待核对记录。手动转账的金额差异符合规则时可生成核对记录;多个候选须先核实归属。接受或拒绝关联需要有效会员,接受后确认付款并按配置发送回调。
可以。支持的网络与设备可使用钱包快捷支付,自动填写收款地址、代币和完整应付金额,客户在钱包中核对并确认。首次使用可能需要解锁、授权连接或切换网络;也可扫码或复制地址手动转账,付款后仍需链上确认。