密钥只保存在服务端
从 Node.js 后端创建订单,让 API 密钥和本地购物车校验始终远离浏览器代码。
生产级 USDT 收银台不能只展示钱包地址。您的 Node.js 服务应先创建订单,再向浏览器返回 Checkout 信息,并且只在验证链上付款 Webhook 后履约。
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 createUsdtCheckout(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: 'USDT',
network: 'TRC20',
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
}适用于 SaaS 订阅、数字商品、发票、账户充值,以及任何需要可审计 USDT 支付状态的网站。
调用支付 API 前,先在自己的数据库创建并保存唯一内部订单号。
由 Node.js 后端签名请求并调用 BoltUtil 创建订单接口,再把 Checkout URL 返回给浏览器。
向客户明确展示 USDT 网络和精确金额;浏览器跳转或 returnUrl 不能作为付款证明。
使用原始请求 body 验证 Webhook 时间戳和签名,再按订单号与交易哈希幂等履约。
保存已确认的交易哈希、网络、金额、收款地址和履约结果,供客服与对账使用。
从 Node.js 后端创建订单,让 API 密钥和本地购物车校验始终远离浏览器代码。
客户向您配置的商户钱包付款,BoltUtil 监听所选 USDT 网络并报告确认结果。
签名的服务端 Webhook 让应用无需信任客户跳转,也能可靠开通权限、发货或入账。
集成说明
客户可能提前返回,或者提交最终失败的交易。请以已验证的 Webhook 或服务端订单状态查询为准。
USDT 存在于多条网络。请明确显示 TRC20、ERC20、BEP20、Polygon 或 Solana,并只匹配创建订单时选择的网络。
保存商户订单号、交易哈希、精确金额、收款地址和确认状态,可以显著缩短异常付款的排查时间。
这些答案可帮助开发人员、创始人和支持团队在接受真正的 USDT 付款之前了解付款生命周期。
不要在浏览器代码中暴露私有 API 密钥。应从 Node.js 服务端创建订单、校验本地购物车或发票,再只把 Checkout 数据返回给前端。
仅在签名 Webhook 验证通过,或者可信的服务端状态查询确认订单完成后开通。returnUrl 不是付款证据。
让履约逻辑保持幂等,并通过唯一约束或事务状态变更保存商户订单号和交易哈希,安全忽略重复回调。
保留已保存的 externalOrderId,由服务端使用同一订单号调用 POST /api/v1/order/status。网络超时不代表创建失败;先核对订单状态再决定重试,不要直接生成新编号,以免产生第二个收银台订单。
这是 Node.js 20+ 服务端模块,需要接入自己的登录鉴权、数据库订单及归属校验、HTTPS 回调地址和已验证的 Webhook 处理器。金额必须读取服务端订单记录,不能直接信任浏览器提交的金额。
选择客户能够稳定使用的网络,并在页面上明确展示。BoltUtil 使用同一套订单 API 支持 TRC20、ERC20、BEP20、Polygon 和 Solana。
创建订单、监控转账并通知您的后端,而无需要求客户发送屏幕截图。
创建免费帐户