Documentation développeur

Intégration des paiements en stablecoins sur Base

Vérifiez identité du token, paramètres et confirmation sur Base. Payez le montant complet renvoyé par l’API.

Identités des tokens du réseau principal

Les contrats et Mint sont des valeurs préconfigurées, pas un état en temps réel. La création exige un réseau et un actif activés et un portefeuille valide. Payez toujours à payment.address renvoyé par l’API, jamais au contrat ou au Mint.

Identités des tokens du réseau principal
RéseauDeviseContrat / MintDécimales du token
BASE network logoBASEUSDT0xfde4c96c8593536e31f229ea8f37b2ada2699bb26
BASE network logoBASEUSDC0x833589fcd6edb6e08f4c7c32d4f71b54bda029136

Configuration du marchand

  1. Configurez un portefeuille de réception pour le réseau et un Webhook activé avec URL et clé. Conservez API Key et clé HMAC uniquement sur le serveur.
  2. Vérifiez la disponibilité de network / currency. Les administrateurs gèrent RPC, réseaux et actifs ; le marchand ne déploie pas de scanner.
  3. Affichez payment.amount, payment.address, currency, network et expiration de la réponse. Les données QR ne sont pas une image.
  4. Vérifiez la signature, dédupliquez et enregistrez durablement l’événement avant de répondre HTTP 2xx. Exécutez la livraison de façon idempotente.

Notes sur les réseaux et actifs

  • Base mainnet a le chain ID 8453, pas Base Sepolia. Le marchand configure le portefeuille ; l’administrateur gère RPC et activation. USDC est natif Circle et USDT est la version bridgée configurée ; USDbC est exclu. Le scan utilise la hauteur sûre L1-finalized : payez avant la fin du compte à rebours ; confirmation possible ensuite, sans délai fixe. Pour WooCommerce, vérifiez la version installée et ses réseaux et devises.

Exemples de requête signée et de réponse

25.00 est un montant d’exemple. Utilisez le montant réel et respectez le minimum de l’actif. Adresses, commandes et hashes sont fictifs. Le cURL ou programme Java copié envoie une requête : configurez vos propres clés avant exécution.

create / cURL
# Run against your account only when ready; this sends an API request.
: "${BOLTUTIL_API_KEY:?Set your complete API Key}"
: "${BOLTUTIL_WEBHOOK_SECRET:?Set your Webhook secret}"
timestamp=$(python3 -c 'import time; print(int(time.time()*1000))')
body='{"amount":"25.00","currency":"USDT","network":"BASE","externalOrderId":"INV-20260209-99281"}'
signature=$(printf '%s.%s' "$timestamp" "$body" | openssl dgst -sha256 -hmac "$BOLTUTIL_WEBHOOK_SECRET" | awk '{print $NF}')

curl --request POST "https://api.boltutil.com/api/v1/order/create" \
  --header 'Content-Type: application/json' \
  --header "X-Bolt-Key: $BOLTUTIL_API_KEY" \
  --header "X-Bolt-Timestamp: $timestamp" \
  --header "X-Bolt-Signature: $signature" \
  --data-binary "$body"

Les adresses, les hachages de transactions et les commandes en sont des exemples. Remplacez-les par votre propre test data.

Base URL

PROD
https://api.boltutil.com
Paramètres complets de la commande →

Confirmation et notifications

Détection ne signifie pas confirmation. Utilisez le statut et les callbacks vérifiés : PAID attend confirmation. CONFIRMED / COMPLETED peuvent aussi suivre une acceptation manuelle ; vérifiez paidAmount, shortfallAmount et settlementType. COMPLETED ne prouve pas la livraison.

Questions d’intégration

Une devise prise en charge est-elle disponible maintenant ?

Pas nécessairement. Le réseau et l’actif doivent être activés avec un portefeuille et un Webhook valides. La table statique ne donne pas la disponibilité en temps réel.

Le client peut-il arrondir le montant ?

Payez payment.amount en entier. Le système peut arrondir vers le haut et ajouter un petit ajustement pour distinguer les commandes du même portefeuille. Ne tronquez ni n’arrondissez vous-même.

Puis-je livrer dès que le solde augmente ?

Vérifiez le résultat confirmé et l’authenticité de la notification. Réseaux, versions ou montants erronés et doublons doivent être traités. Le solde seul ne remplace pas le résultat du paiement.