## 1. Flux de paiement en ligne (via QR Code)
Ce flux est destiné aux utilisateurs non authentifiés qui paient pour une session de recharge unique via une carte de crédit.
Étapes du flux
-
Initiation : L'utilisateur scanne un QR code sur une borne de recharge, ce qui le redirige vers une page web dédiée à cette borne.
-
Création d'une intention de paiement :
- Le frontend appelle l'API pour créer une intention de paiement :
GET /api/payments/evse/:slug/with-capture. - Le backend crée une intention de paiement (Payment Intent) auprès de Stripe avec la méthode de capture manuelle (
capture_method: 'manual'). Cela autorise un montant pré-défini sans le débiter immédiatement. - Un enregistrement est créé dans la table
paymentsavec le statutPAYMENT_CREATEDet untagIdtemporaire est généré. - L'API retourne un
client_secretau frontend.
- Le frontend appelle l'API pour créer une intention de paiement :
-
Confirmation du paiement par l'utilisateur :
- Le frontend utilise le
client_secretpour afficher le formulaire de paiement Stripe. - L'utilisateur saisit ses informations de carte bancaire et valide le paiement.
- Le frontend utilise le
-
Démarrage de la transaction :
- Une fois le paiement confirmé côté client, le frontend appelle l'API :
POST /api/payments/remote-start-after-payment-confirmed. - Le backend vérifie la validité du paiement, met à jour le statut de l'enregistrement
paymentsàPAYMENT_CONFIRMED. - Le backend envoie une commande
RemoteStartTransactionà la borne via le protocole OCPP, en utilisant letagIdtemporaire.
- Une fois le paiement confirmé côté client, le frontend appelle l'API :
-
Session de recharge : La session de recharge est active. Un enregistrement est créé dans la table
transactionset lié à l'enregistrementpayments. -
Arrêt de la transaction :
- L'utilisateur arrête la recharge depuis la page web, ce qui déclenche un appel à
POST /api/payments/transaction/:idOrSlug/stop. - La borne envoie une notification
StopTransactionau backend.
- L'utilisateur arrête la recharge depuis la page web, ce qui déclenche un appel à
-
Capture du paiement :
- La notification
StopTransactiondéclenche un événementtransaction-payment-capture. - Un service écoute cet événement et appelle la méthode
paymentsService.capturePaymentWithCapture(). - Cette méthode finalise la transaction Stripe en capturant le montant final de la recharge (le coût réel de l'énergie consommée).
- Le statut de l'enregistrement
paymentsest mis à jour àPAYMENT_CAPTURED.
- La notification