Mode PRODUCTION actif : chaque paiement cree ici est un paiement reel.

Efaina - Banc de test

{{ activeMode.baseUrl }}
{{ streamConnected ? 'Webhooks en ecoute' : 'Flux deconnecte' }}
Compte Efaina non active. {{ accountNotice }} Le jeton est valide et les appels arrivent bien, mais l'API refuse toutes les operations metier tant que le droit d'adhesion n'est pas regle sur le tableau de bord Efaina.
{{ w }}
Retour depuis la page de paiement. {{ returnNotice.text }}

Creer un checkout

{{ formatAmount(checkoutForm.amount) }} {{ amountNotice }}
{{ (checkoutForm.comment || '').length }} / 100 caracteres {{ commentNotice }}
Le retour du navigateur ne prouve pas le paiement. Seuls le webhook ou la verification font foi.
{{ errors.checkout }}

Suivi du paiement

{{ current.status || 'inconnu' }}

Aucun checkout en cours. Creez-en un pour suivre son cycle de vie ici.

Checkout cree
{{ formatTime(current.createdAt) }}
Page de paiement ouverte
Lien valable 1 heure
Webhook recu
{{ currentEvents.length ? currentEvents.map(e => e.event).join(', ') : 'En attente' }}
Statut final
{{ current.status || 'pending' }}
Transaction
{{ current.transaction }}
Montant
{{ formatAmount(current.amount) }}
Wallet
{{ current.walletId }}
Checkout
Ouvrir la page de paiement
Reponse details-transaction
{{ pretty(current.details) }}

Checkouts de la session

CreeModeMontantMotifTransactionStatut
{{ formatTime(c.createdAt) }} {{ c.mode }} {{ formatAmount(c.amount) }} {{ c.comment }} {{ shortId(c.transaction) }} {{ c.status }}

Aucun checkout cree depuis le demarrage du serveur.

Wallets

IdentifiantLibelleSolde
{{ shortId(w.id) }} {{ w.label }} {{ w.balance !== null ? formatAmount(w.balance) : '-' }}

{{ loading.wallets ? 'Chargement...' : 'Aucun wallet charge.' }}

{{ walletMeta.total }} wallets, page {{ walletMeta.page }} / {{ walletMeta.lastPage }}
Reponse brute
{{ pretty(rawWallets) }}

Creer un wallet

Retrait (cash_out)

{{ errors.wallet }}
{{ pretty(walletResult) }}

Rechercher

{{ errors.transactions }}
IdentifiantReferenceMontantStatutTypeDate
{{ shortId(t.id) }} {{ t.ref || '-' }} {{ formatAmount(t.amount) }} {{ t.status || '-' }} {{ t.type || '-' }} {{ formatTime(t.createdAt) }}

Aucune transaction chargee.

{{ txMeta.total }} transactions, page {{ txMeta.page }} / {{ txMeta.lastPage }}
Reponse brute
{{ pretty(rawTransactions) }}

Transaction {{ shortId(inspected.id) }}

{{ pretty(inspected.details) }}
{{ pretty(inspected.commission) }}

Rembourser

{{ errors.refund }}
{{ pretty(refundResult) }}

Configuration a declarer chez Efaina

URL du webhook
{{ config.webhookUrl }}
URL de retour
{{ config.returnUrl }}
Verification
{{ webhookTokenBadge.text }} Les appels non verifies sont rejetes (401).
L'URL publique pointe sur localhost : Efaina ne pourra pas livrer les webhooks. Exposez le port avec ngrok puis renseignez PUBLIC_URL dans .env.

Simuler un appel

{{ curlSample }}

Evenements recus

{{ webhooks.length }}
{{ w.verified ? 'verifie' : 'non verifie' }} {{ w.event || '(sans evenement)' }} {{ w.status }} {{ shortId(w.transaction) }} {{ formatTime(w.receivedAt) }}
Requete
{{ w.method }} {{ w.path }}
Mode reconnu
{{ w.mode || 'aucun' }}
Webhook-Token
{{ w.tokenPresent ? 'present' : 'absent' }}
{{ pretty(w.payload) }}
En-tetes
{{ pretty(w.headers) }}

Aucun webhook recu. Le flux temps reel est {{ streamConnected ? 'connecte' : 'deconnecte' }}.

Appels sortants vers Efaina

{{ apiLogs.length }}
{{ l.status || 'ERR' }} {{ l.label }} {{ l.method }} {{ shortUrl(l.url) }} {{ l.durationMs }} ms {{ formatTime(l.at) }}

Requete

{{ pretty(l.request) }}

Reponse

{{ pretty(l.error ? { erreur: l.error } : l.response) }}

Aucun appel effectue.

Calcul des frais

Valeurs acceptees par l'API sandbox. La casse compte.
{{ errors.fee }}
Frais Efaina
{{ feeBreakdown.fee_app }}
Frais operateur
{{ feeBreakdown.fee_method }}
Total
{{ feeBreakdown.total_fee }}
Reponse brute
{{ pretty(feeResult) }}

Transfert entre wallets (P2P)

{{ errors.p2p }}
{{ pretty(p2pResult) }}

Appel libre a l'API

Prefixe automatique : {{ activeMode.baseUrl }}

{{ errors.raw }}
{{ pretty(rawResult) }}

Configuration chargee

ModeBase URLJeton APIWebhook-TokenUtilisable
{{ m.label }} {{ m.baseUrl }} {{ m.tokenPreview }}absent {{ m.hasWebhookToken ? 'defini' : 'absent' }} {{ m.usable ? 'oui' : 'non' }}
URL publique
{{ config.publicUrl }}
X-App-Id
{{ config.appId || 'non defini' }} format invalide
Production autorisee
{{ config.allowProduction ? 'oui' : 'non (EFAINA_ALLOW_PRODUCTION=false)' }}
{{ t.text }}