Documentation de l'API de Paiement
Prérequis pour les Marchands
Création de Compte Marchand
Avant de pouvoir accepter des paiements, les marchands doivent :
- Création de Compte
- S'inscrire sur la plateforme
- Fournir les informations commerciales de base
- Accepter les conditions d'utilisation
- Configuration des Informations de Paiement
- Configurer les méthodes de retrait:
- Mobile Money
- Compte bancaire
- Vérifier et valider les coordonnées bancaires
- Configurer les méthodes de retrait:
- Processus KYB (Know Your Business)
- Vérification d'identité de l'entreprise
- Soumission de documents officiels
- Validation par l'équipe de conformité
Environnements
- Environnement de production
https://api.elyonpay.org/api - Environnement de test
https://api.elyonpay.net/api
Pour pouvoir effectuer des requêtes sur l'environnement de test, il faut pour cela utiliser l'utilisateur suivant pour se connecter :
{
"username": "test@test.com",
"password": "TestPassword1",
"role": "ROLE_CUSTOMER"
}Authentification
Point de terminaison de Connexion
Endpoint
POST /api/login
Description
Authentifiez-vous et recevez un Token Web JSON (JWT) pour accéder aux points de terminaison protégés.
En-têtes de la requête
| En-tête | Type | Requis | Description |
|---|---|---|---|
Content-Type | chaîne | Oui | Doit être application/json |
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
username | chaîne | Oui | Adresse e-mail de l'utilisateur |
password | chaîne | Oui | Mot de passe de l'utilisateur |
role | chaîne | Oui | Rôle de l'utilisateur (ex: ROLE_CUSTOMER) (ROLE_CUSTOMER) |
Exemple de requête
curl --location 'http://localhost:8000/api/login' \
--header 'Content-Type: application/json' \
--data-raw '{
"username": "jhon.doe@user.com",
"password": "ThisIsMyPassword1234",
"role": "ROLE_MERCHANT_ADMIN"
}'Réponse de succès
Code de statut: 200 OK
| Champ | Type | Description |
|---|---|---|
token | chaîne | Détails du Token |
Exemple de réponse de succès
{
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9...."
}Réponses d'erreur
| Code de statut | Description |
|---|---|
401 | Renouveler le token |
403 | Accès refusé |
Détails du Token
Le token JWT retourné contient :
iat(Émis À : Horodatage de création du token): Émis À : Horodatage de création du tokenexp(Expiration : Horodatage d'expiration du token): Expiration : Horodatage d'expiration du tokenroles: Tableau des rôles utilisateurphoneNumber: Numéro de téléphone associé à l'utilisateur
Instructions d'utilisation
- Envoyer une requête de connexion avec les identifiants corrects
- Recevoir le token JWT
- Inclure le token dans l'en-tête Authorization pour les points de terminaison protégés
Authorization: Bearer <token>
Recommandations de sécurité
- Stocker le token de manière sécurisée côté client
- Implémenter un mécanisme de rafraîchissement du token
- Vérifier l'expiration du token avant de faire des requêtes
- Ne jamais partager votre token publiquement
Lien de Paiement
Endpoint
POST /api/request-to-pay/payment/link
Description
Ce point de terminaison génère un lien de transaction de paiement qui peut être ouvert dans une nouvelle page ou dans un iframe.
En-têtes de la requête
| En-tête | Type | Requis | Description |
|---|---|---|---|
language | chaîne | Oui | user_lang (ex : "fr") |
Accept | chaîne | Oui | Doit être application/json |
Content-Type | chaîne | Oui | Doit être application/json |
Authorization | chaîne | Oui | Format : Authorization: Bearer <token> |
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
amount | nombre | Oui | Montant de la transaction (minimum 1,00) |
user_lang | chaîne | Oui | Préférence de langue de l'utilisateur |
msisdn | chaîne | Oui | Numéro de téléphone associé à l'utilisateur |
success | chaîne | Oui | URL de redirection en cas de transaction réussie |
error | chaîne | Oui | URL de redirection en cas d'échec de transaction |
Exemple de requête
curl --location 'http://localhost:8000/api/request-to-pay/payment/link' \
--header 'language: en' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE3NDMwMDU2NjgsImV4cCI6MTc0MzE4NTY2OCwicm9sZXMiOlsiUk9MRV9D...' \
--data '{
"amount": 1.00,
"user_lang": "en",
"msisdn": "+22507377932",
"success": "https://www.success.com",
"error": "https://www.error.com"
}'Réponse de succès
Code de statut: 200 OK
| Champ | Type | Description |
|---|---|---|
url | chaîne | URL de succès en cas de paiement réussi |
Exemple de réponse de succès
{
"url": "http://app.elyonpay.org/t/CI032667e43abf11?success=https://www.success.com&error=https://www.error.com"
}Réponses d'erreur
| Code de statut | Description |
|---|---|
400 | Requête invalide |
401 | Erreurs d'Authentification |
500 | Erreur serveur |
Flux d'Intégration de Paiement
Diagramme de Flux
sequenceDiagram
participant Customer
participant Merchant
participant ElyonPay
Customer->>Merchant: Finalizes cart
Customer->>Merchant: Selects "Pay"
Merchant->>ElyonPay: POST /api/login
ElyonPay-->>Merchant: Returns JWT token
Merchant->>ElyonPay: POST /api/request-to-pay/payment/link
ElyonPay-->>Merchant: Returns payment URL
Merchant->>Customer: Displays payment page (iframe or redirect)
Customer->>ElyonPay: Selects payment method
Customer->>ElyonPay: Completes transaction
ElyonPay-->>Customer: Shows confirmation popup
Diagramme de séquence montrant le flux d'intégration de paiement
Étapes Détaillées
- Sur le Site du Marchand
- Le client finalise son panier
- Sélectionne "Payer"
- Côté Serveur du Marchand
- Appel de l'endpoint /api/login
/api/login - Obtention d'un token JWT
- Appel de l'endpoint /api/login
- Génération du Lien de Paiement
- Appel de POST /api/request-to-pay/payment/link
POST /api/request-to-pay/payment/link - Réception d'un lien avec ID unique (ex: CM0130679b857c09)
- Appel de POST /api/request-to-pay/payment/link
- Affichage du Paiement
- Intégration dans une iframe
- Ou ouverture dans une nouvelle page
- Processus de Paiement
- Client sélectionne un moyen de paiement
- Complète la transaction
- Popup de confirmation à la fin du paiement
Gestion des Résultats de Paiement
sequenceDiagram
participant Customer
participant Merchant
participant ElyonPay
Customer->>ElyonPay: Transaction completed
alt Successful payment
ElyonPay->>Merchant: Redirect to success URL
else Failed payment
ElyonPay->>Merchant: Redirect to error URL
end
Merchant->>ElyonPay: GET /api/transactions/[ID_TRANSACTION]
ElyonPay-->>Merchant: Returns transaction status
Merchant->>Merchant: Updates order status
Merchant->>Customer: Shows order confirmation
Diagramme de flux pour la gestion des résultats de paiement
- Redirections
- URL de succès en cas de paiement réussi
- URL d'erreur en cas de problème
- Important : Doit être une URL côté serveur
- Vérification Finale
- Appel GET /api/transactions/[ID_TRANSACTION]
GET /api/transactions/[ID_TRANSACTION] - Récupération du statut final
- Mise à jour du statut de la commande
- Appel GET /api/transactions/[ID_TRANSACTION]
États des Transactions
Liste des États
| État | Code | Description |
|---|---|---|
| Créé | CREATED | La transaction a été initialement créée mais n'a pas encore démarré |
| En Attente | PENDING | Transaction en cours de traitement, étape intermédiaire |
| Accepté | ACCEPTED | La transaction a été approuvée et validée |
| Rejeté | REJECTED | La transaction a été refusée définitivement |
| Livré | DELIVERED | La transaction est complète et les fonds ont été transférés |
| Annulé | CANCELLED | La transaction a été intentionnellement arrêtée avant son aboutissement |
| Décliné | DECLINED | La transaction a été refusée (généralement par l'institution financière) |
| Attente de Paiement | WAITING_FOR_PAYMENT | En attente du paiement effectif par le client |
Diagramme de Transition d'États
stateDiagram-v2
[*] --> CREATED
CREATED --> PENDING: Payment initiated
PENDING --> WAITING_FOR_PAYMENT: Awaiting customer
WAITING_FOR_PAYMENT --> ACCEPTED: Payment confirmed
PENDING --> ACCEPTED: Direct approval
PENDING --> REJECTED: Validation failed
PENDING --> DECLINED: Payment issue
WAITING_FOR_PAYMENT --> DECLINED: Payment issue
WAITING_FOR_PAYMENT --> CANCELLED: User cancellation
ACCEPTED --> DELIVERED: Funds transferred
ACCEPTED --> CANCELLED: Administrative action
REJECTED --> [*]
DECLINED --> [*]
CANCELLED --> [*]
DELIVERED --> [*]
Diagramme de transition d'états des transactions
Bonnes Pratiques
Sécurité
- Toujours utiliser HTTPS
- Protéger le token JWT
- Vérifier le statut côté serveur
- Ne jamais se fier uniquement à la redirection client
Gestion des Erreurs
- Implémenter des mécanismes de reprise
- Gérer les cas de timeout
- Prévoir des messages clairs pour l'utilisateur
Recommandations Techniques
- Timeout recommandé : 30 secondes
- Vérifier le statut immédiatement après redirection
- Implémenter une file d'attente de vérification
Codes d'Erreur
Erreurs d'Authentification
| Code | Description | Action Recommandée |
|---|---|---|
| 400 | Requête invalide | Vérifier les paramètres |
| 401 | Non authentifié | Renouveler le token |
| 403 | Accès refusé | Vérifier les permissions |
| 500 | Erreur serveur | Réessayer, contacter support |
Erreurs de Transaction
| État | Code Possible | Description |
|---|---|---|
| REJECTED | 1001 | Fonds insuffisants |
| DECLINED | 1002 | Problème avec le moyen de paiement |
| CANCELLED | 1003 | Annulation par l'utilisateur ou le système |
Support
En cas de problème :
- Vérifiez la documentation
- Consultez les logs
- Contactez le support technique
