Documentation développeur

Intégration des paiements en stablecoins sur Solana

Vérifiez identité du token, paramètres et confirmation sur Solana. 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
SOLANA network logoSOLANAUSDT6
SOLANA network logoSOLANAUSDC6

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

  • Les Mint USDT / USDC identifient les tokens ; payez au portefeuille renvoyé par l’API. Le scanner utilise les slots finalized ; détecter une transaction ne termine pas immédiatement la commande. Les Mint sont sensibles à la casse ; n’utilisez ni contrat EVM ni token de test.

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":"SOLANA","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.