Paiements

Page de paiement

Rediriger le client vers une page où il choisit son moyen de paiement.

Sans opérateur ni numéro, l'API renvoie une checkout_url vers laquelle rediriger le client : la page de paiement Loov. Le client y choisit lui-même comment payer, parmi ce qui est activé sur votre compte dans la devise du paiement.

  • Mobile money : le client choisit son pays et son opérateur, saisit son numéro, puis valide la demande sur son téléphone. Tout se passe sur la page, qui affiche le résultat dès qu'il est connu.
  • Carte bancaire : le client est redirigé vers la page sécurisée de notre partenaire carte. Proposée seulement si les paiements par carte sont activés sur votre compte.

Une fois le paiement terminé, le client est renvoyé vers return_url (réussi) ou cancel_url (échoué ou expiré), avec reference et status dans l'adresse. Tant qu'aucun débit n'a réellement commencé, le client peut changer de moyen de paiement : un numéro erroné ne fait pas échouer le paiement.

curl -X POST https://api.secure.payment.loov-solutions.com/v2/payments \
  -H "Authorization: Bearer $LOOV_API_KEY" \
  -H "Idempotency-Key: 6f1c2b9e-order-42" \
  -H "Content-Type: application/json" \
  -d '{
  "amount": 10000,
  "currency": "XOF",
  "return_url": "https://example.com/merci",
  "cancel_url": "https://example.com/panier",
  "customer": {
    "name": "Awa Diop",
    "email": "awa@example.com"
  },
  "merchant_reference": "order-43"
}'
ChampTypeDescription
return_urlstringOù le client revient après avoir payé.
cancel_urlstringOù le client revient s'il abandonne.
methodstringFacultatif : mobile_money, card ou any.
providerstringFacultatif : paydunya, kkiapay, feexpay ou dohone, selon ce qui est ouvert pour la devise. Avec ce champ, le client est envoyé directement sur la page de ce prestataire, sans passer par la page Loov.
Ne considérez jamais un paiement comme réussi parce que le client est revenu sur return_url. Attendez le webhook ou interrogez le paiement.

La page de paiement expire après 15 minutes ; le paiement passe alors en expired.

La page s'affiche en français ou en anglais selon le navigateur du client ; ajoutez ?lang=fr ou ?lang=en à checkout_url pour imposer une langue. Avec une clé de test, la même page s'affiche et propose de simuler un paiement réussi ou échoué.

Si rien ne peut être proposé pour la devise et le montant (aucun opérateur, pas de carte), la création du paiement est refusée avec 422 route_not_available.

Carte bancaire via FeexPay

Avec provider: "feexpay", le client saisit sa carte et valide le 3-D Secure sur la page de FeexPay. FeexPay exige des informations supplémentaires sur le client :

curl -X POST https://api.secure.payment.loov-solutions.com/v2/payments \
  -H "Authorization: Bearer $LOOV_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "amount": 10000,
  "currency": "XOF",
  "provider": "feexpay",
  "return_url": "https://example.com/merci",
  "cancel_url": "https://example.com/panier",
  "customer": {
    "name": "Awa Diop",
    "email": "awa@example.com",
    "phone": "2290160000000",
    "city": "Cotonou",
    "zip": "00229",
    "country": "BJ"
  }
}'
ChampTypeDescription
customer.phonestringNuméro du client avec l'indicatif du pays.
customer.citystringVille de résidence du client.
customer.zipstringCode postal du client.
customer.countrystringCode pays ISO à deux lettres : BJ, CI, SN, TG…

S'il en manque, l'API répond 422 customer_details_required et indique lesquels dans error.details.missing. Après le paiement, le client reste sur la page de FeexPay, qui lui envoie un reçu par e-mail : il n'est pas renvoyé vers return_url. Fiez-vous au webhook.