# Gestion des erreurs 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. ## Analyser les données d’erreur Lorsque Stripe renvoie une erreur à votre requête d’API, vous recevez des informations sur l’erreur qui vous aident à comprendre comment appliquer les suggestions de traitement de ce guide. Ces détails vous permettent également de fournir des informations importantes à l’équipe Support de Stripe, le cas échéant. | Propriété | Description | | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `code` | Le code d’erreur. | | `doc_url` | Lien vers la documentation Stripe concernant le code d’erreur en question. | | `message` | Description de la raison de l’erreur. | | `param` | Paramètre de la requête responsable de l’erreur. | | `request_log_url` | Lien vers le Dashboard Stripe où vous pouvez consulter les logs détaillés de la requête initiale et de l’erreur. | | ID de la demande | Identifiant unique pour la requête d’origine ayant généré l’erreur. L’en-tête de réponse à l’erreur inclut cette valeur (chaîne commençant par `req`), mais vous pouvez spécifier une impression dans votre requête, comme indiqué dans les exemples de code de ce guide. | | `type` | Référence à la catégorie d’erreur à laquelle cette erreur appartient. | 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](https://docs.stripe.com/error-handling.md#error-types). | Technique | Objectif | Nécessaire | | ------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------- | ---------------- | | [Capturer les exceptions](https://docs.stripe.com/error-handling.md#catch-exceptions) | Rectifier les problèmes en cas d’interruption d’un appel à l’API | Systématiquement | | [Surveiller les webhooks](https://docs.stripe.com/error-handling.md#monitor-webhooks) | Réagir aux notifications de Stripe | Parfois | | [Obtenir des informations enregistrées sur les échecs](https://docs.stripe.com/error-handling.md#use-stored-information) | Analyser les problèmes passés et prendre en charge d’autres techniques | Parfois | ## Capturer les exceptions Avec cette bibliothèque, vous n’avez pas besoin de vérifier les réponses autres que les réponses HTTP 200. La bibliothèque les traduit en exceptions. Dans les rares cas où vous auriez besoin d’informations HTTP, consultez les pages consacrées à la [gestion des exceptions de bas niveau](https://docs.stripe.com/error-low-level.md) et à l’objet [Error](https://docs.stripe.com/api/errors.md). Si un problème immédiat empêche la poursuite d’un appel à l’API, la bibliothèque Ruby de Stripe génère une exception. Nous vous conseillons vivement de capturer et de traiter ces exceptions. Pour capturer une exception, utilisez le mot clé Ruby `rescue`. Capturez `Stripe::StripeError` ou ses sous-classes afin de traiter uniquement les exceptions spécifiques à Stripe. Chaque sous-classe représente un type d’exception distinct. Lorsque vous capturez une exception, vous pouvez [utiliser sa classe pour choisir une réponse](https://docs.stripe.com/error-handling.md#error-types). | Technique | Objectif | Nécessaire | | ------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------- | ---------------- | | [Capturer les exceptions](https://docs.stripe.com/error-handling.md#catch-exceptions) | Rectifier les problèmes en cas d’interruption d’un appel à l’API | Systématiquement | | [Surveiller les webhooks](https://docs.stripe.com/error-handling.md#monitor-webhooks) | Réagir aux notifications de Stripe | Parfois | | [Obtenir des informations enregistrées sur les échecs](https://docs.stripe.com/error-handling.md#use-stored-information) | Analyser les problèmes passés et prendre en charge d’autres techniques | Parfois | ## Capturer les exceptions Avec cette bibliothèque, vous n’avez pas besoin de vérifier les réponses autres que les réponses HTTP 200. La bibliothèque les traduit en exceptions. Dans les rares cas où vous auriez besoin d’informations HTTP, consultez les pages consacrées à la [gestion des exceptions de bas niveau](https://docs.stripe.com/error-low-level.md) et à l’objet [Error](https://docs.stripe.com/api/errors.md). Si un problème immédiat empêche la poursuite d’un appel à l’API, la bibliothèque Python de Stripe génère une exception. Nous vous conseillons vivement de capturer et de traiter ces exceptions. Pour capturer une exception, utilisez la syntaxe `try`/`except` de Python. Capturez `stripe.StripeError` ou ses sous-classes pour gérer uniquement les exceptions propres à Stripe. Chaque sous-classe représente un type d’exception différent. Lorsque vous capturez une exception, vous pouvez [utiliser sa classe pour choisir une réponse](https://docs.stripe.com/error-handling.md#error-types). | Technique | Objectif | Nécessaire | | ------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------- | ---------------- | | [Capturer les exceptions](https://docs.stripe.com/error-handling.md#catch-exceptions) | Rectifier les problèmes en cas d’interruption d’un appel à l’API | Systématiquement | | [Surveiller les webhooks](https://docs.stripe.com/error-handling.md#monitor-webhooks) | Réagir aux notifications de Stripe | Parfois | | [Obtenir des informations enregistrées sur les échecs](https://docs.stripe.com/error-handling.md#use-stored-information) | Analyser les problèmes passés et prendre en charge d’autres techniques | Parfois | ## Capturer les exceptions Avec cette bibliothèque, vous n’avez pas besoin de vérifier les réponses autres que les réponses HTTP 200. La bibliothèque les traduit en exceptions. Dans les rares cas où vous auriez besoin d’informations HTTP, consultez les pages consacrées à la [gestion des exceptions de bas niveau](https://docs.stripe.com/error-low-level.md) et à l’objet [Error](https://docs.stripe.com/api/errors.md). Si un problème immédiat empêche la poursuite d’un appel à l’API, la bibliothèque PHP de Stripe génère une exception. Nous vous conseillons vivement de capturer et de traiter ces exceptions. Pour capturer une exception, utilisez la syntaxe PHP `try`/`catch`. Stripe propose plusieurs classes d’exceptions que vous pouvez capturer. Chacune d’entre elles représente un type d’erreur distinct. Lorsque vous capturez une exception, vous pouvez [vous référer à sa classe pour déterminer la marche à suivre](https://docs.stripe.com/error-handling.md#error-types). | Technique | Objectif | Nécessaire | | ------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------- | ---------------- | | [Capturer les exceptions](https://docs.stripe.com/error-handling.md#catch-exceptions) | Rectifier les problèmes en cas d’interruption d’un appel à l’API | Systématiquement | | [Surveiller les webhooks](https://docs.stripe.com/error-handling.md#monitor-webhooks) | Réagir aux notifications de Stripe | Parfois | | [Obtenir des informations enregistrées sur les échecs](https://docs.stripe.com/error-handling.md#use-stored-information) | Analyser les problèmes passés et prendre en charge d’autres techniques | Parfois | ## Capturer les exceptions Avec cette bibliothèque, vous n’avez pas besoin de vérifier les réponses autres que les réponses HTTP 200. La bibliothèque les traduit en exceptions. Dans les rares cas où vous auriez besoin d’informations HTTP, consultez les pages consacrées à la [gestion des exceptions de bas niveau](https://docs.stripe.com/error-low-level.md) et à l’objet [Error](https://docs.stripe.com/api/errors.md). Si un problème immédiat empêche la poursuite d’un appel à l’API, la bibliothèque Java de Stripe génère une exception. Nous vous conseillons vivement de capturer et de traiter ces exceptions. Pour capturer une exception, utilisez la syntaxe Java `try`/`catch`. Capturez `StripeException` ou ses sous-classes afin de traiter uniquement les exceptions spécifiques à Stripe. Chaque sous-classe représente un type d’exception distinct. Lorsque vous capturez une exception, vous pouvez [utiliser sa classe pour choisir une réponse](https://docs.stripe.com/error-handling.md#error-types). | Technique | Objectif | Nécessaire | | ------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------- | ---------------- | | [Capturer les exceptions](https://docs.stripe.com/error-handling.md#catch-exceptions) | Rectifier les problèmes en cas d’interruption d’un appel à l’API | Systématiquement | | [Surveiller les webhooks](https://docs.stripe.com/error-handling.md#monitor-webhooks) | Réagir aux notifications de Stripe | Parfois | | [Obtenir des informations enregistrées sur les échecs](https://docs.stripe.com/error-handling.md#use-stored-information) | Analyser les problèmes passés et prendre en charge d’autres techniques | Parfois | ## Capturer les exceptions Avec cette bibliothèque, vous n’avez pas besoin de vérifier les réponses autres que les réponses HTTP 200. La bibliothèque les traduit en exceptions. Dans les rares cas où vous auriez besoin d’informations HTTP, consultez les pages consacrées à la [gestion des exceptions de bas niveau](https://docs.stripe.com/error-low-level.md) et à l’objet [Error](https://docs.stripe.com/api/errors.md). 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`. - Wrappez l’appel à l’API dans un bloc `try`/`catch`. Lorsque vous capturez une exception, vous pouvez [utiliser son attribut type pour choisir une réponse](https://docs.stripe.com/error-handling.md#error-types). | Technique | Objectif | Nécessaire | | ------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------- | ---------------- | | [Utiliser les valeurs d’erreur](https://docs.stripe.com/error-handling.md#catch-exceptions) | Rectifier les problèmes en cas d’interruption d’un appel à l’API | Systématiquement | | [Surveiller les webhooks](https://docs.stripe.com/error-handling.md#monitor-webhooks) | Réagir aux notifications de Stripe | Parfois | | [Obtenir des informations enregistrées sur les échecs](https://docs.stripe.com/error-handling.md#use-stored-information) | Analyser les problèmes passés et prendre en charge d’autres techniques | Parfois | ## Utiliser des valeurs d’erreur Avec cette bibliothèque, vous n’avez pas besoin de vérifier les réponses autres que les réponses HTTP 200. La bibliothèque les traduit en valeurs d’erreur. Dans les rares cas où vous auriez besoin d’informations HTTP, consultez les pages consacrées à la [gestion des exceptions de bas niveau](https://docs.stripe.com/error-low-level.md) et à l’objet [Error](https://docs.stripe.com/api/errors.md). Les appels à l’API dans la bibliothèque Go de Stripe retournent une valeur de résultat et une valeur d’erreur. Utilisez des attributions multiples pour capturer ces deux valeurs. Si la valeur d’erreur n’est pas `nil`, cela signifie qu’un problème immédiat a empêché la poursuite de l’appel à l’API. Si la valeur de l’erreur concerne Stripe, vous pouvez la convertir en objet `stripe.Error` qui contient des champs décrivant le problème. [Utilisez le champ Type pour choisir une réponse](https://docs.stripe.com/error-handling.md#error-types). Dans certains cas, vous pouvez convertir la propriété `Err` en un type d’erreur plus spécifique avec des informations complémentaires. | Technique | Objectif | Nécessaire | | ------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------- | ---------------- | | [Capturer les exceptions](https://docs.stripe.com/error-handling.md#catch-exceptions) | Rectifier les problèmes en cas d’interruption d’un appel à l’API | Systématiquement | | [Surveiller les webhooks](https://docs.stripe.com/error-handling.md#monitor-webhooks) | Réagir aux notifications de Stripe | Parfois | | [Obtenir des informations enregistrées sur les échecs](https://docs.stripe.com/error-handling.md#use-stored-information) | Analyser les problèmes passés et prendre en charge d’autres techniques | Parfois | ## Capturer les exceptions Avec cette bibliothèque, vous n’avez pas besoin de vérifier les réponses autres que les réponses HTTP 200. La bibliothèque les traduit en exceptions. Dans les rares cas où vous auriez besoin d’informations HTTP, consultez les pages consacrées à la [gestion des exceptions de bas niveau](https://docs.stripe.com/error-low-level.md) et à l’objet [Error](https://docs.stripe.com/api/errors.md). Si un problème immédiat empêche la poursuite d’un appel à l’API, la bibliothèque Stripe .NET génère une exception. Nous vous conseillons vivement de capturer et de traiter ces exceptions. Pour capturer une exception, utilisez la syntaxe .NET `try`/`catch`. Capturez une `StripeException`, puis [utilisez son attribut Type pour déterminer la marche à suivre](https://docs.stripe.com/error-handling.md#error-types). #### PHP ```php >'); function example_function($args) { try { $stripe->paymentIntents->create($args); error_log("No error."); } catch(\Stripe\Exception\CardException $e) { error_log("A payment error occurred: {$e->getError()->message}. (request id: {$e->getRequestId()})"); } catch (\Stripe\Exception\InvalidRequestException $e) { error_log("An invalid request occurred. (request id: {$e->getRequestId()})"); // Add additional catch cases for other Stripe exception types as needed. // See all exception types at https://docs.stripe.com/api/errors/handling?lang=php } catch (\Stripe\Exception\ApiErrorException $e) { // All other Stripe API errors error_log("Status: " . $e->getHttpStatus() . ", Code: " . $e->getStripeCode() . ", Message: " . $e->getMessage() . ", Request ID: " . $e->getRequestId()); } catch (Exception $e) { error_log("Another problem occurred, maybe unrelated to Stripe."); } } ``` 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](https://docs.stripe.com/testing.md), afin de simuler différents résultats de paiement. #### Erreur à déclencher - Requête non valide #### PHP ```php example_function([ // The required parameter currency is missing 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_visa', // Cette carte de test aboutit systématiquement à un paiement réussi lorsqu'elle est utilisée dans un environnement de test. Utilisez-la ainsi que d'autres cartes de test afin de tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` An invalid request occurred. ``` #### Erreur à déclencher - Erreur de carte #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedFraudulent', // Cette carte de test aboutit systématiquement à une erreur pour cause de paiement frauduleux. Utilisez-la ainsi que d'autres cartes de test afin de tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` A payment error occurred: Your card was declined. ``` #### Erreur à déclencher - Pas d'erreur #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_visa', // Cette carte de test aboutit systématiquement à un paiement réussi lorsqu'elle est utilisée dans un environnement de test. Utilisez-la ainsi que d'autres cartes de test afin de tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` No error. ``` ## Surveiller les webhooks En cas de problème, Stripe vous avertit à l’aide de *webhooks* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests), 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* (Confirming a PaymentIntent indicates that the customer intends to pay with the current or provided payment method. Upon confirmation, the PaymentIntent attempts to initiate a payment) 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](https://docs.stripe.com/webhooks/quickstart.md) : 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 : 1. Accédez à [event.data.object](https://docs.stripe.com/api/events/object.md#event_object-data-object) pour récupérer l’objet concerné. 1. [Utilisez les informations stockées](https://docs.stripe.com/error-handling.md#use-stored-information) dans l’objet concerné pour obtenir des explications, y compris dans le cas d’un objet Error. 1. [Référez-vous au type de l’objet pour déterminer la marche à suivre](https://docs.stripe.com/error-handling.md#error-types). 1. Accédez à [l’événement[‘data’][‘object’]](https://docs.stripe.com/api/events/object.md#event_object-data-object) pour récupérer l’objet concerné. 1. [Utilisez les informations stockées](https://docs.stripe.com/error-handling.md#use-stored-information) dans l’objet concerné pour obtenir des explications, y compris dans le cas d’un objet Error. 1. [Référez-vous au type de l’objet pour déterminer la marche à suivre](https://docs.stripe.com/error-handling.md#error-types). 1. Accédez à [event->data->object](https://docs.stripe.com/api/events/object.md#event_object-data-object) pour récupérer l’objet concerné. 1. [Utilisez les informations stockées](https://docs.stripe.com/error-handling.md#use-stored-information) dans l’objet concerné pour obtenir des explications, y compris dans le cas d’un objet Error. 1. [Référez-vous au type de l’objet pour déterminer la marche à suivre](https://docs.stripe.com/error-handling.md#error-types). 1. Récupérez l’objet concerné en utilisant un `EventDataObjectDeserializer` et en convertissant son résultat en le type approprié. 1. [Utilisez les informations stockées](https://docs.stripe.com/error-handling.md#use-stored-information) dans l’objet concerné pour obtenir des explications, y compris dans le cas d’un objet Error. 1. [Référez-vous au type de l’objet pour déterminer la marche à suivre](https://docs.stripe.com/error-handling.md#error-types). 1. Accédez à [event.data.object](https://docs.stripe.com/api/events/object.md#event_object-data-object) pour récupérer l’objet concerné. 1. [Utilisez les informations stockées](https://docs.stripe.com/error-handling.md#use-stored-information) dans l’objet concerné pour obtenir des explications, y compris dans le cas d’un objet Error. 1. [Référez-vous au type de l’objet pour déterminer la marche à suivre](https://docs.stripe.com/error-handling.md#error-types). 1. Récupérez l’objet concerné en désérialisant les données de `event.Data.Raw`. 1. [Utilisez les informations stockées](https://docs.stripe.com/error-handling.md#use-stored-information) dans l’objet concerné pour obtenir des explications, y compris dans le cas d’un objet Error. 1. [Référez-vous au type de l’objet pour déterminer la marche à suivre](https://docs.stripe.com/error-handling.md#error-types). 1. Récupérez l’objet concerné en convertissant [stripeEvent.Data.Object](https://docs.stripe.com/api/events/object.md#event_object-data-object) selon le type approprié. 1. [Utilisez les informations stockées](https://docs.stripe.com/error-handling.md#use-stored-information) dans l’objet concerné pour obtenir des explications, y compris dans le cas d’un objet Error. 1. [Référez-vous au type de l’objet pour déterminer la marche à suivre](https://docs.stripe.com/error-handling.md#error-types). #### PHP ```php >'); $payload = @file_get_contents('php://input'); $event = null; // Get the event object try { $event = \Stripe\Event::constructFrom( json_decode($payload, true) ); } catch(\UnexpectedValueException $e) { echo '⚠️ Webhook error while parsing basic request.'; http_response_code(400); exit(); } // Use the event type to find out what happened if ($event->type == 'payment_intent.payment_failed') { // Get the object affected $paymentIntent = $event->data->object; // Use stored information to get an error object $e = $paymentIntent->last_payment_error; // Use its type to choose a response switch ($e->type) { case \Stripe\Exception\CardException: error_log("A payment error occurred: {$e->getError()->message}"); break; case \Stripe\Exception\InvalidRequestException: error_log("An invalid request occurred."); if (isset($e->getError()->param)) { error_log("The parameter {$e->getError()->param} is invalid or missing."); } break; default: error_log("Another problem occurred, maybe unrelated to Stripe."); } } http_response_code(200); ``` Pour tester la réponse de votre intégration aux événements webhook, vous pouvez [déclencher des événements webhook localement](https://docs.stripe.com/webhooks.md#test-webhook). 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. ```bash stripe trigger payment_intent.payment_failed ``` ```bash 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](https://docs.stripe.com/error-handling.md#error-types). Par exemple : 1. Récupérez un PaymentIntent spécifique. 1. Vérifiez s’il y a eu une erreur de paiement en déterminant si l’objet [last_payment_error](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-last_payment_error) est vide. 1. Si c’est le cas, consignez l’erreur en incluant son type et l’objet concerné. #### PHP ```php >'); $payment_intent = $stripe->paymentIntents->retrieve(% identifier type="paymentIntent" /%}); $e = $payment_intent->last_payment_error; if (isset($e)) { error_log("PaymentIntent {$payment_intent->id} experienced a {$e->getError()->type} error."); } ``` Voici quelques objets courants qui stockent des informations sur les échecs. | Objet | Attribut | Valeurs | | ----------------------------------------------------------------- | ------------------------- | -------------------------------------------------------------------------------------------------------------- | | [Payment Intents](https://docs.stripe.com/api/payment_intents.md) | `last_payment_error` | [Un objet Error](https://docs.stripe.com/error-handling.md#work-with-error-objects) | | [Setup Intents](https://docs.stripe.com/api/setup_intents.md) | `last_setup_error` | [Un objet Error](https://docs.stripe.com/error-handling.md#work-with-error-objects) | | [Invoice](https://docs.stripe.com/api/invoices.md) | `last_finalization_error` | [Un objet Error](https://docs.stripe.com/error-handling.md#work-with-error-objects) | | [Setup Attempt](https://docs.stripe.com/api/setup_attempts.md) | `setup_error` | [Un objet Error](https://docs.stripe.com/error-handling.md#work-with-error-objects) | | [Virement](https://docs.stripe.com/api/payouts.md) | `failure_code` | [Un code d’échec de virement](https://docs.stripe.com/api/payouts/failures.md) | | [Refund](https://docs.stripe.com/api/refunds.md) | `failure_reason` | [Un code d’échec de remboursement](https://docs.stripe.com/api/refunds/object.md#refund_object-failure_reason) | 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](https://docs.stripe.com/testing.md) ou des numéros de comptes bancaires de test. Par exemple : - [Simuler un refus de paiement](https://docs.stripe.com/testing.md#declined-payments) pour générer des échecs de Charges, PaymentIntents, SetupIntents et autres. - [Simuler un échec de virement](https://docs.stripe.com/connect/testing.md#account-numbers). - [Simuler un échec de remboursement](https://docs.stripe.com/testing.md#refunds). ## Types d’erreurs et réponses Dans la bibliothèque Ruby de Stripe, les objets Error appartiennent à la classe `stripe.error.StripeError`et ses sous-classes. Référez-vous à la documentation concernant chaque classe pour obtenir des conseils quant aux réponses à apporter. | Nom | Classe | Description | | ----------------------------------- | ------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Erreur de paiement | [Stripe::CardError](https://docs.stripe.com/error-handling.md#payment-errors) | Une erreur est survenue lors d’un paiement. Voici les cas possibles : - [Paiement bloqué pour suspicion de fraude](https://docs.stripe.com/error-handling.md#payment-blocked) - [Paiement refusé par l’émetteur](https://docs.stripe.com/error-handling.md#payment-declined). - [Autres erreurs de paiement](https://docs.stripe.com/error-handling.md#other-payment-errors). | | Erreur de requête non valide | [Stripe::InvalidRequestError](https://docs.stripe.com/error-handling.md#invalid-request-errors) | Vous avez effectué un appel à l’API contenant des paramètres incorrects, dont l’état est incompatible ou d’une manière non valide. | | Erreur de connexion | [Stripe::APIConnectionError](https://docs.stripe.com/error-handling.md#connection-errors) | Un problème réseau est survenu entre votre serveur et Stripe. | | Erreur d’API | [Stripe::APIError](https://docs.stripe.com/error-handling.md#api-errors) | Un problème est survenu au niveau de Stripe (cas rare). | | Erreur d’authentification | [Stripe::AuthenticationError](https://docs.stripe.com/error-handling.md#authentication-errors) | Stripe ne parvient pas à vous authentifier avec les informations que vous avez fournies. | | Erreur d’idempotence | [Stripe::IdempotencyError](https://docs.stripe.com/error-handling.md#idempotency-errors) | Vous avez utilisé une [clé d’idempotence](https://docs.stripe.com/api/idempotent_requests.md) pour effectuer une action inattendue (par exemple, relancer une requête en transmettant des paramètres différents). | | Erreur d’autorisation | [Stripe::PermissionError](https://docs.stripe.com/error-handling.md#permission-errors) | La clé API utilisée pour cette requête ne dispose pas des autorisations nécessaires. | | Erreur de limite d’envoi | [Stripe::RateLimitError](https://docs.stripe.com/error-handling.md#rate-limit-errors) | Vous avez effectué trop d’appels à l’API dans le délai imparti. | | Erreur de vérification de signature | [Stripe::SignatureVerificationError](https://docs.stripe.com/error-handling.md#signature-verification-errors) | Vous utilisez la [vérification de signature](https://docs.stripe.com/webhooks.md#verify-events) de *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) et n’avez pas pu vérifier l’authenticité d’un événement webhook. | ## Erreurs de paiement Toutes les dispositions de cette section s’appliquent également aux paiements autres que par carte. Pour des raisons historiques, les erreurs de paiement sont de type [Stripe::CardError](https://docs.stripe.com/error-handling.md#card-error). Dans les faits, toutefois, ils peuvent représenter un problème avec n’importe quel paiement, quel que soit le moyen de paiement. 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 : - [Paiement bloqué pour suspicion de fraude](https://docs.stripe.com/error-handling.md#payment-blocked) - [Paiement refusé par l’émetteur](https://docs.stripe.com/error-handling.md#payment-declined) - [Autres erreurs de paiement](https://docs.stripe.com/error-handling.md#other-payment-errors) Pour pouvoir distinguer ces catégories ou en savoir davantage sur la façon d’y répondre, reportez-vous aux pages relatives aux [codes d’erreur](https://docs.stripe.com/error-codes.md), aux [codes de refus de paiement](https://docs.stripe.com/declines/codes.md) et aux [résultats du paiement](https://docs.stripe.com/api/charges/object.md#charge_object-outcome). (Pour rechercher un résultat de paiement à partir d’un objet Error, récupérez d’abord le [PaymentIntent correspondant](https://docs.stripe.com/api/errors.md#errors-payment_intent) ainsi que le [dernier paiement que ce dernier a créé](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-latest_charge). L’exemple ci-après illustre cette étape.) #### PHP ```php >'); function example_function($args) { try { $stripe->paymentIntents->create($args); } catch(\Stripe\Exception\CardException $e) { $charge = $stripe->charge->retrieve($e->getError()->payment_intent->latest_charge); if ($charge->outcome->type == 'blocked') { error_log('Blocked for suspected fraud.'); } elseif ($e->getError()->code == 'expired_card') { error_log('Card expired.'); } elseif ($e->getError()->code == 'card_declined') { error_log('Declined by the issuer.'); } else { error_log('Other card error.'); } } } ``` Utilisateurs de la version du [01/08/2022](https://docs.stripe.com/upgrades.md#2022-08-01) de l’API ou d’une version antérieure : (Pour rechercher un résultat de paiement à partir d’un objet Error, récupérez d’abord le [PaymentIntent correspondant](https://docs.stripe.com/api/errors.md#errors-payment_intent) ainsi que le [dernier paiement que ce dernier a créé](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-charges-data). L’exemple ci-après illustre cette étape.) #### PHP ```php >'); function example_function($args) { try { $stripe->paymentIntents->create($args); } catch(\Stripe\Exception\CardException $e) { if ($e->getError()->payment_intent->charges->data[0]->outcome->type == 'blocked') { error_log('Blocked for suspected fraud.'); } elseif ($e->getError()->code == 'expired_card') { error_log('Card expired.'); } elseif ($e->getError()->code == 'card_declined') { error_log('Declined by the issuer.'); } else { error_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 : - [Simulation de paiements bloqués en raison d’un risque de fraude](https://docs.stripe.com/testing.md#fraud-prevention) - [Simulation de refus de paiements et d’autres erreurs de carte](https://docs.stripe.com/testing.md#declined-payments) Le code de test ci-dessous montre quelques possibilités. #### Erreur à déclencher - Bloqué pour suspicion de fraude #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_radarBlock', // Cette carte de test est toujours bloquée lorsqu’elle est utilisée dans un environnement de test pour suspicion de fraude. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Payment blocked for suspected fraud. ``` #### Erreur à déclencher - Refusé par l'émetteur #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_visa_chargeDeclined', // Cette carte de test est toujours refusée par l’émetteur lorsqu’elle est utilisée dans un environnement de test. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Payment declined by the issuer ``` #### Erreur à déclencher - Carte expirée #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedExpiredCard', // Cette carte de test échoue toujours pour cause d’expiration lorsqu’elle est utilisée dans un environnement de test. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Card expired. ``` #### Erreur à déclencher - Autre erreur de carte #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedProcessingError', // Cette carte de test échoue systématiquement en raison d’une erreur de traitement lorsqu’elle est utilisée dans un environnement de test. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Other payment error. ``` ### Paiement bloqué pour suspicion de fraude | | | | | **Type** | `Stripe::CardError` | | **Codes** | ```ruby charge = Stripe::Charge.retrieve(e.error.payment_intent.latest_charge) charge.outcome.type == 'blocked' ``` Users on API version [2022-08-01](https://docs.stripe.com/upgrades.md#2022-08-01) or older: | **Codes** | `e.error.payment_intent.charges.data[0].outcome.type == 'blocked'` | | **Problème** | | *Radar* (Radar for Fraud Teams helps you fine-tune how Radar operates, get fraud insights on suspicious charges, and assess your fraud management performance from a unified dashboard), 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 : - [Optimisez votre intégration de Radar](https://docs.stripe.com/radar/optimize-fraud-signals.md) pour collecter des informations plus détaillées. - Pour obtenir des éléments de formulaire optimisés préconfigurés, utilisez [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) ou [Stripe Elements](https://docs.stripe.com/payments/elements.md). Les clients de *Radar for Fraud Teams* (Radar for Fraud Teams helps you fine-tune how Radar operates, get fraud insights on suspicious charges, and assess your fraud management performance from a unified dashboard) disposent des options supplémentaires suivantes : - Pour exempter un paiement spécifique, ajoutez-le à votre liste blanche. (Radar for Fraud Teams) - Pour modifier votre seuil de tolérance au risque, réajustez les [paramètres de risque](https://docs.stripe.com/radar/risk-settings.md). (Radar for Fraud Teams) - Pour modifier les critères de blocage des paiements, définissez des [règles personnalisées](https://docs.stripe.com/radar/rules.md). (Radar for Fraud Teams) Vous pouvez tester les paramètres de votre intégration à l’aide de [cartes de test qui permettent de simuler des fraudes](https://docs.stripe.com/radar/testing.md). Si vous avez défini des règles Radar personnalisées, suivez les conseils en matière de test décrits dans la [documentation de Radar](https://docs.stripe.com/radar/testing.md). | ### Paiement refusé par l’émetteur | | | | | **Type** | `Stripe::CardError` | | **Codes** | `e.error.code == "card_declined"` | | **Problème** | L’émetteur de la carte a refusé le paiement. | | **Solutions** | Cette erreur peut se produire alors que votre intégration fonctionne correctement. Elle reflète 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 sur les codes de refus de paiement](https://docs.stripe.com/declines/codes.md) pour connaître les réponses adaptées à chaque code. Vous pouvez également effectuer les actions ci-après : - [Suivez nos recommandations pour limiter les refus de paiement des émetteurs](https://docs.stripe.com/declines/card.md#reducing-bank-declines). - Pour obtenir des éléments de formulaire préconfigurés qui puissent mettre en œuvre ces recommandations, utilisez [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) ou [Stripe Elements](https://docs.stripe.com/payments/elements.md). Analysez la façon dont votre intégration gère les refus de paiement à l’aide de [cartes de test qui permettent de simuler des paiements aboutis et refusés](https://docs.stripe.com/radar/testing.md). | ### Autres erreurs de paiement | | | | | **Type** | `Stripe::CardError` | | **Problème** | Une autre erreur de paiement s’est produite. | | **Solutions** | 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](https://docs.stripe.com/error-codes.md) pour découvrir les réponses adaptées à chaque code. | ## Erreurs de requêtes invalides | | | | | **Type** | `Stripe::InvalidRequestError` | | **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 en savoir plus à propos de ce problème, consultez la [documentation consacrée aux codes d’erreur](https://docs.stripe.com/error-codes.md). - Pour des raisons pratiques, vous pouvez suivre le lien pour en savoir plus sur le code d’erreur. - Si l’erreur implique un paramètre précis, utilisez pour savoir duquel il s’agit. | ## Erreurs de connexion | | | | | **Type** | `Stripe::APIConnectionError` | | **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 indéterminé. Autrement dit, ne présumez pas qu’il a réussi ou qu’il a é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 résoudre les problèmes de connexion, vous pouvez effectuer les actions suivantes : - Lorsque vous créez ou mettez à jour un objet, utilisez une [clé d’idempotence](https://docs.stripe.com/api/idempotent_requests.md). 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](https://docs.stripe.com/error-low-level.md#idempotency). - Activez les [relances automatiques](https://github.com/stripe/stripe-java?tab=readme-ov-file#configuring-automatic-retries). 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** | `Stripe::APIError` | | **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* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) 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. Pour configurer votre intégration de sorte à ce qu’elle soit capable de gérer des situations inhabituelles, reportez-vous à [cette section plus avancée consacrée aux erreurs de serveur](https://docs.stripe.com/error-low-level.md#server-errors). | ## Erreurs d’authentification | | | | | **Type** | `Stripe::AuthenticationError` | | **Problème** | Stripe ne parvient pas à vous authentifier avec les informations que vous avez fournies. | | **Solutions** | - Utilisez la [clé API](https://docs.stripe.com/keys.md) appropriée. - Veillez à ne pas utiliser une clé que vous avez [« générée aléatoirement » ou révoquée](https://docs.stripe.com/keys.md#rolling-keys). | ## Erreurs d’idempotence | | | | | **Type** | `Stripe::IdempotencyError` | | **Problème** | Vous avez utilisé une [clé d’idempotence](https://docs.stripe.com/api/idempotent_requests.md) 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** | `Stripe::PermissionError` | | **Problème** | La clé API utilisée pour cette requête ne dispose pas des autorisations nécessaires. | | **Solutions** | - Assurez-vous de ne pas utiliser de [clé API restreinte](https://docs.stripe.com/keys-best-practices.md#limit-access) pour un service auquel elle n’a pas accès. - N’effectuez pas d’actions via le Dashboard tout en étant connecté avec un [rôle utilisateur](https://docs.stripe.com/get-started/account/teams/roles.md) pour lequel certains accès sont limités. | ## Erreurs de limite d’envoi | | | | | **Type** | `Stripe::RateLimitError` | | **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](https://docs.stripe.com/rate-limits.md). - Si vous prévoyez une augmentation importante du trafic et que vous souhaitez demander une limite d’envoi plus souple, [contactez notre service Support](https://support.stripe.com/) en amont. | ## Erreurs de vérification de signature | | | | | **Type** | `Stripe::SignatureVerificationError` | | **Problème** | Vous utilisez la [vérification de signature](https://docs.stripe.com/webhooks.md#verify-events) de *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) et n’avez pas pu vérifier l’authenticité d’un événement webhook. | | **Solutions** | 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](https://docs.stripe.com/webhooks.md#verify-events) pour en savoir plus. Veillez plus particulièrement à utiliser la clé secrète de l’endpoint adaptée (qui n’est pas votre clé API). | Dans la bibliothèque Python de Stripe, les objets d’erreur appartiennent à `stripe.StripeError` et ses sous-classes. Utilisez la documentation de chaque classe pour obtenir des conseils sur la façon de répondre. | Nom | Classe | Description | | ----------------------------------- | ------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Erreur de paiement | [stripe.CardError](https://docs.stripe.com/error-handling.md#payment-errors) | Une erreur est survenue lors d’un paiement. Voici les cas possibles : - [Paiement bloqué pour suspicion de fraude](https://docs.stripe.com/error-handling.md#payment-blocked) - [Paiement refusé par l’émetteur](https://docs.stripe.com/error-handling.md#payment-declined). - [Autres erreurs de paiement](https://docs.stripe.com/error-handling.md#other-payment-errors). | | Erreur de requête non valide | [stripe.InvalidRequestError](https://docs.stripe.com/error-handling.md#invalid-request-errors) | Vous avez effectué un appel à l’API contenant des paramètres incorrects, dont l’état est incompatible ou d’une manière non valide. | | Erreur de connexion | [stripe.APIConnectionError](https://docs.stripe.com/error-handling.md#connection-errors) | Un problème réseau est survenu entre votre serveur et Stripe. | | Erreur d’API | [stripe.APIError](https://docs.stripe.com/error-handling.md#api-errors) | Un problème est survenu au niveau de Stripe (cas rare). | | Erreur d’authentification | [stripe.AuthenticationError](https://docs.stripe.com/error-handling.md#authentication-errors) | Stripe ne parvient pas à vous authentifier avec les informations que vous avez fournies. | | Erreur d’idempotence | [stripe.IdempotencyError](https://docs.stripe.com/error-handling.md#idempotency-errors) | Vous avez utilisé une [clé d’idempotence](https://docs.stripe.com/api/idempotent_requests.md) pour effectuer une action inattendue (par exemple, relancer une requête en transmettant des paramètres différents). | | Erreur d’autorisation | [stripe.PermissionError](https://docs.stripe.com/error-handling.md#permission-errors) | La clé API utilisée pour cette requête ne dispose pas des autorisations nécessaires. | | Erreur de limite d’envoi | [stripe.RateLimitError](https://docs.stripe.com/error-handling.md#rate-limit-errors) | Vous avez effectué trop d’appels à l’API dans le délai imparti. | | Erreur de vérification de signature | [stripe.SignatureVerificationError](https://docs.stripe.com/error-handling.md#signature-verification-errors) | Vous utilisez la [vérification de signature](https://docs.stripe.com/webhooks.md#verify-events) de *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) et n’avez pas pu vérifier l’authenticité d’un événement webhook. | ## Erreurs de paiement Toutes les dispositions de cette section s’appliquent également aux paiements autres que par carte. Pour des raisons historiques, les erreurs de paiement sont de type [stripe.CardError](https://docs.stripe.com/error-handling.md#card-error). Dans les faits, toutefois, ils peuvent représenter un problème avec n’importe quel paiement, quel que soit le moyen de paiement. 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 : - [Paiement bloqué pour suspicion de fraude](https://docs.stripe.com/error-handling.md#payment-blocked) - [Paiement refusé par l’émetteur](https://docs.stripe.com/error-handling.md#payment-declined) - [Autres erreurs de paiement](https://docs.stripe.com/error-handling.md#other-payment-errors) Pour pouvoir distinguer ces catégories ou en savoir davantage sur la façon d’y répondre, reportez-vous aux pages relatives aux [codes d’erreur](https://docs.stripe.com/error-codes.md), aux [codes de refus de paiement](https://docs.stripe.com/declines/codes.md) et aux [résultats du paiement](https://docs.stripe.com/api/charges/object.md#charge_object-outcome). (Pour rechercher un résultat de paiement à partir d’un objet Error, récupérez d’abord le [PaymentIntent correspondant](https://docs.stripe.com/api/errors.md#errors-payment_intent) ainsi que le [dernier paiement que ce dernier a créé](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-latest_charge). L’exemple ci-après illustre cette étape.) #### PHP ```php >'); function example_function($args) { try { $stripe->paymentIntents->create($args); } catch(\Stripe\Exception\CardException $e) { $charge = $stripe->charge->retrieve($e->getError()->payment_intent->latest_charge); if ($charge->outcome->type == 'blocked') { error_log('Blocked for suspected fraud.'); } elseif ($e->getError()->code == 'expired_card') { error_log('Card expired.'); } elseif ($e->getError()->code == 'card_declined') { error_log('Declined by the issuer.'); } else { error_log('Other card error.'); } } } ``` Utilisateurs de la version du [01/08/2022](https://docs.stripe.com/upgrades.md#2022-08-01) de l’API ou d’une version antérieure : (Pour rechercher un résultat de paiement à partir d’un objet Error, récupérez d’abord le [PaymentIntent correspondant](https://docs.stripe.com/api/errors.md#errors-payment_intent) ainsi que le [dernier paiement que ce dernier a créé](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-charges-data). L’exemple ci-après illustre cette étape.) #### PHP ```php >'); function example_function($args) { try { $stripe->paymentIntents->create($args); } catch(\Stripe\Exception\CardException $e) { if ($e->getError()->payment_intent->charges->data[0]->outcome->type == 'blocked') { error_log('Blocked for suspected fraud.'); } elseif ($e->getError()->code == 'expired_card') { error_log('Card expired.'); } elseif ($e->getError()->code == 'card_declined') { error_log('Declined by the issuer.'); } else { error_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 : - [Simulation de paiements bloqués en raison d’un risque de fraude](https://docs.stripe.com/testing.md#fraud-prevention) - [Simulation de refus de paiements et d’autres erreurs de carte](https://docs.stripe.com/testing.md#declined-payments) Le code de test ci-dessous montre quelques possibilités. #### Erreur à déclencher - Bloqué pour suspicion de fraude #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_radarBlock', // Cette carte de test est toujours bloquée lorsqu’elle est utilisée dans un environnement de test pour suspicion de fraude. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Payment blocked for suspected fraud. ``` #### Erreur à déclencher - Refusé par l'émetteur #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_visa_chargeDeclined', // Cette carte de test est toujours refusée par l’émetteur lorsqu’elle est utilisée dans un environnement de test. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Payment declined by the issuer ``` #### Erreur à déclencher - Carte expirée #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedExpiredCard', // Cette carte de test échoue toujours pour cause d’expiration lorsqu’elle est utilisée dans un environnement de test. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Card expired. ``` #### Erreur à déclencher - Autre erreur de carte #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedProcessingError', // Cette carte de test échoue systématiquement en raison d’une erreur de traitement lorsqu’elle est utilisée dans un environnement de test. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Other payment error. ``` ### Paiement bloqué pour suspicion de fraude | | | | | **Type** | `stripe.CardError` | | **Codes** | ```python charge = stripe.Charge.retrieve(e.error.payment_intent.latest_charge) charge.outcome.type == 'blocked' ``` Users on API version [2022-08-01](https://docs.stripe.com/upgrades.md#2022-08-01) or older: | **Codes** | `e.error.payment_intent.charges.data[0].outcome.type == 'blocked'` | | **Problème** | | *Radar* (Radar for Fraud Teams helps you fine-tune how Radar operates, get fraud insights on suspicious charges, and assess your fraud management performance from a unified dashboard), 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 : - [Optimisez votre intégration de Radar](https://docs.stripe.com/radar/optimize-fraud-signals.md) pour collecter des informations plus détaillées. - Pour obtenir des éléments de formulaire optimisés préconfigurés, utilisez [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) ou [Stripe Elements](https://docs.stripe.com/payments/elements.md). Les clients de *Radar for Fraud Teams* (Radar for Fraud Teams helps you fine-tune how Radar operates, get fraud insights on suspicious charges, and assess your fraud management performance from a unified dashboard) disposent des options supplémentaires suivantes : - Pour exempter un paiement spécifique, ajoutez-le à votre liste blanche. (Radar for Fraud Teams) - Pour modifier votre seuil de tolérance au risque, réajustez les [paramètres de risque](https://docs.stripe.com/radar/risk-settings.md). (Radar for Fraud Teams) - Pour modifier les critères de blocage des paiements, définissez des [règles personnalisées](https://docs.stripe.com/radar/rules.md). (Radar for Fraud Teams) Vous pouvez tester les paramètres de votre intégration à l’aide de [cartes de test qui permettent de simuler des fraudes](https://docs.stripe.com/radar/testing.md). Si vous avez défini des règles Radar personnalisées, suivez les conseils en matière de test décrits dans la [documentation de Radar](https://docs.stripe.com/radar/testing.md). | ### Paiement refusé par l’émetteur | | | | | **Type** | `stripe.CardError` | | **Codes** | `e.code == "card_declined"` | | **Problème** | L’émetteur de la carte a refusé le paiement. | | **Solutions** | Cette erreur peut se produire alors que votre intégration fonctionne correctement. Elle reflète 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 sur les codes de refus de paiement](https://docs.stripe.com/declines/codes.md) pour connaître les réponses adaptées à chaque code. Vous pouvez également effectuer les actions ci-après : - [Suivez nos recommandations pour limiter les refus de paiement des émetteurs](https://docs.stripe.com/declines/card.md#reducing-bank-declines). - Pour obtenir des éléments de formulaire préconfigurés qui puissent mettre en œuvre ces recommandations, utilisez [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) ou [Stripe Elements](https://docs.stripe.com/payments/elements.md). Analysez la façon dont votre intégration gère les refus de paiement à l’aide de [cartes de test qui permettent de simuler des paiements aboutis et refusés](https://docs.stripe.com/radar/testing.md). | ### Autres erreurs de paiement | | | | | **Type** | `stripe.CardError` | | **Problème** | Une autre erreur de paiement s’est produite. | | **Solutions** | 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](https://docs.stripe.com/error-codes.md) pour découvrir les réponses adaptées à chaque code. | ## Erreurs de requêtes invalides | | | | | **Type** | `stripe.InvalidRequestError` | | **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 en savoir plus à propos de ce problème, consultez la [documentation consacrée aux codes d’erreur](https://docs.stripe.com/error-codes.md). - 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** | `stripe.APIConnectionError` | | **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 indéterminé. Autrement dit, ne présumez pas qu’il a réussi ou qu’il a é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 résoudre les problèmes de connexion, vous pouvez effectuer les actions suivantes : - Lorsque vous créez ou mettez à jour un objet, utilisez une [clé d’idempotence](https://docs.stripe.com/api/idempotent_requests.md). 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](https://docs.stripe.com/error-low-level.md#idempotency). - Activez les [relances automatiques](https://github.com/stripe/stripe-java?tab=readme-ov-file#configuring-automatic-retries). 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** | `stripe.APIError` | | **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* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) 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. Pour configurer votre intégration de sorte à ce qu’elle soit capable de gérer des situations inhabituelles, reportez-vous à [cette section plus avancée consacrée aux erreurs de serveur](https://docs.stripe.com/error-low-level.md#server-errors). | ## Erreurs d’authentification | | | | | **Type** | `stripe.AuthenticationError` | | **Problème** | Stripe ne parvient pas à vous authentifier avec les informations que vous avez fournies. | | **Solutions** | - Utilisez la [clé API](https://docs.stripe.com/keys.md) appropriée. - Veillez à ne pas utiliser une clé que vous avez [« générée aléatoirement » ou révoquée](https://docs.stripe.com/keys.md#rolling-keys). | ## Erreurs d’idempotence | | | | | **Type** | `stripe.IdempotencyError` | | **Problème** | Vous avez utilisé une [clé d’idempotence](https://docs.stripe.com/api/idempotent_requests.md) 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** | `stripe.PermissionError` | | **Problème** | La clé API utilisée pour cette requête ne dispose pas des autorisations nécessaires. | | **Solutions** | - Assurez-vous de ne pas utiliser de [clé API restreinte](https://docs.stripe.com/keys-best-practices.md#limit-access) pour un service auquel elle n’a pas accès. - N’effectuez pas d’actions via le Dashboard tout en étant connecté avec un [rôle utilisateur](https://docs.stripe.com/get-started/account/teams/roles.md) pour lequel certains accès sont limités. | ## Erreurs de limite d’envoi | | | | | **Type** | `stripe.RateLimitError` | | **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](https://docs.stripe.com/rate-limits.md). - Si vous prévoyez une augmentation importante du trafic et que vous souhaitez demander une limite d’envoi plus souple, [contactez notre service Support](https://support.stripe.com/) en amont. | ## Erreurs de vérification de signature | | | | | **Type** | `stripe.SignatureVerificationError` | | **Problème** | Vous utilisez la [vérification de signature](https://docs.stripe.com/webhooks.md#verify-events) de *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) et n’avez pas pu vérifier l’authenticité d’un événement webhook. | | **Solutions** | 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](https://docs.stripe.com/webhooks.md#verify-events) pour en savoir plus. Veillez plus particulièrement à utiliser la clé secrète de l’endpoint adaptée (qui n’est pas votre clé API). | Dans la bibliothèque PHP de Stripe, chaque type d’erreur appartient à sa propre classe. Référez-vous à la documentation concernant chaque classe pour obtenir des conseils quant aux réponses à apporter. | Nom | Classe | Description | | ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Erreur de paiement | [Stripe\Exception\CardException](https://docs.stripe.com/error-handling.md#payment-errors) | Une erreur est survenue lors d’un paiement. Voici les cas possibles : - [Paiement bloqué pour suspicion de fraude](https://docs.stripe.com/error-handling.md#payment-blocked) - [Paiement refusé par l’émetteur](https://docs.stripe.com/error-handling.md#payment-declined). - [Autres erreurs de paiement](https://docs.stripe.com/error-handling.md#other-payment-errors). | | Erreur de requête non valide | [Stripe\Exception\InvalidRequestException](https://docs.stripe.com/error-handling.md#invalid-request-errors) | Vous avez effectué un appel à l’API contenant des paramètres incorrects, dont l’état est incompatible ou d’une manière non valide. | | Erreur de connexion | [Stripe\Exception\ApiConnectionException](https://docs.stripe.com/error-handling.md#connection-errors) | Un problème réseau est survenu entre votre serveur et Stripe. | | Erreur d’API | [Stripe\Exception\ApiErrorException](https://docs.stripe.com/error-handling.md#api-errors) | Un problème est survenu au niveau de Stripe (cas rare). | | Erreur d’authentification | [Stripe\Exception\AuthenticationException](https://docs.stripe.com/error-handling.md#authentication-errors) | Stripe ne parvient pas à vous authentifier avec les informations que vous avez fournies. | | Erreur d’idempotence | [Stripe\Exception\IdempotencyException](https://docs.stripe.com/error-handling.md#idempotency-errors) | Vous avez utilisé une [clé d’idempotence](https://docs.stripe.com/api/idempotent_requests.md) pour effectuer une action inattendue (par exemple, relancer une requête en transmettant des paramètres différents). | | Erreur d’autorisation | [Stripe\Exception\PermissionException](https://docs.stripe.com/error-handling.md#permission-errors) | La clé API utilisée pour cette requête ne dispose pas des autorisations nécessaires. | | Erreur de limite d’envoi | [Stripe\Exception\RateLimitException](https://docs.stripe.com/error-handling.md#rate-limit-errors) | Vous avez effectué trop d’appels à l’API dans le délai imparti. | | Erreur de vérification de signature | [Stripe\Exception\SignatureVerificationException](https://docs.stripe.com/error-handling.md#signature-verification-errors) | Vous utilisez la [vérification de signature](https://docs.stripe.com/webhooks.md#verify-events) de *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) et n’avez pas pu vérifier l’authenticité d’un événement webhook. | ## Erreurs de paiement Toutes les dispositions de cette section s’appliquent également aux paiements autres que par carte. Pour des raisons historiques, les erreurs de paiement sont de type [Stripe\Exception\CardException](https://docs.stripe.com/error-handling.md#card-error). Dans les faits, toutefois, ils peuvent représenter un problème avec n’importe quel paiement, quel que soit le moyen de paiement. 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 : - [Paiement bloqué pour suspicion de fraude](https://docs.stripe.com/error-handling.md#payment-blocked) - [Paiement refusé par l’émetteur](https://docs.stripe.com/error-handling.md#payment-declined) - [Autres erreurs de paiement](https://docs.stripe.com/error-handling.md#other-payment-errors) Pour pouvoir distinguer ces catégories ou en savoir davantage sur la façon d’y répondre, reportez-vous aux pages relatives aux [codes d’erreur](https://docs.stripe.com/error-codes.md), aux [codes de refus de paiement](https://docs.stripe.com/declines/codes.md) et aux [résultats du paiement](https://docs.stripe.com/api/charges/object.md#charge_object-outcome). (Pour rechercher un résultat de paiement à partir d’un objet Error, récupérez d’abord le [PaymentIntent correspondant](https://docs.stripe.com/api/errors.md#errors-payment_intent) ainsi que le [dernier paiement que ce dernier a créé](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-latest_charge). L’exemple ci-après illustre cette étape.) #### PHP ```php >'); function example_function($args) { try { $stripe->paymentIntents->create($args); } catch(\Stripe\Exception\CardException $e) { $charge = $stripe->charge->retrieve($e->getError()->payment_intent->latest_charge); if ($charge->outcome->type == 'blocked') { error_log('Blocked for suspected fraud.'); } elseif ($e->getError()->code == 'expired_card') { error_log('Card expired.'); } elseif ($e->getError()->code == 'card_declined') { error_log('Declined by the issuer.'); } else { error_log('Other card error.'); } } } ``` Utilisateurs de la version du [01/08/2022](https://docs.stripe.com/upgrades.md#2022-08-01) de l’API ou d’une version antérieure : (Pour rechercher un résultat de paiement à partir d’un objet Error, récupérez d’abord le [PaymentIntent correspondant](https://docs.stripe.com/api/errors.md#errors-payment_intent) ainsi que le [dernier paiement que ce dernier a créé](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-charges-data). L’exemple ci-après illustre cette étape.) #### PHP ```php >'); function example_function($args) { try { $stripe->paymentIntents->create($args); } catch(\Stripe\Exception\CardException $e) { if ($e->getError()->payment_intent->charges->data[0]->outcome->type == 'blocked') { error_log('Blocked for suspected fraud.'); } elseif ($e->getError()->code == 'expired_card') { error_log('Card expired.'); } elseif ($e->getError()->code == 'card_declined') { error_log('Declined by the issuer.'); } else { error_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 : - [Simulation de paiements bloqués en raison d’un risque de fraude](https://docs.stripe.com/testing.md#fraud-prevention) - [Simulation de refus de paiements et d’autres erreurs de carte](https://docs.stripe.com/testing.md#declined-payments) Le code de test ci-dessous montre quelques possibilités. #### Erreur à déclencher - Bloqué pour suspicion de fraude #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_radarBlock', // Cette carte de test est toujours bloquée lorsqu’elle est utilisée dans un environnement de test pour suspicion de fraude. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Payment blocked for suspected fraud. ``` #### Erreur à déclencher - Refusé par l'émetteur #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_visa_chargeDeclined', // Cette carte de test est toujours refusée par l’émetteur lorsqu’elle est utilisée dans un environnement de test. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Payment declined by the issuer ``` #### Erreur à déclencher - Carte expirée #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedExpiredCard', // Cette carte de test échoue toujours pour cause d’expiration lorsqu’elle est utilisée dans un environnement de test. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Card expired. ``` #### Erreur à déclencher - Autre erreur de carte #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedProcessingError', // Cette carte de test échoue systématiquement en raison d’une erreur de traitement lorsqu’elle est utilisée dans un environnement de test. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Other payment error. ``` ### Paiement bloqué pour suspicion de fraude | | | | | **Type** | `Stripe\Exception\CardException` | | **Codes** | ```php $charge = $stripe->charge->retrieve($e->getError()->payment_intent->latest_charge); $charge->outcome->type == 'blocked' ``` Users on API version [2022-08-01](https://docs.stripe.com/upgrades.md#2022-08-01) or older: | **Codes** | `$e->getError()->payment_intent->charges->data[0]->outcome->type == 'blocked'` | | **Problème** | | *Radar* (Radar for Fraud Teams helps you fine-tune how Radar operates, get fraud insights on suspicious charges, and assess your fraud management performance from a unified dashboard), 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 : - [Optimisez votre intégration de Radar](https://docs.stripe.com/radar/optimize-fraud-signals.md) pour collecter des informations plus détaillées. - Pour obtenir des éléments de formulaire optimisés préconfigurés, utilisez [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) ou [Stripe Elements](https://docs.stripe.com/payments/elements.md). Les clients de *Radar for Fraud Teams* (Radar for Fraud Teams helps you fine-tune how Radar operates, get fraud insights on suspicious charges, and assess your fraud management performance from a unified dashboard) disposent des options supplémentaires suivantes : - Pour exempter un paiement spécifique, ajoutez-le à votre liste blanche. (Radar for Fraud Teams) - Pour modifier votre seuil de tolérance au risque, réajustez les [paramètres de risque](https://docs.stripe.com/radar/risk-settings.md). (Radar for Fraud Teams) - Pour modifier les critères de blocage des paiements, définissez des [règles personnalisées](https://docs.stripe.com/radar/rules.md). (Radar for Fraud Teams) Vous pouvez tester les paramètres de votre intégration à l’aide de [cartes de test qui permettent de simuler des fraudes](https://docs.stripe.com/radar/testing.md). Si vous avez défini des règles Radar personnalisées, suivez les conseils en matière de test décrits dans la [documentation de Radar](https://docs.stripe.com/radar/testing.md). | ### Paiement refusé par l’émetteur | | | | | **Type** | `Stripe\Exception\CardException` | | **Codes** | `$e->getError()->code == "card_declined"` | | **Problème** | L’émetteur de la carte a refusé le paiement. | | **Solutions** | Cette erreur peut se produire alors que votre intégration fonctionne correctement. Elle reflète 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 sur les codes de refus de paiement](https://docs.stripe.com/declines/codes.md) pour connaître les réponses adaptées à chaque code. Vous pouvez également effectuer les actions ci-après : - [Suivez nos recommandations pour limiter les refus de paiement des émetteurs](https://docs.stripe.com/declines/card.md#reducing-bank-declines). - Pour obtenir des éléments de formulaire préconfigurés qui puissent mettre en œuvre ces recommandations, utilisez [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) ou [Stripe Elements](https://docs.stripe.com/payments/elements.md). Analysez la façon dont votre intégration gère les refus de paiement à l’aide de [cartes de test qui permettent de simuler des paiements aboutis et refusés](https://docs.stripe.com/radar/testing.md). | ### Autres erreurs de paiement | | | | | **Type** | `Stripe\Exception\CardException` | | **Problème** | Une autre erreur de paiement s’est produite. | | **Solutions** | 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](https://docs.stripe.com/error-codes.md) pour découvrir les réponses adaptées à chaque code. | ## Erreurs de requêtes invalides | | | | | **Type** | `Stripe\Exception\InvalidRequestException` | | **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 en savoir plus à propos de ce problème, consultez la [documentation consacrée aux codes d’erreur](https://docs.stripe.com/error-codes.md). - Pour des raisons pratiques, vous pouvez suivre le lien `e->getError()->doc_url` pour en savoir plus sur le code d’erreur. - Si l’erreur implique un paramètre précis, utilisez `e->getError()->param` pour savoir duquel il s’agit. | ## Erreurs de connexion | | | | | **Type** | `Stripe\Exception\ApiConnectionException` | | **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 indéterminé. Autrement dit, ne présumez pas qu’il a réussi ou qu’il a é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 résoudre les problèmes de connexion, vous pouvez effectuer les actions suivantes : - Lorsque vous créez ou mettez à jour un objet, utilisez une [clé d’idempotence](https://docs.stripe.com/api/idempotent_requests.md). 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](https://docs.stripe.com/error-low-level.md#idempotency). - Activez les [relances automatiques](https://github.com/stripe/stripe-java?tab=readme-ov-file#configuring-automatic-retries). 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** | `Stripe\Exception\APIException` | | **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* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) 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. Pour configurer votre intégration de sorte à ce qu’elle soit capable de gérer des situations inhabituelles, reportez-vous à [cette section plus avancée consacrée aux erreurs de serveur](https://docs.stripe.com/error-low-level.md#server-errors). | ## Erreurs d’authentification | | | | | **Type** | `Stripe\Exception\AuthenticationException` | | **Problème** | Stripe ne parvient pas à vous authentifier avec les informations que vous avez fournies. | | **Solutions** | - Utilisez la [clé API](https://docs.stripe.com/keys.md) appropriée. - Veillez à ne pas utiliser une clé que vous avez [« générée aléatoirement » ou révoquée](https://docs.stripe.com/keys.md#rolling-keys). | ## Erreurs d’idempotence | | | | | **Type** | `Stripe\Exception\IdempotencyException` | | **Problème** | Vous avez utilisé une [clé d’idempotence](https://docs.stripe.com/api/idempotent_requests.md) 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** | `Stripe\Exception\PermissionException` | | **Problème** | La clé API utilisée pour cette requête ne dispose pas des autorisations nécessaires. | | **Solutions** | - Assurez-vous de ne pas utiliser de [clé API restreinte](https://docs.stripe.com/keys-best-practices.md#limit-access) pour un service auquel elle n’a pas accès. - N’effectuez pas d’actions via le Dashboard tout en étant connecté avec un [rôle utilisateur](https://docs.stripe.com/get-started/account/teams/roles.md) pour lequel certains accès sont limités. | ## Erreurs de limite d’envoi | | | | | **Type** | `Stripe\Exception\RateLimitException` | | **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](https://docs.stripe.com/rate-limits.md). - Si vous prévoyez une augmentation importante du trafic et que vous souhaitez demander une limite d’envoi plus souple, [contactez notre service Support](https://support.stripe.com/) en amont. | ## Erreurs de vérification de signature | | | | | **Type** | `Stripe\Exception\SignatureVerificationException` | | **Problème** | Vous utilisez la [vérification de signature](https://docs.stripe.com/webhooks.md#verify-events) de *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) et n’avez pas pu vérifier l’authenticité d’un événement webhook. | | **Solutions** | 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](https://docs.stripe.com/webhooks.md#verify-events) pour en savoir plus. Veillez plus particulièrement à utiliser la clé secrète de l’endpoint adaptée (qui n’est pas votre clé API). | Dans la bibliothèque Java de Stripe, chaque type d’erreur appartient à sa propre classe. Référez-vous à la documentation concernant chaque classe pour obtenir des conseils quant aux réponses à apporter. | Nom | Classe | Description | | ----------------------------------- | --------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Erreur de paiement | [CardException](https://docs.stripe.com/error-handling.md#payment-errors) | Une erreur est survenue lors d’un paiement. Voici les cas possibles : - [Paiement bloqué pour suspicion de fraude](https://docs.stripe.com/error-handling.md#payment-blocked) - [Paiement refusé par l’émetteur](https://docs.stripe.com/error-handling.md#payment-declined). - [Autres erreurs de paiement](https://docs.stripe.com/error-handling.md#other-payment-errors). | | Erreur de requête non valide | [InvalidRequestException](https://docs.stripe.com/error-handling.md#invalid-request-errors) | Vous avez effectué un appel à l’API contenant des paramètres incorrects, dont l’état est incompatible ou d’une manière non valide. | | Erreur de connexion | [ApiConnectionException](https://docs.stripe.com/error-handling.md#connection-errors) | Un problème réseau est survenu entre votre serveur et Stripe. | | Erreur d’API | [APIException](https://docs.stripe.com/error-handling.md#api-errors) | Un problème est survenu au niveau de Stripe (cas rare). | | Erreur d’authentification | [AuthenticationException](https://docs.stripe.com/error-handling.md#authentication-errors) | Stripe ne parvient pas à vous authentifier avec les informations que vous avez fournies. | | Erreur d’idempotence | [IdempotencyException](https://docs.stripe.com/error-handling.md#idempotency-errors) | Vous avez utilisé une [clé d’idempotence](https://docs.stripe.com/api/idempotent_requests.md) pour effectuer une action inattendue (par exemple, relancer une requête en transmettant des paramètres différents). | | Erreur d’autorisation | [PermissionException](https://docs.stripe.com/error-handling.md#permission-errors) | La clé API utilisée pour cette requête ne dispose pas des autorisations nécessaires. | | Erreur de limite d’envoi | [RateLimitException](https://docs.stripe.com/error-handling.md#rate-limit-errors) | Vous avez effectué trop d’appels à l’API dans le délai imparti. | | Erreur de vérification de signature | [SignatureVerificationException](https://docs.stripe.com/error-handling.md#signature-verification-errors) | Vous utilisez la [vérification de signature](https://docs.stripe.com/webhooks.md#verify-events) de *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) et n’avez pas pu vérifier l’authenticité d’un événement webhook. | ## Erreurs de paiement Toutes les dispositions de cette section s’appliquent également aux paiements autres que par carte. Pour des raisons historiques, les erreurs de paiement sont de type [CardException](https://docs.stripe.com/error-handling.md#card-error). Dans les faits, toutefois, ils peuvent représenter un problème avec n’importe quel paiement, quel que soit le moyen de paiement. 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 : - [Paiement bloqué pour suspicion de fraude](https://docs.stripe.com/error-handling.md#payment-blocked) - [Paiement refusé par l’émetteur](https://docs.stripe.com/error-handling.md#payment-declined) - [Autres erreurs de paiement](https://docs.stripe.com/error-handling.md#other-payment-errors) Pour pouvoir distinguer ces catégories ou en savoir davantage sur la façon d’y répondre, reportez-vous aux pages relatives aux [codes d’erreur](https://docs.stripe.com/error-codes.md), aux [codes de refus de paiement](https://docs.stripe.com/declines/codes.md) et aux [résultats du paiement](https://docs.stripe.com/api/charges/object.md#charge_object-outcome). (Pour rechercher un résultat de paiement à partir d’un objet Error, récupérez d’abord le [PaymentIntent correspondant](https://docs.stripe.com/api/errors.md#errors-payment_intent) ainsi que le [dernier paiement que ce dernier a créé](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-latest_charge). L’exemple ci-après illustre cette étape.) #### PHP ```php >'); function example_function($args) { try { $stripe->paymentIntents->create($args); } catch(\Stripe\Exception\CardException $e) { $charge = $stripe->charge->retrieve($e->getError()->payment_intent->latest_charge); if ($charge->outcome->type == 'blocked') { error_log('Blocked for suspected fraud.'); } elseif ($e->getError()->code == 'expired_card') { error_log('Card expired.'); } elseif ($e->getError()->code == 'card_declined') { error_log('Declined by the issuer.'); } else { error_log('Other card error.'); } } } ``` Utilisateurs de la version du [01/08/2022](https://docs.stripe.com/upgrades.md#2022-08-01) de l’API ou d’une version antérieure : (Pour rechercher un résultat de paiement à partir d’un objet Error, récupérez d’abord le [PaymentIntent correspondant](https://docs.stripe.com/api/errors.md#errors-payment_intent) ainsi que le [dernier paiement que ce dernier a créé](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-charges-data). L’exemple ci-après illustre cette étape.) #### PHP ```php >'); function example_function($args) { try { $stripe->paymentIntents->create($args); } catch(\Stripe\Exception\CardException $e) { if ($e->getError()->payment_intent->charges->data[0]->outcome->type == 'blocked') { error_log('Blocked for suspected fraud.'); } elseif ($e->getError()->code == 'expired_card') { error_log('Card expired.'); } elseif ($e->getError()->code == 'card_declined') { error_log('Declined by the issuer.'); } else { error_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 : - [Simulation de paiements bloqués en raison d’un risque de fraude](https://docs.stripe.com/testing.md#fraud-prevention) - [Simulation de refus de paiements et d’autres erreurs de carte](https://docs.stripe.com/testing.md#declined-payments) Le code de test ci-dessous montre quelques possibilités. #### Erreur à déclencher - Bloqué pour suspicion de fraude #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_radarBlock', // Cette carte de test est toujours bloquée lorsqu’elle est utilisée dans un environnement de test pour suspicion de fraude. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Payment blocked for suspected fraud. ``` #### Erreur à déclencher - Refusé par l'émetteur #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_visa_chargeDeclined', // Cette carte de test est toujours refusée par l’émetteur lorsqu’elle est utilisée dans un environnement de test. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Payment declined by the issuer ``` #### Erreur à déclencher - Carte expirée #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedExpiredCard', // Cette carte de test échoue toujours pour cause d’expiration lorsqu’elle est utilisée dans un environnement de test. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Card expired. ``` #### Erreur à déclencher - Autre erreur de carte #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedProcessingError', // Cette carte de test échoue systématiquement en raison d’une erreur de traitement lorsqu’elle est utilisée dans un environnement de test. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Other payment error. ``` ### Paiement bloqué pour suspicion de fraude | | | | | **Type** | `CardException` | | **Codes** | ```java Charge charge = Charge.retrieve(ex.getStripeError() .getPaymentIntent() .getLatestCharge()); charge.getOutcome().getType() == "blocked" ``` Users on API version [2022-08-01](https://docs.stripe.com/upgrades.md#2022-08-01) or older: | **Codes** | `ex.getStripeError().getPaymentIntent().getCharges().getData().get(0).getOutcome().getType() == "blocked"` | | **Problème** | | *Radar* (Radar for Fraud Teams helps you fine-tune how Radar operates, get fraud insights on suspicious charges, and assess your fraud management performance from a unified dashboard), 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 : - [Optimisez votre intégration de Radar](https://docs.stripe.com/radar/optimize-fraud-signals.md) pour collecter des informations plus détaillées. - Pour obtenir des éléments de formulaire optimisés préconfigurés, utilisez [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) ou [Stripe Elements](https://docs.stripe.com/payments/elements.md). Les clients de *Radar for Fraud Teams* (Radar for Fraud Teams helps you fine-tune how Radar operates, get fraud insights on suspicious charges, and assess your fraud management performance from a unified dashboard) disposent des options supplémentaires suivantes : - Pour exempter un paiement spécifique, ajoutez-le à votre liste blanche. (Radar for Fraud Teams) - Pour modifier votre seuil de tolérance au risque, réajustez les [paramètres de risque](https://docs.stripe.com/radar/risk-settings.md). (Radar for Fraud Teams) - Pour modifier les critères de blocage des paiements, définissez des [règles personnalisées](https://docs.stripe.com/radar/rules.md). (Radar for Fraud Teams) Vous pouvez tester les paramètres de votre intégration à l’aide de [cartes de test qui permettent de simuler des fraudes](https://docs.stripe.com/radar/testing.md). Si vous avez défini des règles Radar personnalisées, suivez les conseils en matière de test décrits dans la [documentation de Radar](https://docs.stripe.com/radar/testing.md). | ### Paiement refusé par l’émetteur | | | | | **Type** | `CardException` | | **Codes** | `e.getCode() == "card_declined"` | | **Problème** | L’émetteur de la carte a refusé le paiement. | | **Solutions** | Cette erreur peut se produire alors que votre intégration fonctionne correctement. Elle reflète 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 sur les codes de refus de paiement](https://docs.stripe.com/declines/codes.md) pour connaître les réponses adaptées à chaque code. Vous pouvez également effectuer les actions ci-après : - [Suivez nos recommandations pour limiter les refus de paiement des émetteurs](https://docs.stripe.com/declines/card.md#reducing-bank-declines). - Pour obtenir des éléments de formulaire préconfigurés qui puissent mettre en œuvre ces recommandations, utilisez [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) ou [Stripe Elements](https://docs.stripe.com/payments/elements.md). Analysez la façon dont votre intégration gère les refus de paiement à l’aide de [cartes de test qui permettent de simuler des paiements aboutis et refusés](https://docs.stripe.com/radar/testing.md). | ### Autres erreurs de paiement | | | | | **Type** | `CardException` | | **Problème** | Une autre erreur de paiement s’est produite. | | **Solutions** | 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](https://docs.stripe.com/error-codes.md) pour découvrir les réponses adaptées à chaque code. | ## Erreurs de requêtes invalides | | | | | **Type** | `InvalidRequestException` | | **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 en savoir plus à propos de ce problème, consultez la [documentation consacrée aux codes d’erreur](https://docs.stripe.com/error-codes.md). - Pour des raisons pratiques, vous pouvez suivre le lien `e.getDocUrl()` pour en savoir plus sur le code d’erreur. - Si l’erreur implique un paramètre précis, utilisez `e.getParam()` pour savoir duquel il s’agit. | ## Erreurs de connexion | | | | | **Type** | `APIConnectionException` | | **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 indéterminé. Autrement dit, ne présumez pas qu’il a réussi ou qu’il a é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 résoudre les problèmes de connexion, vous pouvez effectuer les actions suivantes : - Lorsque vous créez ou mettez à jour un objet, utilisez une [clé d’idempotence](https://docs.stripe.com/api/idempotent_requests.md). 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](https://docs.stripe.com/error-low-level.md#idempotency). - Activez les [relances automatiques](https://github.com/stripe/stripe-java?tab=readme-ov-file#configuring-automatic-retries). 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** | `APIException` | | **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* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) 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. Pour configurer votre intégration de sorte à ce qu’elle soit capable de gérer des situations inhabituelles, reportez-vous à [cette section plus avancée consacrée aux erreurs de serveur](https://docs.stripe.com/error-low-level.md#server-errors). | ## Erreurs d’authentification | | | | | **Type** | `AuthenticationException` | | **Problème** | Stripe ne parvient pas à vous authentifier avec les informations que vous avez fournies. | | **Solutions** | - Utilisez la [clé API](https://docs.stripe.com/keys.md) appropriée. - Veillez à ne pas utiliser une clé que vous avez [« générée aléatoirement » ou révoquée](https://docs.stripe.com/keys.md#rolling-keys). | ## Erreurs d’idempotence | | | | | **Type** | `IdempotencyException` | | **Problème** | Vous avez utilisé une [clé d’idempotence](https://docs.stripe.com/api/idempotent_requests.md) 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** | `PermissionException` | | **Problème** | La clé API utilisée pour cette requête ne dispose pas des autorisations nécessaires. | | **Solutions** | - Assurez-vous de ne pas utiliser de [clé API restreinte](https://docs.stripe.com/keys-best-practices.md#limit-access) pour un service auquel elle n’a pas accès. - N’effectuez pas d’actions via le Dashboard tout en étant connecté avec un [rôle utilisateur](https://docs.stripe.com/get-started/account/teams/roles.md) pour lequel certains accès sont limités. | ## Erreurs de limite d’envoi | | | | | **Type** | `RateLimitException` | | **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](https://docs.stripe.com/rate-limits.md). - Si vous prévoyez une augmentation importante du trafic et que vous souhaitez demander une limite d’envoi plus souple, [contactez notre service Support](https://support.stripe.com/) en amont. | ## Erreurs de vérification de signature | | | | | **Type** | `SignatureVerificationException` | | **Problème** | Vous utilisez la [vérification de signature](https://docs.stripe.com/webhooks.md#verify-events) de *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) et n’avez pas pu vérifier l’authenticité d’un événement webhook. | | **Solutions** | 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](https://docs.stripe.com/webhooks.md#verify-events) pour en savoir plus. Veillez plus particulièrement à utiliser la clé secrète de l’endpoint adaptée (qui n’est pas votre clé API). | 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. | Nom | Type | Description | | ----------------------------------- | ----------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Erreur de paiement | [StripeCardError](https://docs.stripe.com/error-handling.md#payment-errors) | Une erreur est survenue lors d’un paiement. Voici les cas possibles : - [Paiement bloqué pour suspicion de fraude](https://docs.stripe.com/error-handling.md#payment-blocked) - [Paiement refusé par l’émetteur](https://docs.stripe.com/error-handling.md#payment-declined). - [Autres erreurs de paiement](https://docs.stripe.com/error-handling.md#other-payment-errors). | | Erreur de requête non valide | [StripeInvalidRequestError](https://docs.stripe.com/error-handling.md#invalid-request-errors) | Vous avez effectué un appel à l’API contenant des paramètres incorrects, dont l’état est incompatible ou d’une manière non valide. | | Erreur de connexion | [StripeConnectionError](https://docs.stripe.com/error-handling.md#connection-errors) | Un problème réseau est survenu entre votre serveur et Stripe. | | Erreur d’API | [StripeAPIError](https://docs.stripe.com/error-handling.md#api-errors) | Un problème est survenu au niveau de Stripe (cas rare). | | Erreur d’authentification | [StripeAuthenticationError](https://docs.stripe.com/error-handling.md#authentication-errors) | Stripe ne parvient pas à vous authentifier avec les informations que vous avez fournies. | | Erreur d’idempotence | [StripeIdempotencyError](https://docs.stripe.com/error-handling.md#idempotency-errors) | Vous avez utilisé une [clé d’idempotence](https://docs.stripe.com/api/idempotent_requests.md) pour effectuer une action inattendue (par exemple, relancer une requête en transmettant des paramètres différents). | | Erreur d’autorisation | [StripePermissionError](https://docs.stripe.com/error-handling.md#permission-errors) | La clé API utilisée pour cette requête ne dispose pas des autorisations nécessaires. | | Erreur de limite d’envoi | [StripeRateLimitError](https://docs.stripe.com/error-handling.md#rate-limit-errors) | Vous avez effectué trop d’appels à l’API dans le délai imparti. | | Erreur de vérification de signature | [StripeSignatureVerificationError](https://docs.stripe.com/error-handling.md#signature-verification-errors) | Vous utilisez la [vérification de signature](https://docs.stripe.com/webhooks.md#verify-events) de *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) et n’avez pas pu vérifier l’authenticité d’un événement webhook. | ## Erreurs de paiement Toutes les dispositions de cette section s’appliquent également aux paiements autres que par carte. Pour des raisons historiques, les erreurs de paiement sont de type [StripeCardError](https://docs.stripe.com/error-handling.md#card-error). Dans les faits, toutefois, ils peuvent représenter un problème avec n’importe quel paiement, quel que soit le moyen de paiement. 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 : - [Paiement bloqué pour suspicion de fraude](https://docs.stripe.com/error-handling.md#payment-blocked) - [Paiement refusé par l’émetteur](https://docs.stripe.com/error-handling.md#payment-declined) - [Autres erreurs de paiement](https://docs.stripe.com/error-handling.md#other-payment-errors) Pour pouvoir distinguer ces catégories ou en savoir davantage sur la façon d’y répondre, reportez-vous aux pages relatives aux [codes d’erreur](https://docs.stripe.com/error-codes.md), aux [codes de refus de paiement](https://docs.stripe.com/declines/codes.md) et aux [résultats du paiement](https://docs.stripe.com/api/charges/object.md#charge_object-outcome). (Pour rechercher un résultat de paiement à partir d’un objet Error, récupérez d’abord le [PaymentIntent correspondant](https://docs.stripe.com/api/errors.md#errors-payment_intent) ainsi que le [dernier paiement que ce dernier a créé](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-latest_charge). L’exemple ci-après illustre cette étape.) #### PHP ```php >'); function example_function($args) { try { $stripe->paymentIntents->create($args); } catch(\Stripe\Exception\CardException $e) { $charge = $stripe->charge->retrieve($e->getError()->payment_intent->latest_charge); if ($charge->outcome->type == 'blocked') { error_log('Blocked for suspected fraud.'); } elseif ($e->getError()->code == 'expired_card') { error_log('Card expired.'); } elseif ($e->getError()->code == 'card_declined') { error_log('Declined by the issuer.'); } else { error_log('Other card error.'); } } } ``` Utilisateurs de la version du [01/08/2022](https://docs.stripe.com/upgrades.md#2022-08-01) de l’API ou d’une version antérieure : (Pour rechercher un résultat de paiement à partir d’un objet Error, récupérez d’abord le [PaymentIntent correspondant](https://docs.stripe.com/api/errors.md#errors-payment_intent) ainsi que le [dernier paiement que ce dernier a créé](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-charges-data). L’exemple ci-après illustre cette étape.) #### PHP ```php >'); function example_function($args) { try { $stripe->paymentIntents->create($args); } catch(\Stripe\Exception\CardException $e) { if ($e->getError()->payment_intent->charges->data[0]->outcome->type == 'blocked') { error_log('Blocked for suspected fraud.'); } elseif ($e->getError()->code == 'expired_card') { error_log('Card expired.'); } elseif ($e->getError()->code == 'card_declined') { error_log('Declined by the issuer.'); } else { error_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 : - [Simulation de paiements bloqués en raison d’un risque de fraude](https://docs.stripe.com/testing.md#fraud-prevention) - [Simulation de refus de paiements et d’autres erreurs de carte](https://docs.stripe.com/testing.md#declined-payments) Le code de test ci-dessous montre quelques possibilités. #### Erreur à déclencher - Bloqué pour suspicion de fraude #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_radarBlock', // Cette carte de test est toujours bloquée lorsqu’elle est utilisée dans un environnement de test pour suspicion de fraude. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Payment blocked for suspected fraud. ``` #### Erreur à déclencher - Refusé par l'émetteur #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_visa_chargeDeclined', // Cette carte de test est toujours refusée par l’émetteur lorsqu’elle est utilisée dans un environnement de test. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Payment declined by the issuer ``` #### Erreur à déclencher - Carte expirée #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedExpiredCard', // Cette carte de test échoue toujours pour cause d’expiration lorsqu’elle est utilisée dans un environnement de test. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Card expired. ``` #### Erreur à déclencher - Autre erreur de carte #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedProcessingError', // Cette carte de test échoue systématiquement en raison d’une erreur de traitement lorsqu’elle est utilisée dans un environnement de test. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Other payment error. ``` ### Paiement bloqué pour suspicion de fraude | | | | | **Type** | `StripeCardError` | | **Codes** | ```javascript const charge = await stripe.charges.retrieve(e.payment_intent.latest_charge) charge.outcome.type === 'blocked' ``` Users on API version [2022-08-01](https://docs.stripe.com/upgrades.md#2022-08-01) or older: | **Codes** | `e.payment_intent.charges.data[0].outcome.type === 'blocked'` | | **Problème** | | *Radar* (Radar for Fraud Teams helps you fine-tune how Radar operates, get fraud insights on suspicious charges, and assess your fraud management performance from a unified dashboard), 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 : - [Optimisez votre intégration de Radar](https://docs.stripe.com/radar/optimize-fraud-signals.md) pour collecter des informations plus détaillées. - Pour obtenir des éléments de formulaire optimisés préconfigurés, utilisez [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) ou [Stripe Elements](https://docs.stripe.com/payments/elements.md). Les clients de *Radar for Fraud Teams* (Radar for Fraud Teams helps you fine-tune how Radar operates, get fraud insights on suspicious charges, and assess your fraud management performance from a unified dashboard) disposent des options supplémentaires suivantes : - Pour exempter un paiement spécifique, ajoutez-le à votre liste blanche. (Radar for Fraud Teams) - Pour modifier votre seuil de tolérance au risque, réajustez les [paramètres de risque](https://docs.stripe.com/radar/risk-settings.md). (Radar for Fraud Teams) - Pour modifier les critères de blocage des paiements, définissez des [règles personnalisées](https://docs.stripe.com/radar/rules.md). (Radar for Fraud Teams) Vous pouvez tester les paramètres de votre intégration à l’aide de [cartes de test qui permettent de simuler des fraudes](https://docs.stripe.com/radar/testing.md). Si vous avez défini des règles Radar personnalisées, suivez les conseils en matière de test décrits dans la [documentation de Radar](https://docs.stripe.com/radar/testing.md). | ### Paiement refusé par l’émetteur | | | | | **Type** | `StripeCardError` | | **Codes** | `e.code === 'card_declined'` | | **Problème** | L’émetteur de la carte a refusé le paiement. | | **Solutions** | Cette erreur peut se produire alors que votre intégration fonctionne correctement. Elle reflète 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 sur les codes de refus de paiement](https://docs.stripe.com/declines/codes.md) pour connaître les réponses adaptées à chaque code. Vous pouvez également effectuer les actions ci-après : - [Suivez nos recommandations pour limiter les refus de paiement des émetteurs](https://docs.stripe.com/declines/card.md#reducing-bank-declines). - Pour obtenir des éléments de formulaire préconfigurés qui puissent mettre en œuvre ces recommandations, utilisez [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) ou [Stripe Elements](https://docs.stripe.com/payments/elements.md). Analysez la façon dont votre intégration gère les refus de paiement à l’aide de [cartes de test qui permettent de simuler des paiements aboutis et refusés](https://docs.stripe.com/radar/testing.md). | ### Autres erreurs de paiement | | | | | **Type** | `StripeCardError` | | **Problème** | Une autre erreur de paiement s’est produite. | | **Solutions** | 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](https://docs.stripe.com/error-codes.md) 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 en savoir plus à propos de ce problème, consultez la [documentation consacrée aux codes d’erreur](https://docs.stripe.com/error-codes.md). - 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 indéterminé. Autrement dit, ne présumez pas qu’il a réussi ou qu’il a é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 résoudre les problèmes de connexion, vous pouvez effectuer les actions suivantes : - Lorsque vous créez ou mettez à jour un objet, utilisez une [clé d’idempotence](https://docs.stripe.com/api/idempotent_requests.md). 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](https://docs.stripe.com/error-low-level.md#idempotency). - Activez les [relances automatiques](https://github.com/stripe/stripe-java?tab=readme-ov-file#configuring-automatic-retries). 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* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) 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. Pour configurer votre intégration de sorte à ce qu’elle soit capable de gérer des situations inhabituelles, reportez-vous à [cette section plus avancée consacrée aux erreurs de serveur](https://docs.stripe.com/error-low-level.md#server-errors). | ## Erreurs d’authentification | | | | | **Type** | `StripeAuthenticationError` | | **Problème** | Stripe ne parvient pas à vous authentifier avec les informations que vous avez fournies. | | **Solutions** | - Utilisez la [clé API](https://docs.stripe.com/keys.md) appropriée. - Veillez à ne pas utiliser une clé que vous avez [« générée aléatoirement » ou révoquée](https://docs.stripe.com/keys.md#rolling-keys). | ## Erreurs d’idempotence | | | | | **Type** | `StripeIdempotencyError` | | **Problème** | Vous avez utilisé une [clé d’idempotence](https://docs.stripe.com/api/idempotent_requests.md) 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** | - Assurez-vous de ne pas utiliser de [clé API restreinte](https://docs.stripe.com/keys-best-practices.md#limit-access) pour un service auquel elle n’a pas accès. - N’effectuez pas d’actions via le Dashboard tout en étant connecté avec un [rôle utilisateur](https://docs.stripe.com/get-started/account/teams/roles.md) pour lequel certains accès sont limités. | ## 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](https://docs.stripe.com/rate-limits.md). - Si vous prévoyez une augmentation importante du trafic et que vous souhaitez demander une limite d’envoi plus souple, [contactez notre service Support](https://support.stripe.com/) en amont. | ## Erreurs de vérification de signature | | | | | **Type** | `StripeSignatureVerificationError` | | **Problème** | Vous utilisez la [vérification de signature](https://docs.stripe.com/webhooks.md#verify-events) de *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) et n’avez pas pu vérifier l’authenticité d’un événement webhook. | | **Solutions** | 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](https://docs.stripe.com/webhooks.md#verify-events) pour en savoir plus. Veillez plus particulièrement à utiliser la clé secrète de l’endpoint adaptée (qui n’est pas votre clé API). | Dans la bibliothèque Go 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. | Nom | Type | Description | | ---------------------------- | -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Erreur de paiement | [stripe.ErrorTypeCard](https://docs.stripe.com/error-handling.md#payment-errors) | Une erreur est survenue lors d’un paiement. Voici les cas possibles : - [Paiement bloqué pour suspicion de fraude](https://docs.stripe.com/error-handling.md#payment-blocked) - [Paiement refusé par l’émetteur](https://docs.stripe.com/error-handling.md#payment-declined). - [Autres erreurs de paiement](https://docs.stripe.com/error-handling.md#other-payment-errors). | | Erreur de requête non valide | [stripe.ErrorTypeInvalidRequest](https://docs.stripe.com/error-handling.md#invalid-request-errors) | L’appel à l’API que vous avez effectué n’est pas valide. Cela peut être dû à l’une des raisons suivantes : - [Erreur de limitation d’envoi](https://docs.stripe.com/error-handling.md#rate-limiting) - [Erreur d’authentification](https://docs.stripe.com/error-handling.md#authentication-errors) - [Paramètres ou état non valides](https://docs.stripe.com/error-handling.md#invalid-parameters-or-state) | | Erreur d’API | [stripe.ErrorTypeAPI](https://docs.stripe.com/error-handling.md#api-errors) | Un problème est survenu au niveau de Stripe (cas rare). | | Erreur d’idempotence | [stripe.ErrorTypeIdempotency](https://docs.stripe.com/error-handling.md#idempotency-errors) | Vous avez utilisé une [clé d’idempotence](https://docs.stripe.com/api/idempotent_requests.md) pour effectuer une action inattendue (par exemple, relancer une requête en transmettant des paramètres différents). | ## Erreurs de carte Toutes les dispositions de cette section s’appliquent également aux paiements autres que par carte. Pour des raisons historiques, les erreurs de paiement sont de type [stripe.ErrorTypeCard](https://docs.stripe.com/error-handling.md#card-error). Dans les faits, toutefois, ils peuvent représenter un problème avec n’importe quel paiement, quel que soit le moyen de paiement. 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 : - [Paiement bloqué pour suspicion de fraude](https://docs.stripe.com/error-handling.md#payment-blocked) - [Paiement refusé par l’émetteur](https://docs.stripe.com/error-handling.md#payment-declined) - [Autres erreurs de paiement](https://docs.stripe.com/error-handling.md#other-payment-errors) Pour pouvoir distinguer ces catégories ou en savoir davantage sur la façon d’y répondre, reportez-vous aux pages relatives aux [codes d’erreur](https://docs.stripe.com/error-codes.md), aux [codes de refus de paiement](https://docs.stripe.com/declines/codes.md) et aux [résultats du paiement](https://docs.stripe.com/api/charges/object.md#charge_object-outcome). (Pour rechercher un résultat de paiement à partir d’un objet Error, récupérez d’abord le [PaymentIntent correspondant](https://docs.stripe.com/api/errors.md#errors-payment_intent) ainsi que le [dernier paiement que ce dernier a créé](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-latest_charge). L’exemple ci-après illustre cette étape.) #### PHP ```php >'); function example_function($args) { try { $stripe->paymentIntents->create($args); } catch(\Stripe\Exception\CardException $e) { $charge = $stripe->charge->retrieve($e->getError()->payment_intent->latest_charge); if ($charge->outcome->type == 'blocked') { error_log('Blocked for suspected fraud.'); } elseif ($e->getError()->code == 'expired_card') { error_log('Card expired.'); } elseif ($e->getError()->code == 'card_declined') { error_log('Declined by the issuer.'); } else { error_log('Other card error.'); } } } ``` Utilisateurs de la version du [01/08/2022](https://docs.stripe.com/upgrades.md#2022-08-01) de l’API ou d’une version antérieure : (Pour rechercher un résultat de paiement à partir d’un objet Error, récupérez d’abord le [PaymentIntent correspondant](https://docs.stripe.com/api/errors.md#errors-payment_intent) ainsi que le [dernier paiement que ce dernier a créé](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-charges-data). L’exemple ci-après illustre cette étape.) #### PHP ```php >'); function example_function($args) { try { $stripe->paymentIntents->create($args); } catch(\Stripe\Exception\CardException $e) { if ($e->getError()->payment_intent->charges->data[0]->outcome->type == 'blocked') { error_log('Blocked for suspected fraud.'); } elseif ($e->getError()->code == 'expired_card') { error_log('Card expired.'); } elseif ($e->getError()->code == 'card_declined') { error_log('Declined by the issuer.'); } else { error_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 : - [Simulation de paiements bloqués en raison d’un risque de fraude](https://docs.stripe.com/testing.md#fraud-prevention) - [Simulation de refus de paiements et d’autres erreurs de carte](https://docs.stripe.com/testing.md#declined-payments) Le code de test ci-dessous montre quelques possibilités. #### Erreur à déclencher - Bloqué pour suspicion de fraude #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_radarBlock', // Cette carte de test est toujours bloquée lorsqu’elle est utilisée dans un environnement de test pour suspicion de fraude. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Payment blocked for suspected fraud. ``` #### Erreur à déclencher - Refusé par l'émetteur #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_visa_chargeDeclined', // Cette carte de test est toujours refusée par l’émetteur lorsqu’elle est utilisée dans un environnement de test. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Payment declined by the issuer ``` #### Erreur à déclencher - Carte expirée #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedExpiredCard', // Cette carte de test échoue toujours pour cause d’expiration lorsqu’elle est utilisée dans un environnement de test. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Card expired. ``` #### Erreur à déclencher - Autre erreur de carte #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedProcessingError', // Cette carte de test échoue systématiquement en raison d’une erreur de traitement lorsqu’elle est utilisée dans un environnement de test. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Other payment error. ``` ### Bloqué pour suspicion de fraude | | | | | **Type** | `stripe.ErrorTypeCard` | | **Codes** | ```go charge = Charge.retrieve(stripeErr.PaymentIntent.LatestCharge) charge.Outcome.Type == "blocked" ``` Users on API version [2022-08-01](https://docs.stripe.com/upgrades.md#2022-08-01) or older: | **Codes** | `stripeErr.PaymentIntent.Charges.Data[0].Outcome.Type == "blocked"` | | **Problème** | | *Radar* (Radar for Fraud Teams helps you fine-tune how Radar operates, get fraud insights on suspicious charges, and assess your fraud management performance from a unified dashboard), 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 : - [Optimisez votre intégration de Radar](https://docs.stripe.com/radar/optimize-fraud-signals.md) pour collecter des informations plus détaillées. - Pour obtenir des éléments de formulaire optimisés préconfigurés, utilisez [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) ou [Stripe Elements](https://docs.stripe.com/payments/elements.md). Les clients de *Radar for Fraud Teams* (Radar for Fraud Teams helps you fine-tune how Radar operates, get fraud insights on suspicious charges, and assess your fraud management performance from a unified dashboard) disposent des options supplémentaires suivantes : - Pour exempter un paiement spécifique, ajoutez-le à votre liste blanche. (Radar for Fraud Teams) - Pour modifier votre seuil de tolérance au risque, réajustez les [paramètres de risque](https://docs.stripe.com/radar/risk-settings.md). (Radar for Fraud Teams) - Pour modifier les critères de blocage des paiements, définissez des [règles personnalisées](https://docs.stripe.com/radar/rules.md). (Radar for Fraud Teams) Vous pouvez tester les paramètres de votre intégration à l’aide de [cartes de test qui permettent de simuler des fraudes](https://docs.stripe.com/radar/testing.md). Si vous avez défini des règles Radar personnalisées, suivez les conseils en matière de test décrits dans la [documentation de Radar](https://docs.stripe.com/radar/testing.md). | ### Refusé par l’émetteur | | | | | **Type** | `stripe.ErrorTypeCard` | | **Codes** | `cardErr.Error.Code == stripe.ErrorCodeCardDeclined` | | **Problème** | L’émetteur de la carte a refusé le paiement. | | **Solutions** | Cette erreur peut se produire alors que votre intégration fonctionne correctement. Elle reflète 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 sur les codes de refus de paiement](https://docs.stripe.com/declines/codes.md) pour connaître les réponses adaptées à chaque code. Vous pouvez également effectuer les actions ci-après : - [Suivez nos recommandations pour limiter les refus de paiement des émetteurs](https://docs.stripe.com/declines/card.md#reducing-bank-declines). - Pour obtenir des éléments de formulaire préconfigurés qui puissent mettre en œuvre ces recommandations, utilisez [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) ou [Stripe Elements](https://docs.stripe.com/payments/elements.md). Analysez la façon dont votre intégration gère les refus de paiement à l’aide de [cartes de test qui permettent de simuler des paiements aboutis et refusés](https://docs.stripe.com/radar/testing.md). | ### Autres erreurs de paiement | | | | | **Type** | `stripe.ErrorTypeCard` | | **Problème** | Une autre erreur de paiement s’est produite. | | **Solutions** | 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](https://docs.stripe.com/error-codes.md) pour découvrir les réponses adaptées à chaque code. | ## Erreurs de requêtes invalides Les erreurs de requêtes invalides couvrent de nombreuses situations. La plus courante survient quand la requête à l’API contient des paramètres non valides ou si l’état actuel de votre intégration ne permet pas son exécution. Utilisez le code d’erreur (`stripeErr.Code`) et consultez la [documentation consacrée aux codes d’erreur](https://docs.stripe.com/error-codes.md) afin de trouver une solution. Certains codes d’erreur nécessitent une réponse spéciale : - `rate_limit` et `lock_timeout` reflètent les [erreurs de limite l’envoi](https://docs.stripe.com/error-handling.md#rate-limit-errors) - `secret_key_required` désigne une [erreur d’authentification](https://docs.stripe.com/error-handling.md#authentication-errors) - D’autres codes d’erreur reflètent un [des paramètres ou un état non valides](https://docs.stripe.com/error-handling.md#other-invalid-request-errors) ### Erreurs de limite d’envoi | | | | | **Type** | `stripe.ErrorTypeInvalidRequest` | | **Codes** | `stripeErr.Code == stripe.ErrorCodeRateLimit or stripeErr.Code == stripe.ErrorCodeLockTimeout` | | **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](https://docs.stripe.com/rate-limits.md). - Si vous prévoyez une augmentation importante du trafic et que vous souhaitez demander une limite d’envoi plus souple, [contactez notre service Support](https://support.stripe.com/) en amont. | ### Erreurs d’authentification | | | | | **Type** | `stripe.ErrorTypeInvalidRequest` | | **Codes** | `stripeErr.Code == stripe.ErrorCodeSecretKeyRequired` | | **Problème** | Stripe ne parvient pas à vous authentifier avec les informations que vous avez fournies. | | **Solutions** | - Utilisez la [clé API](https://docs.stripe.com/keys.md) appropriée. - Veillez à ne pas utiliser une clé que vous avez [« générée aléatoirement » ou révoquée](https://docs.stripe.com/keys.md#rolling-keys). | ### Paramètres ou état non valides | | | | | **Type** | `stripe.ErrorTypeInvalidRequest` | | **Codes** | `stripeErr.Code != stripe.ErrorCodeRateLimit and stripeErr.Code != stripe.ErrorCodeLockTimeout and stripeErr.Code != stripe.ErrorCodeSecretKeyRequired` | | **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 en savoir plus à propos de ce problème, consultez la [documentation consacrée aux codes d’erreur](https://docs.stripe.com/error-codes.md). - Pour des raisons pratiques, vous pouvez suivre le lien `stripeErr.DocURL` pour en savoir plus sur le code d’erreur. - Si l’erreur implique un paramètre précis, utilisez `stripeErr.Param` pour savoir duquel il s’agit. | ## Erreurs d’API | | | | | **Type** | `stripe.ErrorTypeAPI` | | **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* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) 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. Pour configurer votre intégration de sorte à ce qu’elle soit capable de gérer des situations inhabituelles, reportez-vous à [cette section plus avancée consacrée aux erreurs de serveur](https://docs.stripe.com/error-low-level.md#server-errors). | ## Erreurs d’idempotence | | | | | **Type** | `stripe.ErrorTypeIdempotency` | | **Problème** | Vous avez utilisé une [clé d’idempotence](https://docs.stripe.com/api/idempotent_requests.md) 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. | Dans la bibliothèque .NET 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. | Nom | Type | Description | | ----------------------------------- | ------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Erreur de paiement | [card_error](https://docs.stripe.com/error-handling.md#payment-errors) | Une erreur est survenue lors d’un paiement. Voici les cas possibles : - [Paiement bloqué pour suspicion de fraude](https://docs.stripe.com/error-handling.md#payment-blocked) - [Paiement refusé par l’émetteur](https://docs.stripe.com/error-handling.md#payment-declined). - [Autres erreurs de paiement](https://docs.stripe.com/error-handling.md#other-payment-errors). | | Erreur de requête non valide | [invalid_request_error](https://docs.stripe.com/error-handling.md#invalid-request-errors) | Vous avez effectué un appel à l’API contenant des paramètres incorrects, dont l’état est incompatible ou d’une manière non valide. | | Erreur de connexion | [api_connection_error](https://docs.stripe.com/error-handling.md#connection-errors) | Un problème réseau est survenu entre votre serveur et Stripe. | | Erreur d’API | [api_error](https://docs.stripe.com/error-handling.md#api-errors) | Un problème est survenu au niveau de Stripe (cas rare). | | Erreur d’authentification | [authentication_error](https://docs.stripe.com/error-handling.md#authentication-errors) | Stripe ne parvient pas à vous authentifier avec les informations que vous avez fournies. | | Erreur d’idempotence | [idempotency_error](https://docs.stripe.com/error-handling.md#idempotency-errors) | Vous avez utilisé une [clé d’idempotence](https://docs.stripe.com/api/idempotent_requests.md) pour effectuer une action inattendue (par exemple, relancer une requête en transmettant des paramètres différents). | | Erreur d’autorisation | [permission_error](https://docs.stripe.com/error-handling.md#permission-errors) | La clé API utilisée pour cette requête ne dispose pas des autorisations nécessaires. | | Erreur de limite d’envoi | [rate_limit_error](https://docs.stripe.com/error-handling.md#rate-limit-errors) | Vous avez effectué trop d’appels à l’API dans le délai imparti. | | Erreur de vérification de signature | [signature_verification_error](https://docs.stripe.com/error-handling.md#signature-verification-errors) | Vous utilisez la [vérification de signature](https://docs.stripe.com/webhooks.md#verify-events) de *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) et n’avez pas pu vérifier l’authenticité d’un événement webhook. | ## Erreurs de paiement Toutes les dispositions de cette section s’appliquent également aux paiements autres que par carte. Pour des raisons historiques, les erreurs de paiement sont de type [card_error](https://docs.stripe.com/error-handling.md#card-error). Dans les faits, toutefois, ils peuvent représenter un problème avec n’importe quel paiement, quel que soit le moyen de paiement. 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 : - [Paiement bloqué pour suspicion de fraude](https://docs.stripe.com/error-handling.md#payment-blocked) - [Paiement refusé par l’émetteur](https://docs.stripe.com/error-handling.md#payment-declined) - [Autres erreurs de paiement](https://docs.stripe.com/error-handling.md#other-payment-errors) Pour pouvoir distinguer ces catégories ou en savoir davantage sur la façon d’y répondre, reportez-vous aux pages relatives aux [codes d’erreur](https://docs.stripe.com/error-codes.md), aux [codes de refus de paiement](https://docs.stripe.com/declines/codes.md) et aux [résultats du paiement](https://docs.stripe.com/api/charges/object.md#charge_object-outcome). (Pour rechercher un résultat de paiement à partir d’un objet Error, récupérez d’abord le [PaymentIntent correspondant](https://docs.stripe.com/api/errors.md#errors-payment_intent) ainsi que le [dernier paiement que ce dernier a créé](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-latest_charge). L’exemple ci-après illustre cette étape.) #### PHP ```php >'); function example_function($args) { try { $stripe->paymentIntents->create($args); } catch(\Stripe\Exception\CardException $e) { $charge = $stripe->charge->retrieve($e->getError()->payment_intent->latest_charge); if ($charge->outcome->type == 'blocked') { error_log('Blocked for suspected fraud.'); } elseif ($e->getError()->code == 'expired_card') { error_log('Card expired.'); } elseif ($e->getError()->code == 'card_declined') { error_log('Declined by the issuer.'); } else { error_log('Other card error.'); } } } ``` Utilisateurs de la version du [01/08/2022](https://docs.stripe.com/upgrades.md#2022-08-01) de l’API ou d’une version antérieure : (Pour rechercher un résultat de paiement à partir d’un objet Error, récupérez d’abord le [PaymentIntent correspondant](https://docs.stripe.com/api/errors.md#errors-payment_intent) ainsi que le [dernier paiement que ce dernier a créé](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-charges-data). L’exemple ci-après illustre cette étape.) #### PHP ```php >'); function example_function($args) { try { $stripe->paymentIntents->create($args); } catch(\Stripe\Exception\CardException $e) { if ($e->getError()->payment_intent->charges->data[0]->outcome->type == 'blocked') { error_log('Blocked for suspected fraud.'); } elseif ($e->getError()->code == 'expired_card') { error_log('Card expired.'); } elseif ($e->getError()->code == 'card_declined') { error_log('Declined by the issuer.'); } else { error_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 : - [Simulation de paiements bloqués en raison d’un risque de fraude](https://docs.stripe.com/testing.md#fraud-prevention) - [Simulation de refus de paiements et d’autres erreurs de carte](https://docs.stripe.com/testing.md#declined-payments) Le code de test ci-dessous montre quelques possibilités. #### Erreur à déclencher - Bloqué pour suspicion de fraude #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_radarBlock', // Cette carte de test est toujours bloquée lorsqu’elle est utilisée dans un environnement de test pour suspicion de fraude. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Payment blocked for suspected fraud. ``` #### Erreur à déclencher - Refusé par l'émetteur #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_visa_chargeDeclined', // Cette carte de test est toujours refusée par l’émetteur lorsqu’elle est utilisée dans un environnement de test. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Payment declined by the issuer ``` #### Erreur à déclencher - Carte expirée #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedExpiredCard', // Cette carte de test échoue toujours pour cause d’expiration lorsqu’elle est utilisée dans un environnement de test. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Card expired. ``` #### Erreur à déclencher - Autre erreur de carte #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedProcessingError', // Cette carte de test échoue systématiquement en raison d’une erreur de traitement lorsqu’elle est utilisée dans un environnement de test. Utilisez-la ainsi que d’autres cartes de test pour tester la gestion des erreurs dans votre intégration. En mode production, vous devez utiliser un véritable moyen de paiement. ]); ``` ``` Other payment error. ``` ### Paiement bloqué pour suspicion de fraude | | | | | **Type** | `card_error` | | **Codes** | ```dotnet var chargeService = new ChargeService(); var options = new ChargeGetOptions(); var charge = chargeService.Get(e.StripeError.PaymentIntent.LatestChargeId, options); charge.Outcome.Type == "blocked" ``` Users on API version [2022-08-01](https://docs.stripe.com/upgrades.md#2022-08-01) or older: | **Codes** | `e.StripeError.PaymentIntent.Charges.Data[0].Outcome.Type == "blocked"` | | **Problème** | | *Radar* (Radar for Fraud Teams helps you fine-tune how Radar operates, get fraud insights on suspicious charges, and assess your fraud management performance from a unified dashboard), 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 : - [Optimisez votre intégration de Radar](https://docs.stripe.com/radar/optimize-fraud-signals.md) pour collecter des informations plus détaillées. - Pour obtenir des éléments de formulaire optimisés préconfigurés, utilisez [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) ou [Stripe Elements](https://docs.stripe.com/payments/elements.md). Les clients de *Radar for Fraud Teams* (Radar for Fraud Teams helps you fine-tune how Radar operates, get fraud insights on suspicious charges, and assess your fraud management performance from a unified dashboard) disposent des options supplémentaires suivantes : - Pour exempter un paiement spécifique, ajoutez-le à votre liste blanche. (Radar for Fraud Teams) - Pour modifier votre seuil de tolérance au risque, réajustez les [paramètres de risque](https://docs.stripe.com/radar/risk-settings.md). (Radar for Fraud Teams) - Pour modifier les critères de blocage des paiements, définissez des [règles personnalisées](https://docs.stripe.com/radar/rules.md). (Radar for Fraud Teams) Vous pouvez tester les paramètres de votre intégration à l’aide de [cartes de test qui permettent de simuler des fraudes](https://docs.stripe.com/radar/testing.md). Si vous avez défini des règles Radar personnalisées, suivez les conseils en matière de test décrits dans la [documentation de Radar](https://docs.stripe.com/radar/testing.md). | ### Paiement refusé par l’émetteur | | | | | **Type** | `card_error` | | **Codes** | `e.StripeError.Code == "card_declined"` | | **Problème** | L’émetteur de la carte a refusé le paiement. | | **Solutions** | Cette erreur peut se produire alors que votre intégration fonctionne correctement. Elle reflète 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 sur les codes de refus de paiement](https://docs.stripe.com/declines/codes.md) pour connaître les réponses adaptées à chaque code. Vous pouvez également effectuer les actions ci-après : - [Suivez nos recommandations pour limiter les refus de paiement des émetteurs](https://docs.stripe.com/declines/card.md#reducing-bank-declines). - Pour obtenir des éléments de formulaire préconfigurés qui puissent mettre en œuvre ces recommandations, utilisez [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) ou [Stripe Elements](https://docs.stripe.com/payments/elements.md). Analysez la façon dont votre intégration gère les refus de paiement à l’aide de [cartes de test qui permettent de simuler des paiements aboutis et refusés](https://docs.stripe.com/radar/testing.md). | ### Autres erreurs de paiement | | | | | **Type** | `card_error` | | **Problème** | Une autre erreur de paiement s’est produite. | | **Solutions** | 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](https://docs.stripe.com/error-codes.md) pour découvrir les réponses adaptées à chaque code. | ## Erreurs de requêtes invalides | | | | | **Type** | `invalid_request_error` | | **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 en savoir plus à propos de ce problème, consultez la [documentation consacrée aux codes d’erreur](https://docs.stripe.com/error-codes.md). - Pour des raisons pratiques, vous pouvez suivre le lien pour en savoir plus sur le code d’erreur. - Si l’erreur implique un paramètre précis, utilisez pour savoir duquel il s’agit. | ## Erreurs de connexion | | | | | **Type** | `api_connection_error` | | **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 indéterminé. Autrement dit, ne présumez pas qu’il a réussi ou qu’il a é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 résoudre les problèmes de connexion, vous pouvez effectuer les actions suivantes : - Lorsque vous créez ou mettez à jour un objet, utilisez une [clé d’idempotence](https://docs.stripe.com/api/idempotent_requests.md). 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](https://docs.stripe.com/error-low-level.md#idempotency). - Activez les [relances automatiques](https://github.com/stripe/stripe-java?tab=readme-ov-file#configuring-automatic-retries). 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** | `api_error` | | **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* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) 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. Pour configurer votre intégration de sorte à ce qu’elle soit capable de gérer des situations inhabituelles, reportez-vous à [cette section plus avancée consacrée aux erreurs de serveur](https://docs.stripe.com/error-low-level.md#server-errors). | ## Erreurs d’authentification | | | | | **Type** | `authentication_error` | | **Problème** | Stripe ne parvient pas à vous authentifier avec les informations que vous avez fournies. | | **Solutions** | - Utilisez la [clé API](https://docs.stripe.com/keys.md) appropriée. - Veillez à ne pas utiliser une clé que vous avez [« générée aléatoirement » ou révoquée](https://docs.stripe.com/keys.md#rolling-keys). | ## Erreurs d’idempotence | | | | | **Type** | `idempotency_error` | | **Problème** | Vous avez utilisé une [clé d’idempotence](https://docs.stripe.com/api/idempotent_requests.md) 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** | `permission_error` | | **Problème** | La clé API utilisée pour cette requête ne dispose pas des autorisations nécessaires. | | **Solutions** | - Assurez-vous de ne pas utiliser de [clé API restreinte](https://docs.stripe.com/keys-best-practices.md#limit-access) pour un service auquel elle n’a pas accès. - N’effectuez pas d’actions via le Dashboard tout en étant connecté avec un [rôle utilisateur](https://docs.stripe.com/get-started/account/teams/roles.md) pour lequel certains accès sont limités. | ## Erreurs de limite d’envoi | | | | | **Type** | `rate_limit_error` | | **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](https://docs.stripe.com/rate-limits.md). - Si vous prévoyez une augmentation importante du trafic et que vous souhaitez demander une limite d’envoi plus souple, [contactez notre service Support](https://support.stripe.com/) en amont. | ## Erreurs de vérification de signature | | | | | **Type** | `signature_verification_error` | | **Problème** | Vous utilisez la [vérification de signature](https://docs.stripe.com/webhooks.md#verify-events) de *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) et n’avez pas pu vérifier l’authenticité d’un événement webhook. | | **Solutions** | 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](https://docs.stripe.com/webhooks.md#verify-events) pour en savoir plus. Veillez plus particulièrement à utiliser la clé secrète de l’endpoint adaptée (qui n’est pas votre clé API). |