Un outil de test sécurisé pour les développeurs de systèmes de paiement et les professionnels QA. Tous les numéros de test sont non fonctionnels et réservés aux environnements de développement.

6 min de lecture Par Namso Gen

Tests de passerelle de paiement : guide pratique pour les développeurs

Les paiements par carte sont la seule partie de votre application où un bug coûte de l'argent réel. Tester sur une sandbox de passerelle est le seul moyen sûr d'exercer les refus, 3D Secure, les remboursements et les webhooks — et bien le faire relève surtout de la discipline, pas de l'outillage.

Ce guide couvre le workflow qui fonctionne pour Stripe, Adyen, Braintree et la plupart des autres passerelles, ainsi que les modes de défaillance qui piègent les équipes.

1. Séparer les identifiants de test et de production

Chaque passerelle vous offre un univers parallèle : clés d'API de test, points de terminaison de test et numéros de carte de test. Gardez-les séparés à chaque couche :

  • Des fichiers .env et des coffres de secrets distincts, jamais une seule variable STRIPE_KEY.
  • Un échec bloquant au démarrage si une clé de test atteint la production ou si une clé de production est utilisée en CI.
  • Une bannière visible en staging pour que personne ne doute de l'environnement consulté.

La cause la plus fréquente du « nous avons débité un vrai client en test » est une fusion de configuration qui a promu silencieusement une clé de production.

2. Utiliser d'abord les cartes de test de la passerelle

Les numéros de test des fournisseurs sont câblés à des comportements précis qu'aucun numéro généré ne peut reproduire. Stripe, par exemple, associe des numéros à des codes de refus :

Numéro Comportement
4242 4242 4242 4242 Succès
4000 0000 0000 0002 Carte refusée
4000 0000 0000 9995 Fonds insuffisants
4000 0000 0000 0069 Carte expirée
4000 0000 0000 0127 CVC incorrect

Notre référence des numéros de carte de test rassemble les numéros officiels de Stripe, Adyen et Braintree dans un seul tableau. Utilisez-les pour le comportement de la passerelle ; utilisez le générateur de cartes quand vous avez besoin de numéros pour un BIN, une marque de carte ou un volume précis.

3. Tester les refus comme des états à part entière

Un paiement refusé est une issue normale, pas une erreur. Votre code doit brancher sur le motif du refus, pas seulement sur « échec » :

  • Refus soft (fonds insuffisants) : proposer une nouvelle tentative.
  • Refus hard (carte volée, compte invalide) : ne jamais réessayer automatiquement.
  • Échecs d'authentification : renvoyer vers le flux 3D Secure.
  • Erreurs de traitement : réessayer avec un backoff.

Journalisez le code d'erreur de la passerelle, pas seulement le message, et conservez la réponse brute pour les tickets de support.

4. Simuler 3D Secure

Les redirections 3DS, les iframes et les flux de challenge concentrent la plupart des bugs de checkout. Testez au minimum :

  • L'authentification sans friction (aucune interaction de l'utilisateur).
  • Le flux de challenge, y compris un challenge échoué et un challenge annulé.
  • Le bouton retour du navigateur après la redirection.
  • Les navigateurs mobiles intégrés aux applications.

Stripe publie des cartes de test dédiées à chaque flux — voir le guide de test 3D Secure pour la liste et ce que chaque carte déclenche.

5. Vérifier les webhooks, l'idempotence et l'ordre

La réponse synchrone de l'API n'est que la moitié de l'histoire. L'état de l'argent est généralement validé par les webhooks, donc testez ce chemin aussi soigneusement que le checkout :

  • Rejouez deux fois le même événement webhook et vérifiez l'idempotence. La plupart des passerelles réessaient sur les réponses non-2xx, et les événements dupliqués sont garantis en production.
  • Testez les événements désordonnés (par exemple, un remboursement qui arrive avant la capture).
  • Validez les signatures des webhooks et rejetez les requêtes non signées.
  • Rendez les handlers rapides : accusez réception en quelques secondes et traitez en asynchrone.
  • Les outils CLI stripe listen --forward-to et stripe trigger facilitent le rejeu local ; Adyen et Braintree proposent des simulateurs de notification équivalents.

6. Mettre la sandbox dans la CI

Testez le flux de paiement en smoke test à chaque déploiement, pas seulement à la main :

  1. Créez un paiement de test avec une carte de succès.
  2. Vérifiez l'état en base, l'écriture au grand livre et l'e-mail de notification.
  3. Créez un paiement refusé et vérifiez le message d'erreur affiché à l'utilisateur.
  4. Déclenchez le webhook de la passerelle et vérifiez la transition d'état.
  5. Remboursez et vérifiez l'écriture inverse.

Gardez ces tests uniquement sur la sandbox et étiquetez-les pour qu'ils puissent tourner séparément des tests unitaires rapides.

7. Checklist des pièges courants

  • Mélanger les clés de test et de production entre services (un classique en architecture microservices).
  • Coder en dur des dates d'expiration dans le passé — utilisez une date lointaine dans le futur pour que les tests « carte expirée » soient délibérés.
  • Ne tester que le happy path et oublier l'annulation 3DS.
  • Ignorer la vérification de la signature des webhooks parce que « ça marche en local ».
  • Construire une logique de retry qui réessaie les refus hard.
  • Ne pas tester les devises sans décimale, les arrondis et les unités de amount.
  • Supposer qu'une autorisation réussie signifie que l'argent est encaissé — la capture peut encore échouer plus tard.

Étapes suivantes

Tester les paiements n'a rien de glamour, mais c'est l'une des habitudes les plus rentables pour une équipe : quelques heures passées dans la sandbox évitent régulièrement des incidents qui coûtent bien plus que le temps d'ingénierie.

Articles connexes