Construire un checkout B2B

Créez une session liée à un acheteur, faites exécuter le parcours de paiement ou de crédit par Ormuz, puis confirmez la commande uniquement lorsque le checkout, la décision financière et les contrôles requis sont favorables, notamment les vérifications anti-fraude ou toute autre validation interne, externe ou réalisée par un partenaire.

Objectif métier

Une checkout_session représente une tentative de checkout pour une party et un contact acheteur. Elle porte le panier, les montants, les adresses, l’URL de retour et le processus qui décide comment le buyer peut régler sa commande.

Le checkout peut être initié dans un parcours en ligne, par exemple depuis un site e-commerce ou un portail B2B, mais aussi en magasin ou depuis un point de vente assisté. Dans tous les cas, la session conserve le même rôle : contextualiser l'acheteur et la transaction, exécuter les contrôles requis et produire une décision exploitable par le système qui porte la commande.

Le parcours peut aboutir à un paiement immédiat, une autorisation ou un crédit différé. Votre système conserve la maîtrise de la commande et de son fulfillment ; Ormuz fournit le résultat nécessaire pour prendre cette décision.

Responsabilités La session répond à « le checkout est-il terminé ? » et « le paiement ou le crédit est-il accepté ? ». La commande reste l'objet qui répond à « peut-on livrer et la livraison a-t-elle eu lieu ? ».

Prérequis

ÉlémentPourquoi il est requis
MarchandDéfinit le périmètre du checkout et sa configuration.
partyReprésente l'acheteur B2B auquel la décision financière s'applique.
party_contactIdentifie la personne qui accède au parcours utilisateur et agit pour la party.
Process launcher checkoutAssocie les nouvelles sessions à une définition de processus checkout. Plusieurs launchers peuvent coexister pour le marchand.
return_urlRamène l’acheteur vers votre application après une redirection prévue par le parcours.

La party et le party_contact doivent appartenir au même marchand, et le contact doit être rattaché à cette party. Si plusieurs launchers checkout sont actifs, transmettez explicitement leprocess_definition_id à utiliser lors de la création de la session.

Parcours cible

Créer la session
Interaction si nécessaire
Décision financière
Paiement
Crédit
Finaliser

Le process checkout choisit la branche financière, produit une décision explicite puis finalise la session.

Créer la session

Votre backend transmet l’acheteur, son contact, le panier, les montants et l’URL de retour éventuelle.

Rediriger vers le parcours utilisateur si nécessaire

Si le process attend une action utilisateur, ouvrez l'URL contextualisée retournée avec la session. Sinon, laissez le process s'exécuter sans redirection et attendez le webhook de fin de checkout.

Décider du moyen de règlement

Le processus peut collecter un paiement, demander une autorisation ou évaluer une capacité de crédit.

Finaliser et synchroniser la commande

Le process fixe les deux statuts ; votre système relit la session ou traite son événement de complétion.

Créer la session

Appelez POST /v1/checkout/sessions depuis votre backend. Les trois montants sont requis, exprimés dans l'unité mineure de la devise, et doivent respecter amount_excluding_tax + amount_tax = amount_including_tax. La requête ne choisit pas un mode paiement ou crédit : le processus checkout porte cette décision et les capacités qu’il exécute.

POST /v1/checkout/sessions
Content-Type: application/json

{
  "merchant_id": "mer_abc123",
  "buyer_id": "pty_abc123",
  "buyer_contact_id": "ptc_abc123",
  "currency": "eur",
  "amount_excluding_tax": 10000,
  "amount_tax": 2000,
  "amount_including_tax": 12000,
  "return_url": "https://shop.example/orders/ORD-2026-104",
  "source_reference": "ORD-2026-104",
  "line_items": [
    {
      "line_type": "service",
      "product_name": "Licence annuelle",
      "quantity": 1,
      "unit_amount_excluding_tax": 10000,
      "unit_amount_including_tax": 12000,
      "currency": "eur"
    }
  ]
}

Les line_items décrivent le panier au moment de la création. Ils peuvent représenter un produit, un service, une livraison, une remise ou des frais. Ils ne sont plus modifiables après la création de la session.

Référence marchand Conservez l'ID cs_* retourné. source_reference permet de retrouver la session à partir de votre numéro de commande, mais ne remplace pas à lui seul une stratégie anti-doublon lors de la création.

Porter la décision financière dans le process

Le process reçoit la checkout_session comme objet d'entrée. Il peut lire ses lignes, son montant, sa party et son contact sans demander au concepteur de mapper des identifiants techniques.

BrancheCapacités typiquesRésultat attendu
Paiement immédiatCréer ou réutiliser un paiement PSP, collecter ou autoriser les fondspaid ou authorized
Crédit différéÉvaluer la capacité disponible, appliquer les règles de risque, accorder le créditcredit_granted
RefusRefus provider, capacité insuffisante ou règle métier défavorablefailed

Le node finalize_checkout_session permet de mettre à jour ensemble le résultat financier et le cycle de vie. Cette finalisation explicite évite de considérer la simple fin des écrans du parcours utilisateur comme une preuve de paiement.

Séparer parcours et résultat financier

Les deux axes de statut répondent à des questions différentes. status décrit le parcours ; payment_status décrit l'issue financière.

statusSignification
openLa session est accessible et peut encore être complétée.
completedLe parcours s'est terminé avec succès.
expiredLa session a dépassé sa durée de validité.
cancelledLa session a été explicitement annulée.
payment_statusSignification
unpaidAucun paiement ni crédit n'est encore accepté.
paidUn paiement immédiat a été collecté.
authorizedLe paiement est autorisé, sous réserve de votre politique de capture.
credit_grantedLe paiement différé a été accepté.
failedLa tentative de paiement ou la décision de crédit a échoué.
cancelledLa tentative financière a été annulée.
Règle de fulfillment Une commande est prête à être confirmée lorsque status = completed et que payment_status vaut paid, authorized ou credit_granted.

Une session completed + unpaid n'autorise pas la livraison. Inversement, credit_granted indique une décision favorable sans imposer le provider ou le mécanisme qui porte le risque.

Exemple de checkout terminé : l’acheteur a emprunté la branche de paiement à 30 jours et le sous-processus associé.
Exemple de checkout terminé : l’acheteur a emprunté la branche de paiement à 30 jours et le sous-processus associé. Agrandir

Événements et suivi

ÉvénementUtilisation
checkout_session.createdTracer la création et l'ouverture du parcours.
checkout_session.completedRelire les deux statuts et décider de confirmer la commande.
checkout_session.expiredFermer ou renouveler une tentative devenue inaccessible.
checkout_session.abandonedDéclencher une relance ou une analyse d'abandon tant que la session reste ouverte.

Un parcours utilisateur n'est requis que si le processus comporte des actions utilisateur. Un checkout entièrement automatisé peut rester côté serveur : votre intégration attend alors le webhook checkout_session.completed, puis relit la session avant de mettre à jour la commande.

Après une redirection de succès, relisez également la session côté serveur. La redirection améliore l'expérience utilisateur ; l'API et les événements portent le résultat métier à utiliser pour votre commande.

Une session ouverte expire par défaut après 24 heures si vous ne fournissez pas expires_at. Vous pouvez aussi expirer explicitement une session ouverte avec POST /v1/checkout/sessions/:id/expire.

Checklist d'intégration

  • Créer ou résoudre la party et le contact acheteur avant le checkout.
  • Configurer au moins un launcher checkout actif et sélectionner explicitement le process_definition_id lorsqu'il y en a plusieurs.
  • Envoyer des montants et des lignes cohérents dans une même devise.
  • Stocker l'ID de session avec la commande source.
  • Rediriger vers l'URL de parcours utilisateur retournée par Ormuz uniquement si le processus attend une action utilisateur.
  • Pour un parcours automatisé, attendre le webhook de fin de checkout sans imposer de redirection.
  • Finaliser explicitement status et payment_status dans le process.
  • Confirmer la commande avec la règle à deux axes, jamais avec status seul.
  • Traiter les webhooks de façon idempotente et relire la session avant fulfillment.
  • Prévoir les cas de refus, d'annulation, d'expiration et d'abandon.