Guide d’intégration

Comment accepter les paiements USDT / USDC sur un site Web avec Node.js

Une caisse de production USDT / USDC a besoin de plus qu'une adresse de portefeuille. Créez une commande à partir de Node.js, renvoyez les données de paiement au navigateur, puis ne l'exécutez qu'après un webhook de paiement en chaîne vérifié.

Étapes

Une caisse de production USDT / USDC a besoin de plus qu'une adresse de portefeuille. Créez une commande à partir de Node.js, renvoyez les données de paiement au navigateur, puis ne l'exécutez qu'après un webhook de paiement en chaîne vérifié.

Comment accepter les paiements USDT / USDC sur un site Web avec Node.js

  1. 01

    Créez la commande depuis votre serveur avec le montant, le réseau et votre identifiant externe.

  2. 02

    Affichez au client l’URL de paiement, le réseau, l’adresse, le QR code et le montant USDT / USDC exact.

  3. 03

    BoltUtil vérifie le réseau, le contrat du token, l’adresse, le montant, l’expiration et les confirmations.

  4. 04

    Après confirmation, vérifiez la signature du webhook et exécutez la commande de façon idempotente.

BoltUtil vérifie les paiements et envoie des callbacks signés. Votre serveur vérifie la signature et le statut, évite les doublons puis livre, active ou crédite.

Notes d'intégration

Ce qui compte avant la production

Règlement non dépositaire

Les USDT / USDC vont directement au portefeuille marchand ; BoltUtil ne conserve ni fonds ni clés privées.

Six réseaux de paiement

TRON, Ethereum, BNB Smart Chain, Polygon, Solana et Base. TRON accepte uniquement USDT / USDC ; les autres canaux USDT / USDC nécessitent un actif activé et un portefeuille valide.

Webhooks signés

La signature HMAC, l’horodatage et les journaux de renvoi sécurisent l’automatisation après paiement.

Node.js 22+ · USDC / Base checkout
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
}

Exemples d’intégration et de diagnostic. Aucune requête n’est envoyée. Consultez vos commandes, la configuration réseau et la documentation API.

Lire la documentation sur l'API

Créez les commandes côté serveur

N’exposez jamais la clé API dans le navigateur et enregistrez l’identifiant externe avant le checkout.

Affichez clairement le réseau

Indiquez TRC20, ERC20, BEP20, Polygon ou Solana avec l’adresse afin d’éviter les erreurs de réseau.

Exécutez après vérification

L’URL de retour ne prouve pas le paiement ; utilisez le webhook signé ou une requête de statut serveur.

Guide d’intégration

Questions posées par les commerçants avant de lancer une mise en ligne

BoltUtil conserve-t-il les fonds du marchand ?

Non. Les fonds vont directement au portefeuille marchand et BoltUtil surveille les transferts.

Comment un paiement USDT / USDC est-il rapproché ?

Le système vérifie le réseau, le token, l’adresse, le montant exact, l’état et l’expiration de la commande.

Quels réseaux prennent en charge USDT et USDC ?

TRON prend uniquement en charge USDT. Ethereum, BNB Smart Chain, Polygon, Solana et Base utilisent les versions configurées de USDT / USDC. La disponibilité dépend des canaux actifs et des portefeuilles du marchand.

Lancez un flux de paiement USDT / USDC plus propre

Créez des commandes, surveillez les transferts et informez votre backend sans demander aux clients d'envoyer des captures d'écran.