Sur une plateforme de location de véhicules, j'ai eu à gérer des acomptes et des cautions avec Stripe. Les deux ressemblent à un paiement, mais ce n'est pas la même opération.
L'acompte est un paiement normal : l'argent est pris tout de suite, pour une partie du prix.
La caution ne doit pas être encaissée. On la bloque sur la carte du client, puis on la libère quand le véhicule revient en bon état. Chez Stripe, ça s'appelle séparer l'autorisation de la capture :
# exemple : 500 € bloqués, rien d'encaissé
curl https://api.stripe.com/v1/payment_intents \
-u "$STRIPE_SECRET_KEY:" \
-d amount=50000 \
-d currency=eur \
-d "automatic_payment_methods[enabled]=true" \
-d capture_method=manual
Une fois la carte confirmée, le paiement passe en requires_capture. L'argent est retenu, pas encaissé.
Trois choses Ă savoir.
-
L'autorisation expire. Pour une carte payée en ligne, c'est en général 7 jours. Passé ce délai, le blocage est levé et le paiement passe en
canceled. Pour une location plus longue, la caution bloquée au départ ne tient plus : il faut une autorisation prolongée (réservée à certains cas), ou enregistrer le moyen de paiement pour débiter plus tard si besoin. -
On peut capturer moins que le montant bloqué. Avec
amount_to_capture, le reste est libéré automatiquement. Mais dans la plupart des cas, on ne peut capturer qu'une seule fois. - Libérer, c'est annuler le paiement. Rien de plus.
Un détail côté client : certains relevés bancaires ne font pas la différence entre une somme bloquée et une somme prélevée. Mieux vaut le dire dans l'email de confirmation.
Et tous les moyens de paiement ne le permettent pas : le prélèvement SEPA ou iDEAL, par exemple, ne supportent pas cette séparation.
Amine Affif, développeur full-stack à Paris. amineaffif.com













