Passer au contenu principal
Les paiements par carte peuvent nécessiter plusieurs appels API avant que Payfonte puisse confirmer le résultat final. La première requête de carte renvoie une action qui indique à votre backend ce qu’il doit collecter ou faire ensuite.

Endpoints

MéthodeEndpointObjet
POST/payments/v1/cards/processSoumettre les détails de carte et démarrer le paiement par carte
POST/payments/v1/cards/pinSoumettre le code PIN de carte quand l’action de réponse est pin
POST/payments/v1/cards/otpSoumettre l’OTP client quand l’action de réponse est otp
GET/payments/v1/payments/verify/{reference}Vérifier le statut final de la transaction quand l’action de réponse est verification

Tests

Les données de test des cartes sandbox sont disponibles dans Tests.

Étapes d’intégration

1

Soumettre les détails de carte

Appelez /payments/v1/cards/process avec provider, amount et card. Envoyez votre identifiant client dans l’en-tête client-id.
2

Lire l'action

Utilisez data.action pour déterminer s’il faut collecter le code PIN, collecter l’OTP, rediriger pour la 3DS ou vérifier le paiement.
3

Continuer l'étape requise

Soumettez le code PIN ou l’OTP quand il est demandé, ou redirigez le client vers data.data.redirectURL pour l’authentification 3DS.
4

Confirmer le statut final

Quand l’action est verification, appelez GET /payments/v1/payments/verify/{reference} depuis votre backend avant de livrer la commande.

Soumettre les détails de carte

curl --request POST \
  --url https://sandbox-api.payfonte.com/payments/v1/cards/process \
  --header 'client-id: <client-id>' \
  --header 'client-secret: <client-secret>' \
  --header 'content-type: application/json' \
  --data '{
    "provider": "card-nigeria",
    "amount": 50000,
    "card": {
      "pan": "5061 4604 1012 1111 102",
      "expiry": {
        "month": "12",
        "year": "2050"
      },
      "cvv": "558",
      "cardHolderName": "Emily Heidenreich-Kohler"
    }
  }'

Soumettre le code PIN

Utilisez cet endpoint quand la réponse précédente renvoie data.action avec la valeur pin.
curl --request POST \
  --url https://sandbox-api.payfonte.com/payments/v1/cards/pin \
  --header 'client-id: <client-id>' \
  --header 'client-secret: <client-secret>' \
  --header 'content-type: application/json' \
  --data '{
    "reference": "DCD20260701144120NCDZW",
    "provider": "card-nigeria",
    "card": {
      "pan": "5061 4604 1012 1111 106",
      "expiry": {
        "month": "12",
        "year": "2050"
      },
      "cvv": "562",
      "pin": "1106",
      "cardHolderName": "Donna Flatley"
    }
  }'

Soumettre l’OTP

Utilisez cet endpoint quand la réponse précédente renvoie data.action avec la valeur otp.
curl --request POST \
  --url https://sandbox-api.payfonte.com/payments/v1/cards/otp \
  --header 'client-id: <client-id>' \
  --header 'client-secret: <client-secret>' \
  --header 'content-type: application/json' \
  --data '{
    "reference": "DCD20260701144120NCDZW",
    "otp": "543210"
  }'

Actions de réponse

pin

Collectez le code PIN de carte du client et appelez POST /payments/v1/cards/pin avec la reference renvoyée.
{
  "statusCode": 200,
  "data": {
    "reference": "DCD20260701133425EIQWF",
    "action": "pin",
    "data": {}
  }
}
Collectez l’OTP envoyé au client et appelez POST /payments/v1/cards/otp avec la reference renvoyée.
{
  "statusCode": 201,
  "data": {
    "reference": "DCD20260701133425EIQWF",
    "action": "otp",
    "data": {}
  }
}
Redirigez le client vers data.data.redirectURL pour terminer l’authentification 3DS. Après le flux de redirection, vérifiez le paiement côté serveur.
{
  "statusCode": 201,
  "data": {
    "reference": "DCD20260701144120NCDZW",
    "action": "redirect",
    "data": {
      "redirectURL": "https://s.6bd.co/card-3ds/mce1aN"
    }
  }
}
Appelez GET /payments/v1/payments/verify/{reference} avec la reference renvoyée pour confirmer le statut final de la transaction.
{
  "statusCode": 200,
  "data": {
    "reference": "DCD20260701133425EIQWF",
    "action": "verification",
    "data": {}
  }
}

Résumé de décision des flux

ActionÉtape suivante pour le clientÉtape suivante pour le marchand
pinSaisir le code PIN de carteAppeler POST /payments/v1/cards/pin
otpPartager l’OTPAppeler POST /payments/v1/cards/otp
redirectTerminer l’authentification 3DSRediriger vers data.data.redirectURL, puis vérifier
verificationAucune autre saisie clientAppeler GET /payments/v1/payments/verify/{reference}

Règles importantes

Les valeurs de montant doivent être des entiers en sous-unités. Les décimales ne sont pas prises en charge.
Voir Spécification des montants.
Collectez et soumettez les données de carte uniquement depuis des environnements sécurisés et conformes PCI. Ne journalisez pas les valeurs PAN, CVV, PIN ou OTP.

Documentation associée

Référence API

Consultez les définitions d’endpoints carte et les schémas de requête.

Webhooks

Confirmez les résultats finaux des transactions de manière asynchrone.

Tests

Utilisez les données de carte sandbox pour les scénarios PIN, OTP, 3DS, success, failed et pending.