Documentation d'intégration

Documentation d'intégration

Intégrez Aventopay dans votre application en quelques minutes

Démarrage rapide

Étape 1: Créer une session de paiement

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;
i

Notes importantes

  • Les montants doivent toujours être en centimes (50.00€ = 5000)
  • return_url: Redirection de l'utilisateur après paiement
  • callback_url: URL de votre webhook pour recevoir les notifications
  • user_id: Votre identifiant interne du client
  • transaction_id: Votre ID de transaction (sera renvoyé dans le callback)

Clés API

Vous trouverez vos clés API dans votre dashboard, section Paramètres (Se connecter)

Merchant ID

Identifiant unique de votre compte marchand (requis dans le body)

API Key

Identifie le marchand. Header Authorization: Bearer <api_key>

API Secret

Sert à signer chaque requête sortante (HMAC-SHA256 du body brut). Header X-Aventopay-Signature

Webhook Secret

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.

Méthodes d'intégration

Redirection directe

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

Webhooks

AventoPay envoie des notifications webhook vers votre callback_url pour vous informer du résultat des paiements.

Format du callback

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"
  }
}

Statuts possibles

successPaiement confirmé par Stripe
pendingEn cours (3DS, traitement) — un autre callback suivra
cancelledPaiement annulé

Exemple de webhook handler

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');
  }
);
i

Points importants

  • La signature HMAC est envoyée dans le header X-AventoPay-Signature et porte sur le body brut — vérifiez avant tout JSON.parse
  • Aventopay retente en cas d'échec : 30 s, 2 min, 10 min, 30 min, 1 h, 2 h, 6 h, 12 h. Votre handler doit être idempotent (utilisez provider_reference comme clé)
  • Tout statut HTTP 2xx = livré ; toute autre réponse déclenche un retry
  • Retrouvez votre Webhook Secret dans les Paramètres

Cartes de test

Utilisez 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.

Mastercard

Paiement réussi

5555 5555 5555 4444
CVC : 3 chiffres au choix • Date : Supérieure à aujourd'hui

Visa

Paiement réussi

4000 0566 5566 5556
CVC : 3 chiffres au choix • Date : Supérieure à aujourd'hui
!

Mode Test uniquement

Ces cartes ne fonctionnent qu'en mode test. En production, seules les vraies cartes bancaires sont acceptées.

Besoin d'aide ?

Consultez nos exemples complets ou contactez notre support technique.

Se connecter pour accéder aux clés API