Passer au contenu principal
Le Direct Charge permet a votre backend d’initier un paiement directement avec un provider, sans creer d’abord une URL de checkout.

Quand utiliser Direct Charge

Flux pilotes par le backend

Ideal pour une initiation de paiement serveur a serveur, quand vous controlez tout le cycle de vie de la transaction.

Champs specifiques au provider

A utiliser quand le paiement requiert des champs propres au provider, comme network ou des codes OTP client.

UX recurrente ou embarquee

Utile pour des experiences fortement integrees ou le checkout par redirection n’est pas souhaite.

Endpoints

MethodeEndpointObjet
GET/payments/v1/payments/direct-charge/{provider}/propertiesRecuperer les proprietes specifiques au provider (optionnel pour certains providers)
POST/payments/v1/payments/direct-chargeInitier un direct charge
GET/payments/v1/payments/verify/{reference}Verifier le statut final de la transaction

Etapes d’integration

1

Choisir le slug provider

Selectionnez un provider valide depuis Providers pris en charge.
2

Recuperer les proprietes du provider (optionnel)

Pour des providers comme Bank Transfer (bank-transfer-nigeria), recuperez les proprietes requises, par exemple les valeurs network, avant de debiter.
3

Envoyer la requete de direct charge

Appelez l’endpoint direct-charge avec provider, amount et customerInput.
4

Traiter l'action puis confirmer le statut final

Utilisez l’action de la reponse (processing, redirect, bank-transfer) puis finalisez selon le webhook ou la verification.

Recuperer les proprietes du provider (optionnel)

curl --location 'https://sandbox-api.payfonte.com/payments/v1/payments/direct-charge/{provider}/properties' \
  --header 'client-id: <client-id>' \
  --header 'client-secret: <client-secret>'
Exemple de reponse :
{
  "data": {
    "networks": [
      { "name": "Airtel", "value": "airtel" },
      { "name": "MTN MoMo", "value": "mtn-momo" }
    ]
  }
}

Requete Direct Charge

curl --location 'https://sandbox-api.payfonte.com/payments/v1/payments/direct-charge' \
  --header 'client-id: <client-id>' \
  --header 'client-secret: <client-secret>' \
  --header 'Content-Type: application/json' \
  --data '{
    "reference": "ORDER-1001",
    "amount": 10000,
    "provider": "mtn-momo-ivory-coast",
    "webhook": "https://yourapp.com/webhooks/payfonte",
    "narration": "Order payment",
    "customerInput": {
      "phoneNumber": "2250512345678"
    }
  }'
Exemple de reponse :
{
  "data": {
    "action": "processing",
    "sessionId": "1031-4120-a98f-9357692945",
    "provider": "mtn-momo-ivory-coast",
    "channel": "mobile-money",
    "reference": "ORDER-1001",
    "amount": 10000,
    "status": "pending",
    "statusDescription": "Awaiting Provider's Feedback"
  },
  "statusCode": 201
}

Champs de la requete

ChampTypeRequisDescription
providerstringOuiSlug du provider (par exemple mtn-momo-ivory-coast)
amountintegerOuiMontant en sous-unites, sans decimales
customerInputobjectOuiChamps provider/client, par exemple phoneNumber
referencestringRecommandeReference marchand unique
webhookstringNonWebhook specifique a cette transaction
narrationstringNonDescription de la transaction
metadataobjectNonMetadonnees personnalisees renvoyees en aval

Types d’action et traitement

processing

L’interaction client/provider est en cours, par exemple une autorisation USSD ou STK en attente. Conservez l’etat du paiement a pending et attendez le statut final via webhook ou verification.
Redirigez le client vers l’URL du provider, souvent dans data.data.link. Ne considerez jamais la simple fin de la redirection comme un succes de paiement.
Affichez les instructions de virement renvoyees, comme le nom du compte, le numero, le montant et l’expiration. Attendez le webhook ou la verification avant de marquer le paiement comme reussi.

Regle de montant importante

Payfonte ne prend pas en charge les montants decimaux dans les requetes API. Envoyez uniquement des valeurs entieres en sous-unites.
  • 100.00 NGN -> 10000
  • 2500.75 NGN -> 250075
Voir Specification des montants.

Confirmation du statut final

Pour l’execution de commande, appuyez-vous sur :
  1. Les webhooks pour les mises a jour asynchrones.
  2. GET /payments/v1/payments/verify/{reference} pour la verification backend.

Documentation associee

Flux Direct Charge

Comprendre les modeles processing, redirect et pre-OTP.

Exemples de payloads

Copier des exemples de requetes specifiques par provider.

Providers pris en charge

Slugs providers, limites et couverture pays.