Le flux d'un paiement
Le flux d'un paiement
Un paiement suit un cycle de vie prévisible :
- Créer une intention de paiement — montant, devise et client.
- Lancer une tentative — méthode et pays ; Orqex route vers la meilleure passerelle.
- Résoudre l’action suivante — le client doit parfois agir (OTP, redirection, QR, validation).
- Aboutissement — l’intention passe à
completed,failedouexpired; un webhook part.
Passerelles & comptes passerelles
Passerelles & comptes passerelles
Une passerelle est une intégration avec un prestataire (mobile money, cartes,
wallets, virement, crypto). Un compte passerelle correspond à vos identifiants
pour un prestataire, configurés sur votre projet — Orqex ne détient jamais les fonds,
il route vers votre compte.Chaque compte déclare les méthodes et devises qu’il sert, par
environnement. Vous les connectez dans le
dashboard.
Orchestration & basculement
Orchestration & basculement
Les règles de routage associent une méthode + un pays à un compte primaire et un
secours optionnel. La stratégie d’orchestration de votre projet décide comment Orqex
choisit parmi les comptes éligibles (suivre vos règles, optimiser le succès, répartir).Si la passerelle primaire échoue pour une raison transitoire, Orqex relance
automatiquement sur un secours adapté. La tentative résultante porte
is_fallback: true —
vous lisez simplement le statut final.Intentions de paiement
Intentions de paiement
Une intention de paiement représente l’argent à encaisser. Elle porte le montant, la
devise, le client et les métadonnées, et passe par
pending → completed / failed /
expired (et refunded / partially_refunded).Les montants sont envoyés en unités majeures (ex. 50) et renvoyés dans un objet
amount dont la value est en unités mineures (ex. 5000).Tentatives de paiement
Tentatives de paiement
Une tentative est une exécution d’une intention auprès d’un compte passerelle. Une
intention peut en avoir plusieurs (nouvelle méthode, réessai, basculement). Chaque
tentative a un
status (processing, action_required, completed, failed,
cancelled), la method utilisée, la transaction passerelle, et un objet failure en
cas d’échec.Une tentative échouée n’est pas une erreur API — la requête réussit et l’échec est
reporté sur la tentative.Actions suivantes
Actions suivantes
Quand une méthode exige une action du client, la tentative expose un
next_action dont
le type indique quoi afficher :type | À faire |
|---|---|
redirect_to_url | Rediriger le client vers url. |
embed_iframe | Intégrer url dans une iframe. |
collect_otp | Collecter un OTP, puis confirmer. |
approve_on_phone | Demander la validation sur le téléphone. |
scan_qr_code | Afficher content / image_url en QR code. |
display_payment_instructions | Afficher les fields listés. |
complete_with_sdk | Passer la main à un SDK côté client. |
none | Rien à faire ; interroger le statut. |
Idempotence
Idempotence
Envoyez un en-tête
X-Idempotency-Key (8-128 caractères) sur les écritures pour qu’une
requête réessayée ne soit jamais traitée deux fois — les rejeux renvoient la réponse
d’origine avec X-Idempotent-Replayed: true. Le SDK PHP génère et réutilise une clé
automatiquement entre ses réessais.Pagination
Pagination
Les endpoints de liste sont paginés par curseur. Chaque réponse porte un objet
pagination avec next_cursor / next_page_url et has_more_pages. Passez
next_cursor dans le paramètre cursor (per_page max 100) pour la page suivante.Erreurs
Erreurs
L’API utilise des codes HTTP conventionnels avec un corps JSON ; les échecs de validation
incluent une carte
errors par champ. Un paiement refusé est reporté dans l’objet
failure de la tentative (code + message lisible), pas comme une erreur HTTP.