Du clic au paiement
Le déroulé
Section intitulée « Le déroulé »flowchart TD
subgraph client["Client ou prospect"]
e1["Parcours public, étape 5<br/>Accepter et payer"]:::action
e2["Page de l'offre<br/>lien signé reçu par email"]:::action
e4["Portail client<br/>payer une facture"]:::action
c["Page de choix<br/>carte ou SEPA"]:::action
ret["Page de retour<br/>succès, en cours ou annulé"]:::action
end
subgraph equipe["Courtier ou équipe Inqase"]
e3["Envoie le lien de paiement"]:::action
m1["EMAIL : Lien de paiement<br/>À : adresses choisies, par défaut le contact de l'offre<br/>Type : transactionnel"]:::email
end
subgraph systeme["Système et Stripe"]
x0["Offre expirée<br/>retour à l'étape 4 pour recalculer"]:::problem
b["Paiement ouvert, en attente<br/>offre : paiement en attente<br/>paiements des autres offres annulés"]:::status
d["Page de paiement Stripe<br/>abonnement"]:::external
s1["Stripe confirme la saisie<br/>paiement en cours"]:::external
s2["Stripe crée l'abonnement<br/>accès au portail client"]:::external
s3["Stripe confirme la facture payée"]:::external
ok["Paiement payé<br/>offre : paiement confirmé<br/>offre acceptée, autres offres rejetées"]:::done
x1["Aucun email de confirmation de paiement<br/>au premier paiement"]:::problem
end
e1 -->|offre expirée| x0
e1 -->|clique| b
e2 -->|clique| b
e3 -->|ouvre le paiement| b
e3 -->|choisit d'envoyer| m1
m1 -->|lien valable 30 jours| c
e4 -->|lien valable 30 minutes| c
b --> d
c --> d
d -->|le client paie| ret
d -->|Stripe notifie| s1
s1 --> s2
s2 -->|carte : tout de suite, SEPA : plus tard| s3
s3 --> ok
ok -.-> x1
classDef action fill:#ffe86d,stroke:#a28e26,color:#574900
classDef status fill:#9ce6ff,stroke:#2c97bb,color:#1c4657
classDef done fill:#b3e65f,stroke:#6f9a24,color:#2c4300
classDef problem fill:#ffb575,stroke:#b8742f,color:#5a2d00
classDef email fill:#b8acfb,stroke:#8a7be0,color:#231266
classDef external fill:#e5e7eb,stroke:#9ca3af,color:#374151
Le clic ouvre un paiement en attente, mais seule la notification de Stripe sur la facture payée fait passer l’offre à acceptée.
- Le client clique sur « Accepter et payer » (parcours public ou page de l’offre), ou ouvre le lien reçu du courtier ou de l’équipe, ou paie une facture depuis son portail.
- Il choisit carte ou SEPA et le rythme de paiement. Une offre expirée est refusée : le parcours public renvoie à l’étape 4 pour recalculer.
- Inqase ouvre un paiement en attente, met l’offre en attente de paiement et annule les paiements en attente des autres offres du même dossier.
- Le client paie sur la page Stripe. Stripe confirme la saisie (paiement en cours), puis crée l’abonnement, ce qui ouvre l’accès au portail.
- Stripe confirme la facture payée : le paiement passe à payé, l’offre à paiement confirmé et acceptée, les autres offres sont rejetées.
- La création de la police démarre aussitôt.
À valider en équipe
Section intitulée « À valider en équipe »- Aucun email de paiement n’est envoyé au premier paiement : le seul email d’achat est celui de l’émission. Si l’émission échoue, le client ne reçoit rien. Est-ce acceptable ?
- En SEPA, la police n’est émise qu’à l’encaissement, pas à la saisie. Le délai réel n’est pas dans le code (l’ancien schéma disait 1 à 3 jours). Que voit et que reçoit le client pendant l’attente ?
- Le lien de paiement du portail client vaut 30 minutes, celui envoyé par le courtier 30 jours. Cet écart est-il voulu ?
- Sur la page de l’offre, un client avec une offre expirée voit un message d’erreur sans chemin de relance. Que doit-il faire ?
- Deux offres payées sur le même dossier : la seconde ne crée aucune police, seule une alerte dans les journaux demande un remboursement à la main. Faut-il alerter l’équipe ?
Règles et détails
Section intitulée « Règles et détails »Les règles de l’acceptation au paiement, de l’ordre des notifications Stripe et du paiement unique par offre sont dans Paiements. Le cycle de vie de l’offre est dans Cycle de vie de l’offre.
Où dans le code
Section intitulée « Où dans le code »app/Services/PaymentService.phpapp/Http/Controllers/StripeWebhookController.phpapp/Http/Controllers/PaymentLinkController.php,QuoteViewController.phpapp/Http/Controllers/Quote/QuoteFlowController.phpapp/Observers/QuoteRequestOfferAcceptanceObserver.php