Capturez et répondez aux refus de paiement, aux données non valides, aux problèmes de réseau et plus.
Stripe présente plusieurs types d’erreurs, qui peuvent désigner des événements extérieurs, tels que des refus de paiement et des interruptions réseau, ou bien des problèmes de code, comme des appels à l’API non valides.
Utilisez certaines ou toutes les techniques présentées dans le tableau ci-dessous afin de traiter les erreurs. Peu importe la technique utilisée, vous pouvez poursuivre avec nos réponses recommandées pour chaque type d’erreur.
Analyser les problèmes passés et prendre en charge d’autres techniques
Parfois
Capturer les exceptions
Si un problème immédiat empêche la poursuite d’un appel à l’API, la bibliothèque Node.js de Stripe peut générer une exception. Nous vous conseillons vivement de capturer et de traiter ces exceptions. Pour activer la génération d’exceptions et pouvoir les capturer par la suite, procédez de la manière suivante :
Si vous effectuez l’appel à l’API dans une fonction, faites précéder la définition de la fonction du mot clé async.
Précédez l’appel à l’API lui-même avec le mot clé await.
Une fois que vous avez configuré la manière de gérer les exceptions, effectuez des tests sur divers types de données, y compris des cartes de test, afin de simuler différents résultats de paiement.
En cas de problème, Stripe vous avertit à l’aide de webhooks, y compris pour les problèmes qui ne surviennent pas immédiatement après un appel à l’API. Par exemple :
Vous perdez un litige.
Un paiement récurrent échoue après plusieurs mois sans souci.
Votre front-end confirme un paiement, mais passe hors ligne avant l’échec du paiement. (Le back-end reçoit quand même une notification de webhook, même s’il n’a pas effectué l’appel à l’API.)
Il n’est pas nécessaire de traiter tous les types d’événements webhook. En réalité, certaines intégrations n’en traitent aucun.
Dans votre gestionnaire de webhooks, commencez par suivre les étapes de base de l’outil de création de webhook : prenez un objet Event et servez-vous du type d’événement pour découvrir ce qui s’est passé. Ensuite, si le type d’événement indique une erreur, suivez ces étapes supplémentaires :
);const express =require('express');const app =express();
app.post('/webhook', express.json({type:'application/json'}),(request, response)=>{// Get an event objectconst event = request.body;// Use its type to find out what happenedif(event.type=='payment_intent.payment_failed'){// Get the object affectedconst paymentIntent = event.data.object;// Use stored information to get an error objectconst error = paymentIntent.error;// Use its type to choose a responseswitch(error.type){case'StripeCardError':
console.log(`A payment error occurred: ${error.message}`);break;case'StripeInvalidRequestError':
console.log('An invalid request occurred.');if(error.param){
console.log(`The parameter ${error.param} is invalid or missing.`);}break;default:
console.log('Another problem occurred, maybe unrelated to Stripe.');break;}}
response.send();});
app.listen(4242,()=> console.log('Running on port 4242'));
Pour tester la réponse de votre intégration aux événements webhook, vous pouvez déclencher des événements webhook localement. Après avoir terminé les étapes de configuration sur ce lien, déclenchez un échec de paiement pour voir le message d’erreur qui en résulte.
Command Line
stripe trigger payment_intent.payment_failed
Output
A payment error occurred: Your card was declined.
Obtenir des informations enregistrées sur les échecs
De nombreux objets stockent des informations sur les échecs. Cela signifie que s’il y a déjà eu un problème, vous êtes en mesure de récupérer l’objet et de l’examiner afin d’en savoir plus. Les informations stockées se présentent généralement sous la forme d’un objet Error, et vous pouvez vous référer à sa classe pour déterminer la marche à suivre.
Par exemple :
Récupérez un PaymentIntent spécifique.
Vérifiez s’il y a eu une erreur de paiement en déterminant si l’objet last_payment_error est vide.
Si c’est le cas, consignez l’erreur en incluant son type et l’objet concerné.
Pour tester un code qui exploite des informations enregistrées à propos des échecs, vous serez parfois amené à simuler des échecs de transactions. Pour cela, utilisez des cartes de test ou des numéros de comptes bancaires de test. Par exemple :
Dans la bibliothèque Node.js de Stripe, chaque objet Error possède un attribut type. Référez-vous à la documentation concernant chaque classe pour obtenir des conseils quant aux réponses à apporter.
Vous avez utilisé une clé d’idempotence pour effectuer une action inattendue (par exemple, relancer une requête en transmettant des paramètres différents).
Les erreurs de paiement, parfois appelées « erreurs de carte » pour des raisons historiques, regroupe un grand nombre de problèmes courants. Elles sont réparties en trois catégories :
);asyncfunctionexampleFunction(args){try{const paymentIntent =await stripe.paymentIntents.create(args);}catch(e){
console.log(e)if(e.type==='StripeCardError'){if(e.payment_intent.charges.data[0].outcome.type==='blocked'){
console.log('Payment blocked for suspected fraud.')}elseif(e.code==='card_declined'){
console.log('Payment declined by the issuer.')}elseif(e.code==='expired_card'){
console.log('Card expired.')}else{
console.log('Other card error.')}}}}
Grâce aux cartes de test, vous pouvez déclencher certains types d’erreur de paiement courants. Consultez ces listes pour connaitre les démarches à suivre :
Radar, le système de prévention des fraudes de Stripe, a bloqué le paiement
Solutions
Cette erreur peut se produire alors que votre intégration fonctionne correctement. Capturez-la et invitez le client à utiliser un autre moyen de paiement.
Pour bloquer moins de paiements légitimes, suivez la procédure ci-après :
Cette erreur peut se produire alors que votre intégration fonctionne correctement. Elle résulte d’une action effectuée par l’émetteur, qui peut être légitime. Utilisez le code de refus de paiement pour déterminer la marche à suivre. Consultez la documentation consacrée aux codes de refus de paiement pour découvrir les réponses adaptées à chaque code.
Vous pouvez également effectuer les actions ci-après :
Pour obtenir des éléments de formulaire préconfigurés qui puissent mettre en œuvre ces recommandations, utilisez Payment Links, Checkout ou Stripe Elements.
Cette erreur peut se produire alors que votre intégration fonctionne correctement. Utilisez le code d’erreur pour déterminer la marche à suivre. Consultez la documentation consacrée à ce sujet pour découvrir les réponses adaptées à chaque code.
Erreurs de requêtes invalides
Type
StripeInvalidRequestError
Problème
Vous avez effectué un appel à l’API contenant des paramètres incorrects, dont l’état est incompatible ou d’une manière non valide.
Solutions
Dans la plupart des cas, le problème vient de la requête elle-même : soit ses paramètres ne sont pas valides, soit l’état actuel de votre intégration ne permet pas son exécution.
Pour des raisons pratiques, vous pouvez suivre le lien e.doc_url pour en savoir plus sur le code d’erreur.
Si l’erreur implique un paramètre précis, utilisez e.param pour savoir duquel il s’agit.
Erreurs de connexion
Type
StripeAPIConnectionError
Problème
Un problème réseau est survenu entre votre serveur et Stripe.
Solutions
Traitez le résultat de l’appel à l’API comme étant indéterminé. Autrement dit, ne partez pas du principe qu’il a abouti ou échoué.
Pour savoir si cela a abouti, vous pouvez effectuer les actions suivantes :
Récupérez l’objet souhaité sur Stripe et consultez son état.
Écoutez des notifications de webhook afin de savoir si l’opération a abouti ou échoué.
Pour faciliter la correction des erreurs liées à la connexion, vous pouvez effectuer les actions suivantes :
Lorsque vous créez ou mettez à jour un objet, utilisez une clé d’idempotence. Ensuite, si une erreur de connexion se produit, vous pouvez répéter l’opération en toute sécurité, sans risquer de créer un deuxième objet ni d’effectuer deux fois la mise à jour. Réitérez la requête avec la même clé d’idempotence jusqu’à aboutir à une réussite ou un échec. Pour obtenir des conseils plus avancés sur cette stratégie, reportez-vous à la section consacrée à la gestion des erreurs de bas niveau.
Activez les relances automatiques. Ensuite, Stripe génère des clés d’idempotence et relance les requêtes en temps opportun.
Cette erreur peut en cacher d’autres. Il peut arriver que d’autres erreurs apparaissent après en avoir résolu une.
Erreurs d’API
Type
StripeAPIError
Problème
Un problème est survenu au niveau de Stripe (cas rare).
Solutions
Traitez le résultat de l’appel à l’API comme étant indéterminé. Autrement dit, ne partez pas du principe qu’il a abouti ou échoué.
Appuyez-vous sur les webhooks pour obtenir des informations sur le résultat. Lorsque cela est possible, Stripe déclenche des webhooks pour tous les nouveaux objets créés pendant la résolution du problème.
Vous avez utilisé une clé d’idempotence pour effectuer une action inattendue (par exemple, relancer une requête en transmettant des paramètres différents).
Solutions
Une fois que vous avez utilisé une clé d’idempotence, ne la réutilisez que pour effectuer des appels à l’API identiques.
Utilisez des clés d’idempotence dont la longueur ne dépasse pas 255 caractères.
Erreurs d’autorisation
Type
StripePermissionError
Problème
La clé API utilisée pour cette requête ne dispose pas des autorisations nécessaires.
Solutions
Utilisez-vous une clé API limitée pour un service auquel elle n’a pas accès ?
Are you performing an action in the Dashboard while logged in as a user role that lacks permission?
Erreurs de limite d’envoi
Type
StripeRateLimitError
Problème
Vous avez effectué trop d’appels à l’API dans le délai imparti.
Solutions
Si un seul appel à l’API déclenche cette erreur, réessayez ultérieurement.
Pour gérer la limitation d’envoi de façon automatique, retentez l’appel à l’API après quelques minutes et augmentez exponentiellement le délai si l’erreur persiste. Pour obtenir plus de conseils, consultez la documentation sur les limites d’envoi.
Si vous prévoyez une augmentation importante du trafic et que vous souhaitez demander une limite d’envoi plus souple, contactez notre service d’assistance en amont.
Cette erreur peut se produire alors que votre intégration fonctionne correctement. Si vous utilisez la vérification de signature de webhook et qu’un tiers tente de vous envoyer un faux webhook ou un webhook malveillant, alors la vérification échoue et une erreur survient. Capturez-la et renvoyez un code d’état 400 Bad Request.
Si vous recevez cette erreur alors qu’elle n’est pas censée apparaître (par exemple, avec des webhooks qui proviennent de Stripe), alors consultez la documentation consacrée à la vérification des signatures de webhook pour en savoir plus. Veillez plus particulièrement à utiliser la clé secrète du endpoint adaptée (qui n’est pas votre clé API).
Welcome to the Stripe Shell!
Stripe Shell is a browser-based shell with the Stripe CLI pre-installed. Log in to your
Stripe account and press Control + Backtick (`) on your keyboard to start managing your Stripe
resources in test mode.
- View supported Stripe commands:
- Find webhook events:
- Listen for webhook events:
- Call Stripe APIs: stripe [api resource] [operation] (e.g., )
Le shell Stripe est plus optimisé sur la version bureau.