Intégrez Aventopay dans votre application en quelques minutes
Créez une session de paiement via l'API en fournissant le montant et les informations du client.
// Créer une session de paiement (Node.js — côté serveur)
const crypto = require('crypto');
const API_KEY = 'sk_test_xxxxx';
const API_SECRET = 'whk_xxxxx'; // Sert à signer le body — uniquement côté serveur
// IMPORTANT : sérialisez UNE SEULE FOIS la même chaîne pour body + signature
const body = JSON.stringify({
merchant_id: 'votre_merchant_id',
user_id: 'client_123', // Votre ID utilisateur interne
transaction_id: 'TXN_12345', // Optionnel — votre ID de transaction
amount: 5000, // Montant en centimes (50.00€)
currency: 'EUR', // Optionnel, défaut: 'EUR'
customer: { // Optionnel — pré-remplit le formulaire
email: 'player@example.com',
name: 'John Doe'
},
return_url: 'https://votre-site.com/success', // Optionnel
callback_url: 'https://votre-site.com/webhook',// Optionnel
payment_method: 'card', // Optionnel, défaut: 'card'
metadata: {} // Optionnel
});
const signature = crypto
.createHmac('sha256', API_SECRET)
.update(body, 'utf8')
.digest('hex');
const response = await fetch('https://avento-pay.com/api/payment/session', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${API_KEY}`,
'X-Aventopay-Signature': signature,
},
body, // exactement la même chaîne que celle signée
});
const data = await response.json();
// data.session_token, data.payment_url, data.iframe_url
// data.signature (HMAC du body de réponse, signé avec votre webhook_secret)
// data.expires_at
// Renvoyer payment_url / iframe_url au navigateur, ou rediriger côté serveur
return data;Notes importantes
Vous trouverez vos clés API dans votre dashboard, section Paramètres (Se connecter)
Identifiant unique de votre compte marchand (requis dans le body)
Identifie le marchand. Header Authorization: Bearer <api_key>
Sert à signer chaque requête sortante (HMAC-SHA256 du body brut). Header X-Aventopay-Signature
Sert à vérifier les callbacks entrants (signature envoyée par Aventopay) et la signature des réponses de session
Sécurité
Ne partagez jamais vos clés API. Utilisez-les uniquement côté serveur. Vous pouvez régénérer votre API Secret à tout moment depuis les Paramètres si vous suspectez une fuite.
Redirigez vos clients vers la page de paiement hébergée par AventoPay.
// Après avoir créé la session, redirigez l'utilisateur
window.location.href = data.payment_url;
// data.payment_url = "https://avento-pay.com/pay/sess_xxxxx"
// Ou avec un lien HTML
<a href="https://avento-pay.com/pay/SESSION_TOKEN">
Payer maintenant
</a>Recommandé pour
Applications web classiques, e-commerce, paiements ponctuels
AventoPay envoie des notifications webhook vers votre callback_url pour vous informer du résultat des paiements.
La signature HMAC est envoyée dans le header HTTP X-AventoPay-Signature, pas dans le body.
POST /votre-webhook HTTP/1.1
Content-Type: application/json
X-AventoPay-Signature: 4dda975a52a46a52881a68c572f000ca2990ffe297b8a42395c616e56728fdcb
{
"merchant_id": "m_abc123",
"session_token": "sess_abcd1234",
"transaction_id": "TXN_12345",
"external_user_id": "player_789",
"status": "success",
"amount": 5000,
"currency": "EUR",
"provider_reference": "pi_3xxxxx",
"timestamp": 1710000000,
"metadata": {
"order_id": "ORD-12345"
}
}successPaiement confirmé par StripependingEn cours (3DS, traitement) — un autre callback suivracancelledPaiement annuléUn webhook est reçu côté serveur uniquement — pas d'équivalent navigateur.
// Endpoint webhook (Node.js / Express) — vérification sur le raw body
const crypto = require('crypto');
const WEBHOOK_SECRET = process.env.AVENTOPAY_WEBHOOK_SECRET;
// IMPORTANT : on lit le body brut, pas le JSON parsé.
app.post('/webhooks/aventopay',
express.raw({ type: 'application/json' }),
async (req, res) => {
const signatureHeader = req.headers['x-aventopay-signature'] || '';
const rawBody = req.body.toString('utf8');
const expected = crypto
.createHmac('sha256', WEBHOOK_SECRET)
.update(rawBody, 'utf8')
.digest('hex');
const a = Buffer.from(signatureHeader, 'utf8');
const b = Buffer.from(expected, 'utf8');
if (a.length !== b.length || !crypto.timingSafeEqual(a, b)) {
return res.status(401).send('Invalid signature');
}
const payload = JSON.parse(rawBody);
const { transaction_id, provider_reference, external_user_id, status, amount } = payload;
// ⚠️ IDEMPOTENCE OBLIGATOIRE : Aventopay réessaie en cas d'échec.
// Utilisez provider_reference comme clé d'idempotence.
if (await alreadyProcessed(provider_reference)) {
return res.status(200).send('OK');
}
switch (status) {
case 'success':
await creditUserWallet(external_user_id, amount, provider_reference);
break;
case 'cancelled':
await markFailed(transaction_id);
break;
case 'pending':
// Un autre callback suivra
break;
}
res.status(200).send('OK');
}
);Points importants
X-AventoPay-Signature et porte sur le body brut — vérifiez avant tout JSON.parseprovider_reference comme clé)2xx = livré ; toute autre réponse déclenche un retryUtilisez ces cartes de test pour effectuer des paiements en mode test. Toutes acceptent n'importe quel CVC à 3 chiffres et une date d'expiration future.
Paiement réussi
Paiement réussi
Mode Test uniquement
Ces cartes ne fonctionnent qu'en mode test. En production, seules les vraies cartes bancaires sont acceptées.
Consultez nos exemples complets ou contactez notre support technique.
Se connecter pour accéder aux clés API