Расчеты без хранения средств
USDT / USDC поступает прямо на кошелек продавца; BoltUtil не хранит средства и закрытые ключи.
Руководство по интеграции
Производственная оплата USDT / USDC требует большего, чем просто адрес кошелька. Создайте заказ из Node.js, верните данные оформления заказа в браузер, а затем выполните его только после проверенного веб-перехватчика внутрисетевой оплаты.
Порядок действий
Как принимать платежи в USDT / USDC на веб-сайте с помощью Node.js
Создайте платежный заказ на сервере, указав сумму, сеть и внешний идентификатор.
Покажите покупателю checkout URL, сеть, адрес, QR-код и точную сумму USDT / USDC.
BoltUtil проверит сеть, контракт токена, адрес, сумму, срок заказа и подтверждения.
После подтверждения проверьте подпись webhook и выполните заказ идемпотентно.
BoltUtil проверяет платежи и отправляет подписанные callback. Ваш сервер проверяет подпись и статус, исключает повторы и затем выдаёт товар, доступ или баланс.
Примечания по интеграции
USDT / USDC поступает прямо на кошелек продавца; BoltUtil не хранит средства и закрытые ключи.
TRON, Ethereum, BNB Smart Chain, Polygon, Solana и Base. В TRON доступен только USDT / USDC; остальные маршруты USDT / USDC требуют включённого актива и настроенного кошелька.
HMAC-подпись, временная метка и повторная доставка помогают безопасно автоматизировать выполнение заказа.
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.
Читать документацию по APIНе раскрывайте API-ключ в браузере и сохраняйте внешний идентификатор до показа checkout.
Адрес сам по себе не заменяет явное указание TRC20, ERC20, BEP20, Polygon или Solana.
Return URL не подтверждает оплату; используйте подписанный webhook или серверный запрос статуса.
Руководство по интеграции
Нет. Средства поступают прямо на кошелек продавца, а BoltUtil отслеживает переводы и отправляет уведомления.
Система проверяет сеть, токен, адрес назначения, точную сумму, состояние и срок действия заказа.
TRON поддерживает только USDT. Ethereum, BNB Smart Chain, Polygon, Solana и Base используют настроенные версии USDT / USDC. Доступность зависит от активных каналов и кошельков продавца.
Создавайте заказы, отслеживайте переводы и уведомляйте свой сервер, не прося клиентов присылать снимки экрана.