composer require hub/sdk-php
Sur cette page
Ressources
Bibliothèques officielles, environnement de test et référence technique : tout ce qu'il faut pour intégrer, tester et diagnostiquer.
SDK officiels
Chaque SDK gère l'authentification, l'idempotence, la pagination et la vérification des webhooks. Vous pouvez aussi appeler l'API directement : c'est du HTTP et du JSON, sans particularité.
En préparation. En attendant, l'API s'appelle directement avec n'importe quel client HTTP.
En préparation. En attendant, l'API s'appelle directement avec n'importe quel client HTTP.
Plugins e-commerce
Pour brancher une boutique existante sans écrire de code.
Environnement de test
Une clé commençant par sk_test_ vous place en environnement de test.
Aucun mouvement réel n'est produit, aucun opérateur n'est appelé.
Deux outils de votre espace développeur évitent d'attendre ou de simuler à la main :
Faites expirer une tentative immédiatement, pour tester une expiration sans attendre dix minutes.
Déclenchez un callback comme le ferait un opérateur, pour éprouver votre vérification de signature.
Scénarios
Le comportement est piloté par les quatre derniers chiffres du numéro du payeur :
un numéro se terminant par 0002 échouera pour solde insuffisant.
| Suffixe | Scénario | Ce qui se passe |
|---|---|---|
| …0000 | Succès immédiat | Le paiement aboutit sans attente. |
| …0001 | Confirmation différée | Action requise, puis succès à la deuxième vérification de statut. |
| …0002 | Solde insuffisant | Refus métier : réessayer sur un autre connecteur ne servirait à rien. |
| …0003 | Code secret incorrect | Refus corrigeable : le payeur peut relancer. |
| …0004 | Opérateur indisponible | Incident technique : autorise une bascule vers un autre connecteur. |
| …0005 | Réponse ambiguë Prioritaire | Le cas le plus important. Ni succès ni échec : le paiement part en revue. |
| …0006 | Aucune réponse | L'opérateur ne conclut jamais : la tentative finira par expirer. |
| …0007 | Plafond atteint | Refus métier lié aux limites du compte payeur. |
| …0008 | Compte inexistant | Le numéro n'est associé à aucun compte chez l'opérateur. |
| …0009 | Refus du payeur | Le payeur annule sur son téléphone. |
Testez le scénario 0005 avant tout Le statut indéterminé est le cas que la plupart des intégrations gèrent mal. Vérifiez que votre code ne livre pas la commande, et ne demande pas au client de repayer.
Cartes de test
Valides selon l'algorithme de Luhn, elles passeront vos validations côté boutique. Aucune n'appartient à un émetteur réel.
| Numéro | Comportement |
|---|---|
| 4242 4242 4242 4242 | Visa — succès |
| 4000 0000 0000 0002 | Visa — fonds insuffisants |
| 4000 0000 0000 0069 | Visa — carte expirée |
| 4000 0000 0000 9995 | Visa — refus émetteur |
| 4000 0000 0000 0119 | Visa — erreur de traitement |
| 5555 5555 5555 4444 | Mastercard — succès |
| 5200 0000 0000 0007 | Mastercard — 3-D Secure requis |
Référence de l'API
https://ad-novapay-ci.agence-nconcept.com/v1
| Ressource | Opérations | Précisions |
|---|---|---|
| Sessions de paiement | POST GET LISTE | |
| Paiements | GET LISTE | Filtrable par statut et référence |
| Remboursements | POST GET LISTE | |
| Liens de paiement | POST LISTE DELETE | |
| Solde | GET | Décomposé par état des fonds |
| Mouvements | LISTE | Votre relevé de compte |
| Événements | GET LISTE | Pour rattraper ce que vous avez manqué |
Conventions
- Montants en unité mineure entière. Le XOF n'ayant pas de décimale, 1 000 F s'écrit
1000. - Pagination par curseur, stable même quand des lignes s'insèrent.
- Erreurs structurées avec
type,code,messageetdetails. - Codes d'échec normalisés, identiques quel que soit l'opérateur.
- Idempotence par l'en-tête
Idempotency-Key, mémorisée 24 heures.
Limites de débit
Un dépassement renvoie une réponse 429 avec un message explicite.
Obtenir de l'aide
Votre espace développeur affiche vos derniers événements et vos tentatives de livraison de webhook, avec le code HTTP renvoyé par votre serveur et sa réponse. La plupart des problèmes s'y diagnostiquent seul.
Si vous avez manqué des événements pendant une panne, l'API vous les restitue :
GET /v1/evenements?depuis=…