Skip to main content

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

  1. 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.

  2. 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 payments avec le statut PAYMENT_CREATED et un tagId temporaire est généré.
    • L'API retourne un client_secret au frontend.
  3. Confirmation du paiement par l'utilisateur :

    • Le frontend utilise le client_secret pour afficher le formulaire de paiement Stripe.
    • L'utilisateur saisit ses informations de carte bancaire et valide le paiement.
  4. 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 le tagId temporaire.
  5. Session de recharge : La session de recharge est active. Un enregistrement est créé dans la table transactions et lié à l'enregistrement payments.

  6. 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 StopTransaction au backend.
  7. Capture du paiement :

    • La notification StopTransaction déclenche un événement transaction-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 payments est mis à jour à PAYMENT_CAPTURED.