Documentation

Intégrez LeekPay sur votre site

Démarrage

Obtenez vos clés API

  1. Créez un compte sur leekpay.me
  2. Allez dans Dashboard → Clés API
  3. Cliquez sur Nouvelle clé API
  4. Copiez votre pk_live_xxx (publique) et sk_live_xxx (secrète)

Ne partagez jamais votre clé secrète. Utilisez-la uniquement côté serveur.

Widget HTML

Intégrez un bouton de paiement sur votre site en quelques lignes de code HTML. Aucune configuration serveur nécessaire.

Étape 1 : Ajouter le script et le bouton

<!-- Charger le script LeekPay -->
<script src="https://leekpay.fr/js/leekpay.js"></script>

<!-- Bouton de paiement -->
<button 
  data-leekpay-amount="5000" 
  data-leekpay-currency="XOF"
  data-leekpay-key="pk_live_votre_cle_publique"
  data-leekpay-description="Commande #123">
  Payer 5 000 CFA
</button>

Étape 2 : Gérer le résultat (optionnel)

Ajoutez des callbacks pour réagir après le paiement :

<script>
LeekPay.configure({
  onSuccess: function(data) {
    console.log('Paiement réussi !');
    console.log('Montant:', data.amount, data.currency);
    window.location.href = '/merci';
  },
  onCancel: function() {
    console.log('Paiement annulé');
  }
});
</script>
AttributDescription
data-leekpay-keyVotre clé publique pk_live_xxx (requis)
data-leekpay-amountMontant à payer (requis)
data-leekpay-currencyDevise : XOF, EUR, USD (requis)
data-leekpay-descriptionDescription affichée au client
data-leekpay-emailEmail pré-rempli du client

JavaScript

Lancez le paiement depuis votre code JavaScript :

<!-- 1. Charger le script -->
<script src="https://leekpay.fr/js/leekpay.js"></script>

<!-- 2. Bouton de paiement -->
<button onclick="payer()">Payer maintenant</button>

<script>
function payer() {
  LeekPay.checkout({
    amount: 5000,
    currency: 'XOF',
    apiKey: 'pk_live_votre_cle_publique',
    description: 'Commande #123',
    
    onSuccess: function(data) {
      console.log('Paiement réussi:', data.amount, data.currency);
      window.location.href = '/merci';
    },
    onCancel: function() {
      console.log('Paiement annulé');
    }
  });
}
</script>

Données reçues dans onSuccess

data.statusdata.amountdata.currencydata.payment_id
OptionDescription
amountMontant à payer (requis)
currencyDevise : XOF, EUR, USD (requis)
apiKeyVotre clé publique pk_live_xxx (requis)
descriptionDescription affichée au client
customerEmailEmail pré-rempli du client
onSuccessFonction appelée après paiement réussi
onCancelFonction appelée si annulation

API REST

Utilisez l'API REST pour créer des paiements depuis votre serveur. Authentifiez-vous avec votre clé secrète (sk_live_xxx).

Créer un checkout

POST /api/v1/checkoutAuthentification : Bearer Token (clé secrète)

# Requête
curl -X POST https://leekpay.fr/api/v1/checkout \
  -H "Authorization: Bearer sk_live_votre_cle_secrete" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 5000,
    "currency": "XOF",
    "description": "Commande #123",
    "return_url": "https://votresite.com/merci",
    "customer_email": "client@example.com"
  }'
# Réponse
{
  "success": true,
  "data": {
    "payment_url": "https://leekpay.fr/pay/abc123",
    "payment_id": "abc123",
    "status": "pending",
    "amount": 5000,
    "currency": "XOF"
  }
}

Vérifier le statut

GET /api/v1/checkout/{payment_id}

curl https://leekpay.fr/api/v1/checkout/abc123 \
  -H "Authorization: Bearer sk_live_votre_cle_secrete"
ParamètreTypeDescription
amountintegerMontant en centimes (requis)
currencystringXOF, EUR ou USD (requis)
descriptionstringDescription de la commande
return_urlstringURL de redirection après paiement
customer_emailstringEmail du client

Champs de la réponse

ChampTypeDescription
payment_urlstringURL de la page de paiement
payment_idstringIdentifiant unique du paiement
statusstringStatut du paiement (voir Statuts)
amountintegerMontant du paiement
currencystringDevise du paiement

Webhooks

Recevez une notification sur votre serveur quand un paiement est effectué. Configurez l'URL de votre endpoint dans Dashboard → Clés API.

Format de la notification

LeekPay envoie une requête POST à votre URL avec les données du paiement :

# Requête envoyée par LeekPay à votre serveur

POST https://votresite.com/webhook
Content-Type: application/json
X-LeekPay-Signature: 5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f0a...

{
  "event": "payment.success",
  "transaction": {
    "id": 123,
    "amount": 5000,
    "currency": "XOF",
    "status": "completed",
    "customer_email": "client@example.com",
    "description": "Commande #123",
    "created_at": "2024-01-15T10:30:00Z"
  }
}

Vérifier la signature (sécurité)

La signature X-LeekPay-Signature est envoyée dans les headers HTTP. Utilisez votre clé publique pour la vérifier.

<?php
// Exemple PHP : vérification de la signature webhook

// 1. Récupérer la signature envoyée par LeekPay
$signature = $_SERVER['HTTP_X_LEEKPAY_SIGNATURE'];

// 2. Récupérer le corps de la requête (payload JSON)
$payload = file_get_contents('php://input');

// 3. Calculer la signature attendue avec votre clé publique
$expected = hash_hmac('sha256', $payload, 'pk_live_votre_cle_publique');

// 4. Comparer les signatures de manière sécurisée
if (hash_equals($expected, $signature)) {
    // Signature valide : traiter le paiement
    $data = json_decode($payload, true);
    $transactionId = $data['transaction']['id'];
    $amount = $data['transaction']['amount'];
    
    // Mettre à jour votre base de données...
    
    http_response_code(200);
    echo 'OK';
} else {
    // Signature invalide : rejeter la requête
    http_response_code(401);
    echo 'Invalid signature';
}
ChampTypeDescription
eventstringType d'événement ("payment.success")
transaction.idintegerID unique de la transaction
transaction.amountintegerMontant payé
transaction.currencystringDevise (XOF, EUR, USD)
transaction.statusstringStatut du paiement
transaction.customer_emailstringEmail du client

Devises

DeviseMinimum
XOF (Franc CFA)100 CFA
EUR (Euro)1 €
USD (Dollar)1 $

Statuts de paiement

Les transactions passent par différents statuts au cours de leur cycle de vie.

StatutDescription
pendingPaiement en attente, le client n'a pas encore payé
processingPaiement en cours de traitement par le prestataire
completedPaiement réussi et validé
failedPaiement échoué (fonds insuffisants, erreur technique)
cancelledPaiement annulé par le client
expiredLien de paiement expiré (délai dépassé)

Besoin d'aide ? Contactez support@leekpay.me

© 2025 LeekPay