# Fehlerbehandlung Erkennen und reagieren Sie auf Ablehnungen, ungültige Daten, Netzwerkprobleme und mehr. Stripe bietet viele Arten von Fehlern. Sie können externe Ereignisse wie abgelehnte Zahlungen und Netzwerkunterbrechungen oder Code-Probleme wie ungültige API-Aufrufe widerspiegeln. ## Fehlerdaten analysieren Wenn Stripe einen Fehler auf Ihre API-Anfrage zurückgibt, erhalten Sie Details zu dem Fehler, die Ihnen helfen zu verstehen, wie Sie die Handhabungsvorschläge in diesem Leitfaden anwenden können. Diese Details helfen Ihnen bei Bedarf auch dabei, dem Stripe-Support wichtige Informationen zur Verfügung zu stellen. | Eigenschaft | Beschreibung | | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `code` | Der Fehlercode. | | `doc_url` | Ein Link zur Stripe-Dokumentation für den jeweiligen Fehlercode. | | `message` | Eine Beschreibung der Fehlerursache. | | `param` | Der Parameter der Anfrage, der den Fehler verursacht hat. | | `request_log_url` | Ein Link zum Stripe-Dashboard, in dem Sie detaillierte Protokolle über die ursprüngliche Anfrage und den Fehler einsehen können. | | Anfrage-ID | Eine eindeutige Kennung für die fehlerhafte Ursprungsanfrage. Der Header der Fehlerantwort enthält diesen Wert (Zeichenfolge, die mit `req` beginnt), aber Sie können einen Ausdruck in Ihrer Anfrage angeben, wie in den Codebeispielen in diesem Leitfaden gezeigt. | | `type` | Ein Verweis auf die Fehlerkategorie, zu der dieser Fehler gehört. | Verwenden Sie für den Umgang mit Fehlern einige oder alle Techniken in der folgenden Tabelle. Unabhängig von der verwendeten Technik können Sie mit unseren [empfohlenen Antworten für jeden Fehlertyp](https://docs.stripe.com/error-handling.md#error-types) weitermachen. | Technik | Zweck | Wenn benötigt | | ------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------- | ------------- | | [Ausnahmen abfangen](https://docs.stripe.com/error-handling.md#catch-exceptions) | Wiederherstellen, wenn ein API-Aufruf nicht fortgesetzt werden kann | Immer | | [Webhooks überwachen](https://docs.stripe.com/error-handling.md#monitor-webhooks) | Auf Benachrichtigungen von Stripe reagieren | Manchmal | | [Gespeicherte Informationen zu Fehlern erhalten](https://docs.stripe.com/error-handling.md#use-stored-information) | Untersuchen Sie frühere Probleme und unterstützen Sie andere Techniken | Manchmal | ## Ausnahmen abfangen Mit dieser Bibliothek müssen Sie nicht nach „non-200 HTTP“-Antworten suchen. Die Bibliothek übersetzt sie als Ausnahmen. Für den seltenen Fall, dass Sie HTTP-Details benötigen, lesen Sie [Umgang mit einfachen Ausnahmen](https://docs.stripe.com/error-low-level.md) und das [Fehler](https://docs.stripe.com/api/errors.md)-Objekt. Wenn ein unmittelbares Problem das Fortsetzen eines API-Aufrufs verhindert, löst die Ruby-Bibliothek von Stripe eine Ausnahme aus. Dies ist eine bewährte Methode, Ausnahmen abzufangen und zu handhaben. Verwenden Sie das Ruby-Schlüsselwort `rescue`, um eine Ausnahme abzufangen. Fangen Sie `Stripe::StripeError` oder seine Unterklassen ab, um nur Stripe-spezifische Ausnahmen zu handhaben. Jede Unterklasse stellt eine andere Art von Ausnahme dar. Wenn Sie eine Ausnahme abfangen, können Sie [anhand ihrer Klasse eine Antwort auswählen](https://docs.stripe.com/error-handling.md#error-types). | Technik | Zweck | Wenn benötigt | | ------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------- | ------------- | | [Ausnahmen abfangen](https://docs.stripe.com/error-handling.md#catch-exceptions) | Wiederherstellen, wenn ein API-Aufruf nicht fortgesetzt werden kann | Immer | | [Webhooks überwachen](https://docs.stripe.com/error-handling.md#monitor-webhooks) | Auf Benachrichtigungen von Stripe reagieren | Manchmal | | [Gespeicherte Informationen zu Fehlern erhalten](https://docs.stripe.com/error-handling.md#use-stored-information) | Untersuchen Sie frühere Probleme und unterstützen Sie andere Techniken | Manchmal | ## Ausnahmen abfangen Mit dieser Bibliothek müssen Sie nicht nach „non-200 HTTP“-Antworten suchen. Die Bibliothek übersetzt sie als Ausnahmen. Für den seltenen Fall, dass Sie HTTP-Details benötigen, lesen Sie [Umgang mit einfachen Ausnahmen](https://docs.stripe.com/error-low-level.md) und das [Fehler](https://docs.stripe.com/api/errors.md)-Objekt. Wenn ein unmittelbares Problem das Fortsetzen eines API-Aufrufs verhindert, löst die Python-Bibliothek von Stripe eine Ausnahme aus. Dies ist ein bewährtes Verfahren, Ausnahmen abzufangen und zu handhaben. Verwenden Sie die `try`/`except`-Syntax von Python, um eine Ausnahme abzufangen. Fangen Sie `stripe.StripeError` oder seine Unterklassen ab, um nur Stripe-spezifische Ausnahmen zu verarbeiten. Jede Unterklasse stellt eine andere Art von Ausnahme dar. Wenn Sie eine Ausnahme abfangen, können Sie [die Klasse verwenden, um eine Antwort auszuwählen](https://docs.stripe.com/error-handling.md#error-types). | Technik | Zweck | Wenn benötigt | | ------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------- | ------------- | | [Ausnahmen abfangen](https://docs.stripe.com/error-handling.md#catch-exceptions) | Wiederherstellen, wenn ein API-Aufruf nicht fortgesetzt werden kann | Immer | | [Webhooks überwachen](https://docs.stripe.com/error-handling.md#monitor-webhooks) | Auf Benachrichtigungen von Stripe reagieren | Manchmal | | [Gespeicherte Informationen zu Fehlern erhalten](https://docs.stripe.com/error-handling.md#use-stored-information) | Untersuchen Sie frühere Probleme und unterstützen Sie andere Techniken | Manchmal | ## Ausnahmen abfangen Mit dieser Bibliothek müssen Sie nicht nach „non-200 HTTP“-Antworten suchen. Die Bibliothek übersetzt sie als Ausnahmen. Für den seltenen Fall, dass Sie HTTP-Details benötigen, lesen Sie [Umgang mit einfachen Ausnahmen](https://docs.stripe.com/error-low-level.md) und das [Fehler](https://docs.stripe.com/api/errors.md)-Objekt. Wenn ein unmittelbares Problem das Fortsetzen eines API-Aufrufs verhindert, löst die PHP-Bibliothek von Stripe eine Ausnahme aus. Dies ist ein bewährtes Verfahren, um Ausnahmen abzufangen und zu handhaben. Verwenden Sie die Syntax von PHP `try`/`catch`, um eine Ausnahme abzufangen. Stripe stellt mehrere Ausnahmeklassen bereit, die Sie abfangen können. Jede von ihnen repräsentiert eine andere Art von Fehler. Wenn Sie eine Ausnahme abfangen, können Sie [anhand ihrer Klasse eine Antwort auswählen](https://docs.stripe.com/error-handling.md#error-types). | Technik | Zweck | Wenn benötigt | | ------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------- | ------------- | | [Ausnahmen abfangen](https://docs.stripe.com/error-handling.md#catch-exceptions) | Wiederherstellen, wenn ein API-Aufruf nicht fortgesetzt werden kann | Immer | | [Webhooks überwachen](https://docs.stripe.com/error-handling.md#monitor-webhooks) | Auf Benachrichtigungen von Stripe reagieren | Manchmal | | [Gespeicherte Informationen zu Fehlern erhalten](https://docs.stripe.com/error-handling.md#use-stored-information) | Untersuchen Sie frühere Probleme und unterstützen Sie andere Techniken | Manchmal | ## Ausnahmen abfangen Mit dieser Bibliothek müssen Sie nicht nach „non-200 HTTP“-Antworten suchen. Die Bibliothek übersetzt sie als Ausnahmen. Für den seltenen Fall, dass Sie HTTP-Details benötigen, lesen Sie [Umgang mit einfachen Ausnahmen](https://docs.stripe.com/error-low-level.md) und das [Fehler](https://docs.stripe.com/api/errors.md)-Objekt. Wenn ein unmittelbares Problem das Fortsetzen eines API-Aufrufs verhindert, löst die Java-Bibliothek von Stripe eine Ausnahme aus. Dies ist ein bewährtes Verfahren, um Ausnahmen abzufangen und zu handhaben. Verwenden Sie die `try`/`catch`-Syntax von Java, um eine Ausnahme abzufangen. Fangen Sie `StripeException` oder seine Unterklassen ab, um nur Stripe-spezifische Ausnahmen zu handhaben. Jede Unterklasse stellt eine andere Art von Ausnahme dar. Wenn Sie eine Ausnahme abfangen, können Sie [anhand ihrer Klasse eine Antwort auswählen](https://docs.stripe.com/error-handling.md#error-types). | Technik | Zweck | Wenn benötigt | | ------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------- | ------------- | | [Ausnahmen abfangen](https://docs.stripe.com/error-handling.md#catch-exceptions) | Wiederherstellen, wenn ein API-Aufruf nicht fortgesetzt werden kann | Immer | | [Webhooks überwachen](https://docs.stripe.com/error-handling.md#monitor-webhooks) | Auf Benachrichtigungen von Stripe reagieren | Manchmal | | [Gespeicherte Informationen zu Fehlern erhalten](https://docs.stripe.com/error-handling.md#use-stored-information) | Untersuchen Sie frühere Probleme und unterstützen Sie andere Techniken | Manchmal | ## Ausnahmen abfangen Mit dieser Bibliothek müssen Sie nicht nach „non-200 HTTP“-Antworten suchen. Die Bibliothek übersetzt sie als Ausnahmen. Für den seltenen Fall, dass Sie HTTP-Details benötigen, lesen Sie [Umgang mit einfachen Ausnahmen](https://docs.stripe.com/error-low-level.md) und das [Fehler](https://docs.stripe.com/api/errors.md)-Objekt. Wenn ein unmittelbares Problem verhindert, dass ein API Aufruf fortgesetzt wird, kann die Stripe Node.js-Bibliothek eine Ausnahme auslösen. Dies ist eine bewährte Methode, Ausnahmen abzufangen und zu beheben. Gehen Sie wie folgt vor, um das Auslösen von Ausnahmen zu aktivieren und die Ausnahme abzufangen: - Wenn Sie den API-Aufruf in einer Funktion ausführen, stellen Sie der Funktionsdefinition das Schlüsselwort `async` voran. - Stellen Sie dem API-Aufruf selbst das Schlüsselwort `await` voran. - Schließen Sie den API-Aufruf in einen `try`/`catch`-Block ein. Wenn Sie eine Ausnahme abfangen, können Sie [die Typ-Eigenschaft verwenden, um eine Antwort auszuwählen](https://docs.stripe.com/error-handling.md#error-types). | Technik | Zweck | Wenn benötigt | | ------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------- | ------------- | | [Fehlerwerte verwenden](https://docs.stripe.com/error-handling.md#catch-exceptions) | Wiederherstellen, wenn ein API-Aufruf nicht fortgesetzt werden kann | Immer | | [Webhooks überwachen](https://docs.stripe.com/error-handling.md#monitor-webhooks) | Auf Benachrichtigungen von Stripe reagieren | Manchmal | | [Gespeicherte Informationen zu Fehlern erhalten](https://docs.stripe.com/error-handling.md#use-stored-information) | Untersuchen Sie frühere Probleme und unterstützen Sie andere Techniken | Manchmal | ## Fehlerwerte verwenden Mit dieser Bibliothek müssen Sie nicht nach „non-200 HTTP“-Antworten suchen. Die Bibliothek übersetzt sie als Fehlerwerte. Für den seltenen Fall, dass Sie HTTP-Details benötigen, lesen Sie [Umgang mit einfachen Ausnahmen](https://docs.stripe.com/error-low-level.md) und das [Fehler](https://docs.stripe.com/api/errors.md)-Objekt. API-Aufrufe in der Go-Bibliothek von Stripe geben sowohl einen Ergebniswert als auch einen Fehlerwert zurück. Verwenden Sie die mehrfache Zuweisung, um beide zu erfassen. Ist der Fehlerwert nicht `nil`, bedeutet dies, dass ein unmittelbares Problem die Fortsetzung des API-Aufrufs verhindert hat. Wenn sich der Fehlerwert auf Stripe bezieht, können Sie ihn in ein `stripe.Error`-Objekt umwandeln, das Felder enthält, die das Problem beschreiben. [Verwenden Sie das Feld „Typ“, um eine Antwort auszuwählen](https://docs.stripe.com/error-handling.md#error-types). In einigen Fällen können Sie die Eigenschaft `Err` auf einen spezifischeren Fehlertyp mit zusätzlichen Informationen umstellen. | Technik | Zweck | Wenn benötigt | | ------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------- | ------------- | | [Ausnahmen abfangen](https://docs.stripe.com/error-handling.md#catch-exceptions) | Wiederherstellen, wenn ein API-Aufruf nicht fortgesetzt werden kann | Immer | | [Webhooks überwachen](https://docs.stripe.com/error-handling.md#monitor-webhooks) | Auf Benachrichtigungen von Stripe reagieren | Manchmal | | [Gespeicherte Informationen zu Fehlern erhalten](https://docs.stripe.com/error-handling.md#use-stored-information) | Untersuchen Sie frühere Probleme und unterstützen Sie andere Techniken | Manchmal | ## Ausnahmen abfangen Mit dieser Bibliothek müssen Sie nicht nach „non-200 HTTP“-Antworten suchen. Die Bibliothek übersetzt sie als Ausnahmen. Für den seltenen Fall, dass Sie HTTP-Details benötigen, lesen Sie [Umgang mit einfachen Ausnahmen](https://docs.stripe.com/error-low-level.md) und das [Fehler](https://docs.stripe.com/api/errors.md)-Objekt. Wenn ein unmittelbares Problem das Fortsetzen eines API-Aufrufs verhindert, löst die .NET-Bibliothek von Stripe eine Ausnahme aus. Dies ist ein bewährtes Verfahren, um Ausnahmen abzufangen und zu handhaben. Verwenden Sie die `try`/`catch`-Syntax von .NET, um eine Ausnahme abzufangen. Fangen Sie eine `StripeException` ab und [verwenden Sie deren Type-Attribut, um eine Antwort auszuwählen](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."); } } ``` Nachdem Sie den Umgang mit Ausnahmen eingerichtet haben, testen Sie diese mit verschiedenen Daten, einschließlich [Testkarten](https://docs.stripe.com/testing.md), um unterschiedliche Zahlungsergebnisse zu simulieren. #### Fehler beim Auslösen - Ungültige Anfrage #### PHP ```php example_function([ // The required parameter currency is missing 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_visa', // Dies ist eine Testkarte, die immer erfolgreich ist, wenn sie in Testumgebungen verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` An invalid request occurred. ``` #### Fehler beim Auslösen - Kartenfehler #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedFraudulent', // Dies ist eine Testkarte, die einen Zahlungsfehler mit Betrugsverdacht produziert. Mithilfe dieser und anderer Testkarten können Sie den Umgang mit Fehlern in Ihrer Integration testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` A payment error occurred: Your card was declined. ``` #### Fehler beim Auslösen - Kein Fehler #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_visa', // Dies ist eine Testkarte, die immer erfolgreich ist, wenn sie in Testumgebungen verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` No error. ``` ## Webhooks überwachen Stripe benachrichtigt Sie mithilfe von *Webhooks* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) über viele Problemtypen. Dazu gehören Probleme, die nicht unmittelbar auf einen API-Aufruf folgen. Zum Beispiel: - Sie verlieren eine Anfechtung. - Eine wiederkehrende Zahlung schlägt fehl, nachdem sie monatelang erfolgreich war. - Ihr Frontend *bestätigt* (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) eine Zahlung, geht aber offline, bevor es feststellt, dass die Zahlung fehlgeschlagen ist. (Das Backend empfängt weiterhin eine Webhook-Benachrichtigung, obwohl es den API-Aufruf nicht getätigt hat.) Sie müssen nicht jeden Webhook-Ereignistyp bearbeiten. Einige Integrationen handhaben gar keine. Beginnen Sie in Ihrem Webhook-Handler mit den Grundschritten aus dem [Webhook-Builder](https://docs.stripe.com/webhooks/quickstart.md): Rufen Sie ein Ereignisobjekt ab und finden Sie mithilfe des Ereignistyps heraus, was passiert ist. Wenn der Ereignistyp dann auf einen Fehler hinweist, führen Sie diese zusätzlichen Schritte aus: 1. Greifen Sie auf [event.data.object](https://docs.stripe.com/api/events/object.md#event_object-data-object) zu, um das betreffende Objekt abzurufen. 1. [Verwenden Sie gespeicherte Informationen](https://docs.stripe.com/error-handling.md#use-stored-information) für das betroffene Objekt, um Kontext zu erhalten, einschließlich eines Fehlerobjekts. 1. [Verwenden Sie seinen Typ, um eine Antwort auszuwählen](https://docs.stripe.com/error-handling.md#error-types). 1. Greifen Sie auf [event[‘data’][‘object’]](https://docs.stripe.com/api/events/object.md#event_object-data-object) zu, um das betreffende Objekt abzurufen. 1. [Verwenden Sie gespeicherte Informationen](https://docs.stripe.com/error-handling.md#use-stored-information) für das betroffene Objekt, um Kontext zu erhalten, einschließlich eines Fehlerobjekts. 1. [Verwenden Sie seinen Typ, um eine Antwort auszuwählen](https://docs.stripe.com/error-handling.md#error-types). 1. Greifen Sie auf [event->data->object](https://docs.stripe.com/api/events/object.md#event_object-data-object) zu, um das betreffende Objekt abzurufen. 1. [Verwenden Sie gespeicherte Informationen](https://docs.stripe.com/error-handling.md#use-stored-information) für das betroffene Objekt, um Kontext zu erhalten, einschließlich eines Fehlerobjekts. 1. [Verwenden Sie seinen Typ, um eine Antwort auszuwählen](https://docs.stripe.com/error-handling.md#error-types). 1. Rufen Sie das betroffene Objekt mit einem `EventDataObjectDeserializer` ab und wandeln Sie dessen Ausgabe in den entsprechenden Typ um. 1. [Verwenden Sie gespeicherte Informationen](https://docs.stripe.com/error-handling.md#use-stored-information) für das betroffene Objekt, um Kontext zu erhalten, einschließlich eines Fehlerobjekts. 1. [Verwenden Sie seinen Typ, um eine Antwort auszuwählen](https://docs.stripe.com/error-handling.md#error-types). 1. Greifen Sie auf [event.data.object](https://docs.stripe.com/api/events/object.md#event_object-data-object) zu, um das betreffende Objekt abzurufen. 1. [Verwenden Sie gespeicherte Informationen](https://docs.stripe.com/error-handling.md#use-stored-information) für das betroffene Objekt, um Kontext zu erhalten, einschließlich eines Fehlerobjekts. 1. [Verwenden Sie seinen Typ, um eine Antwort auszuwählen](https://docs.stripe.com/error-handling.md#error-types). 1. Holen Sie sich das betroffene Objekt, indem Sie Daten aus `event.Data.Raw` zurückwandeln. 1. [Verwenden Sie gespeicherte Informationen](https://docs.stripe.com/error-handling.md#use-stored-information) für das betroffene Objekt, um Kontext zu erhalten, einschließlich eines Fehlerobjekts. 1. [Verwenden Sie seinen Typ, um eine Antwort auszuwählen](https://docs.stripe.com/error-handling.md#error-types). 1. Rufen Sie das betroffene Objekt ab, indem Sie [stripeEvent.Data.Object](https://docs.stripe.com/api/events/object.md#event_object-data-object) in den entsprechenden Typ umwandeln. 1. [Verwenden Sie gespeicherte Informationen](https://docs.stripe.com/error-handling.md#use-stored-information) für das betroffene Objekt, um Kontext zu erhalten, einschließlich eines Fehlerobjekts. 1. [Verwenden Sie seinen Typ, um eine Antwort auszuwählen](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); ``` Um zu testen, wie Ihre Integration auf Webhook-Ereignisse reagiert, können Sie [Webhook-Ereignisse lokal auslösen](https://docs.stripe.com/webhooks.md#test-webhook). Nachdem Sie die Einrichtungsschritte unter diesem Link abgeschlossen haben, lösen Sie eine fehlgeschlagene Zahlung aus, um die entsprechende Fehlermeldung anzuzeigen. ```bash stripe trigger payment_intent.payment_failed ``` ```bash A payment error occurred: Your card was declined. ``` ## Gespeicherte Informationen zu Fehlern erhalten In vielen Objekten werden Informationen zu Fehlern gespeichert. Wenn also bereits ein Fehler aufgetreten ist, können Sie das Objekt abrufen und untersuchen, um mehr zu erfahren. In vielen Fällen liegen gespeicherte Informationen in Form eines Fehlerobjekts vor, und Sie können [seinen Typ verwenden, um eine Antwort auszuwählen](https://docs.stripe.com/error-handling.md#error-types). Zum Beispiel: 1. Rufen Sie einen bestimmten Payment Intent ab. 1. Überprüfen Sie, ob ein Zahlungsfehler aufgetreten ist, indem Sie feststellen, ob [last_payment_error](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-last_payment_error) leer ist. 1. Falls dies der Fall ist, protokollieren Sie den Fehler, einschließlich seines Typs und des betroffenen Objekts. #### 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."); } ``` Hier sind häufige Objekte, die Informationen zu Fehlern speichern. | Objekt | Attribut | Werte | | -------------------------------------------------------------------- | ------------------------- | -------------------------------------------------------------------------------------------------------------------- | | [Payment Intent](https://docs.stripe.com/api/payment_intents.md) | `last_payment_error` | [Ein Fehlerobjekt](https://docs.stripe.com/error-handling.md#work-with-error-objects) | | [Setup Intent](https://docs.stripe.com/api/setup_intents.md) | `last_setup_error` | [Ein Fehlerobjekt](https://docs.stripe.com/error-handling.md#work-with-error-objects) | | [Rechnung](https://docs.stripe.com/api/invoices.md) | `last_finalization_error` | [Ein Fehlerobjekt](https://docs.stripe.com/error-handling.md#work-with-error-objects) | | [Einrichtungsversuch](https://docs.stripe.com/api/setup_attempts.md) | `setup_error` | [Ein Fehlerobjekt](https://docs.stripe.com/error-handling.md#work-with-error-objects) | | [Auszahlung](https://docs.stripe.com/api/payouts.md) | `failure_code` | [Ein Fehlercode für eine Auszahlung](https://docs.stripe.com/api/payouts/failures.md) | | [Rückerstattung](https://docs.stripe.com/api/refunds.md) | `failure_reason` | [Ein Fehlercode für eine Rückerstattung](https://docs.stripe.com/api/refunds/object.md#refund_object-failure_reason) | Um Code zu testen, der gespeicherte Informationen zu Fehlern verwendet, müssen Sie häufig fehlgeschlagene Transaktionen simulieren. Dies geht häufig mithilfe von [Testkarten](https://docs.stripe.com/testing.md) oder Testbanknummern. Beispiel: - [Simulieren Sie eine abgelehnte Zahlung](https://docs.stripe.com/testing.md#declined-payments) zum Erstellen fehlgeschlagener Abbuchungen, PaymentIntents, SetupIntents usw. - [Eine fehlgeschlagene Auszahlung simulieren](https://docs.stripe.com/connect/testing.md#account-numbers). - [Eine fehlgeschlagene Rückerstattung simulieren](https://docs.stripe.com/testing.md#refunds). ## Fehler- und Antworttypen In der Stripe Ruby-Bibliothek gehören Fehlerobjekte zu `stripe.error.StripeError` und seinen Unterklassen. Verwenden Sie die Dokumentation für jede Klasse, um Tipps für Antworten zu erhalten. | Name | Klasse | Beschreibung | | ------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Zahlungsfehler | [Stripe::CardError](https://docs.stripe.com/error-handling.md#payment-errors) | Während der Zahlung ist eine der folgenden Fehlersituationen aufgetreten: - [Zahlung wegen Betrugsverdachts blockiert](https://docs.stripe.com/error-handling.md#payment-blocked) - [Zahlung von Aussteller abgewiesen](https://docs.stripe.com/error-handling.md#payment-declined). - [Andere Zahlungsfehler](https://docs.stripe.com/error-handling.md#other-payment-errors). | | Fehler „ungültige Anfrage“ | [Stripe::InvalidRequestError](https://docs.stripe.com/error-handling.md#invalid-request-errors) | Sie haben einen API-Aufruf mit den falschen Parametern, im falschen Status oder auf ungültige Weise ausgeführt. | | Verbindungsfehler | [Stripe::APIConnectionError](https://docs.stripe.com/error-handling.md#connection-errors) | Zwischen Ihrem Server und Stripe ist ein Netzwerkproblem aufgetreten. | | API-Fehler | [Stripe::APIError](https://docs.stripe.com/error-handling.md#api-errors) | Auf der Seite von Stripe ist ein Fehler aufgetreten. (Dies kommt sehr selten vor). | | Authentifizierungsfehler | [Stripe::AuthenticationError](https://docs.stripe.com/error-handling.md#authentication-errors) | Stripe kann Sie mit den angegebenen Informationen nicht authentifizieren. | | Idempotenzfehler | [Stripe::IdempotencyError](https://docs.stripe.com/error-handling.md#idempotency-errors) | Sie haben einen [Idempotenz-Schlüssel](https://docs.stripe.com/api/idempotent_requests.md) für ein unerwartetes Ereignis verwendet, wie das Wiederholen einer Anfrage, jedoch mit Übergabe unterschiedlicher Parameter. | | Berechtigungsfehler | [Stripe::PermissionError](https://docs.stripe.com/error-handling.md#permission-errors) | Der für diese Anfrage verwendete API-Schlüssel verfügt nicht über die erforderlichen Berechtigungen. | | Ratenbegrenzungsfehler | [Stripe::RateLimitError](https://docs.stripe.com/error-handling.md#rate-limit-errors) | Sie haben in zu kurzer Zeit zu viele API-Aufrufe getätigt. | | Fehler beim Verifizieren der Signatur | [Stripe::SignatureVerificationError](https://docs.stripe.com/error-handling.md#signature-verification-errors) | Sie verwenden die [Signaturverifizierung](https://docs.stripe.com/webhooks.md#verify-events) von *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests)s und konnten die Authentizität eines Webhook-Ereignisses nicht bestätigen. | ## Zahlungsfehler Alle Angaben in diesem Abschnitt gelten auch für Zahlungen ohne Karte. Aus historischen Gründen haben Zahlungsfehler den Typ [Stripe::CardError](https://docs.stripe.com/error-handling.md#card-error). Tatsächlich können sie aber bei jeder Zahlung ein Problem darstellen, unabhängig von der Zahlungsmethode. Zahlungsfehler – aus historischen Gründen auch manchmal als „Kartenfehler“ bezeichnet – decken ein breites Spektrum geläufiger Probleme ab. Sie sind auf drei Kategorien verteilt: - [Zahlung wegen Betrugsverdachts blockiert](https://docs.stripe.com/error-handling.md#payment-blocked) - [Zahlung von Aussteller abgewiesen](https://docs.stripe.com/error-handling.md#payment-declined) - [Andere Zahlungsfehler](https://docs.stripe.com/error-handling.md#other-payment-errors) Um diese Kategorien zu unterscheiden oder weitere Informationen zur Reaktion zu erhalten, sehen Sie unter [Fehlercode](https://docs.stripe.com/error-codes.md), [Ablehnungscode](https://docs.stripe.com/declines/codes.md) und [Zahlungsergebnis](https://docs.stripe.com/api/charges/object.md#charge_object-outcome) nach. (Um das Zahlungsergebnis von einem Fehlerobjekt zu finden, rufen Sie zuerst den [betroffenen Payment Intent](https://docs.stripe.com/api/errors.md#errors-payment_intent) und die [neueste von ihm erstellte Zahlung](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-latest_charge) auf. Im nachfolgenden Beispiel wird dies veranschaulicht.) #### 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.'); } } } ``` Nutzer/innen mit API-Version [2022-08-01](https://docs.stripe.com/upgrades.md#2022-08-01) oder älter: (Um das Zahlungsergebnis von einem Fehlerobjekt zu finden, rufen Sie zuerst den [betroffenen Payment Intent](https://docs.stripe.com/api/errors.md#errors-payment_intent) und die [neueste von ihm erstellte Zahlung](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-charges-data) auf. Im nachfolgenden Beispiel wird dies veranschaulicht.) #### 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.'); } } } ``` Mit Testkarten können Sie einige geläufige Arten von Zahlungsfehlern auslösen. In den folgenden Listen finden Sie Optionen: - [Aufgrund von Betrugsrisiko gesperrte Zahlungen simulieren](https://docs.stripe.com/testing.md#fraud-prevention) - [Abgelehnte Zahlungen und andere Kartenfehler simulieren](https://docs.stripe.com/testing.md#declined-payments) Der folgende Testcode demonstriert einige Möglichkeiten. #### Fehler beim Auslösen - Aufgrund Betrugsverdachts gesperrt #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_radarBlock', // Dies ist eine Testkarte, die aufgrund von Betrugsverdacht immer dann gesperrt wird, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Payment blocked for suspected fraud. ``` #### Fehler beim Auslösen - Vom Aussteller abgewiesen #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_visa_chargeDeclined', // Dies ist eine Testkarte, die vom Aussteller immer abgelehnt wird, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Payment declined by the issuer ``` #### Fehler beim Auslösen - Karte ist abgelaufen #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedExpiredCard', // Dies ist eine Testkarte, die immer dann als abgelaufen fehlschlägt, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Card expired. ``` #### Fehler beim Auslösen - Anderer Kartenfehler #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedProcessingError', // Dies ist eine Testkarte, die aufgrund eines Verarbeitungsfehlers fehlschlägt, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Other payment error. ``` ### Zahlung aufgrund Betrugsverdachts gesperrt | | | | | **Typ** | `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'` | | **Problem** | | *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), das Betrugspräventionssystem von Stripe, hat die Zahlung blockiert | | **Lösungen** | Dieser Fehler kann auftreten, wenn Ihre Integration ordnungsgemäß funktioniert. Fangen Sie ihn ab und fordern Sie den Kunden/die Kundin auf, eine andere Zahlungsmethode zu wählen. Probieren Sie Folgendes, damit weniger legitime Zahlungen blockiert werden: - [Optimieren Sie Ihre Radar-Integration](https://docs.stripe.com/radar/optimize-fraud-signals.md), um detailliertere Informationen zu erfassen. - Verwenden Sie [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) oder [Stripe Elements](https://docs.stripe.com/payments/elements.md) für vorgefertigte, optimierte Formularelemente. Kund/innen von *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) stehen folgende zusätzliche Optionen zur Verfügung: - Um eine bestimmte Zahlung auszunehmen, fügen Sie diese zu Ihrer Zulassungsliste hinzu. (Radar for Fraud Teams) - Passen Sie Ihre [Risikoeinstellungen](https://docs.stripe.com/radar/risk-settings.md) an, um Ihre Risikotoleranz zu ändern. (Radar for Fraud Teams) - Verwenden Sie [nutzerspezifische Regeln](https://docs.stripe.com/radar/rules.md), um die Kriterien für das Blockieren einer Zahlung zu ändern. (Radar for Fraud Teams) Sie können die Einstellungen Ihrer Integration mit [Testkarten, die Betrug simulieren](https://docs.stripe.com/radar/testing.md) testen. Wenn Sie nutzerdefinierte Radar-Regeln haben, folgen Sie den Test-Hinweisen in der [Dokumentation von Radar](https://docs.stripe.com/radar/testing.md). | ### Zahlung vom Aussteller abgewiesen | | | | | **Typ** | `Stripe::CardError` | | **Codes** | `e.error.code == "card_declined"` | | **Problem** | Der Kartenaussteller hat die Zahlung abgelehnt. | | **Lösungen** | Dieser Fehler kann auftreten, obwohl Ihre Integration korrekt funktioniert. Er weist auf eine Aktion des Ausstellers hin, die legitim sein kann. Verwenden Sie den Ablehnungscode, um die nächsten angemessenen Schritte zu ermitteln. Entsprechende Antworten auf jeden Code finden Sie in der [Dokumentation zu Ablehnungscodes](https://docs.stripe.com/declines/codes.md). Sie können auch: - [Befolgen Sie die Empfehlungen, um die Ablehnungen durch Aussteller zu reduzieren](https://docs.stripe.com/declines/card.md#reducing-bank-declines). - Verwenden Sie [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) oder [Stripe Elements](https://docs.stripe.com/payments/elements.md) für vorgefertigte Formularelemente, die diese Empfehlungen implementiert haben. Testen Sie mit [Testkarten, die erfolgreiche und abgelehnte Zahlungen simulieren](https://docs.stripe.com/radar/testing.md), wie Ihre Integration mit Ablehnungen umgeht. | ### Andere Zahlungsfehler | | | | | **Typ** | `Stripe::CardError` | | **Problem** | Es ist ein weiterer Zahlungsfehler aufgetreten. | | **Lösungen** | Dieser Fehler kann auftreten, obwohl Ihre Integration korrekt funktioniert. Verwenden Sie den Fehlercode, um die nächsten angemessenen Schritte zu ermitteln. Entsprechende Antworten auf jeden Code finden Sie in der [Dokumentation zu Fehlercodes](https://docs.stripe.com/error-codes.md). | ## Ungültige Anfragefehler | | | | | **Typ** | `Stripe::InvalidRequestError` | | **Problem** | Sie haben einen API-Aufruf mit den falschen Parametern, im falschen Status oder auf ungültige Weise ausgeführt. | | **Lösungen** | In den meisten Fällen liegt das Problem bei der Anfrage selbst. Entweder sind seine Parameter ungültig oder sie kann im aktuellen Status Ihrer Integration nicht ausgeführt werden. - Einzelheiten zu diesem Problem finden Sie in der [Dokumentation zu Fehlercodes](https://docs.stripe.com/error-codes.md). - Unter dem Link erhalten Sie schnellen Zugriff auf Dokumentation zum Fehlercode. - Wenn der Fehler einen bestimmten Parameter beinhaltet, verwenden Sie , um diesen zu bestimmen. | ## Verbindungsfehler | | | | | **Typ** | `Stripe::APIConnectionError` | | **Problem** | Zwischen Ihrem Server und Stripe ist ein Netzwerkproblem aufgetreten. | | **Lösungen** | Behandeln Sie das Ergebnis des API-Aufrufs als unbestimmt. Das heißt, gehen Sie nicht davon aus, dass es erfolgreich war oder dass es fehlgeschlagen ist. So finden Sie heraus, ob es erfolgreich war: - Rufen Sie das entsprechende Objekt von Stripe ab und prüfen Sie seinen Status. - Überwachen Sie die Webhook-Benachrichtigung, ob der Vorgang erfolgreich war oder fehlgeschlagen ist. So unterstützen Sie die Wiederherstellung nach Verbindungsfehlern: - Verwenden Sie beim Erstellen oder Aktualisieren eines Objekts einen [Idempotenz-Schlüssel](https://docs.stripe.com/api/idempotent_requests.md). Falls ein Verbindungsfehler auftritt, können Sie die Anfrage dann sicher wiederholen, ohne dass das Risiko besteht, dass ein zweites Objekt erstellt wird oder dass die Aktualisierung zweimal durchgeführt wird. Wiederholen Sie die Anfrage mit demselben Idempotenz-Schlüssel, bis Sie eine eindeutige Erfolgs- oder Fehlermeldung erhalten. Weitere Hinweise zu dieser Strategie finden Sie unter [Low-Level-Fehler beheben](https://docs.stripe.com/error-low-level.md#idempotency). - Aktivieren Sie [automatische erneute Versuche](https://github.com/stripe/stripe-java?tab=readme-ov-file#configuring-automatic-retries). Dann generiert Stripe Idempotenz-Schlüssel für Sie und wiederholt an Ihrer Stelle Anfragen, sobald es sicher ist. Dieser Fehler kann andere verbergen. Es ist möglich, dass ein anderer Fehler zum Vorschein tritt, sobald der Verbindungsfehler behoben wurde. Durchsuchen Sie all diese Lösungen nach Fehlern, genau wie in der ursprünglichen Anfrage. | ## API-Fehler | | | | | **Typ** | `Stripe::APIError` | | **Problem** | Auf der Seite von Stripe ist ein Fehler aufgetreten. (Dies kommt sehr selten vor). | | **Lösungen** | Behandeln Sie das Ergebnis des API-Aufrufs als unbestimmt. Das heißt, gehen Sie weder davon aus, dass es erfolgreich war, noch dass es fehlgeschlagen ist. Über *Webhooks* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) erhalten Sie Informationen zu dem Ergebnis. Nach Möglichkeit löst Stripe Webhooks für alle neuen Objekte aus, die wir erstellen, während wir an der Lösung für ein Problem arbeiten. Um Ihre Integration so solide wie möglich für ungewöhnliche Situationen zu gestalten, informieren Sie sich unter [dieser erweiterten Diskussion zu Serverfehlern.](https://docs.stripe.com/error-low-level.md#server-errors) | ## Authentifizierungsfehler | | | | | **Typ** | `Stripe::AuthenticationError` | | **Problem** | Stripe kann Sie mit den angegebenen Informationen nicht authentifizieren. | | **Lösungen** | - Verwenden Sie den korrekten [API-Schlüssel](https://docs.stripe.com/keys.md). - Stellen Sie sicher, dass Sie keinen Schlüssel verwenden, den Sie [„rotiert“ oder widerrufen](https://docs.stripe.com/keys.md#rolling-keys) haben. | ## Idempotenz-Fehler | | | | | **Typ** | `Stripe::IdempotencyError` | | **Problem** | Sie haben einen [Idempotenz-Schlüssel](https://docs.stripe.com/api/idempotent_requests.md) für ein unerwartetes Ereignis verwendet, wie das Wiederholen einer Anfrage, jedoch mit Übergabe unterschiedlicher Parameter. | | **Lösungen** | - Nach Verwenden eines Idempotenz-Schlüssels kann dieser nur für identische API-Aufrufe wiederverwendet werden. - Verwenden Sie Idempotenzschlüssel unter 255 Zeichen. | ## Berechtigungsfehler | | | | | **Typ** | `Stripe::PermissionError` | | **Problem** | Der für diese Anfrage verwendete API-Schlüssel verfügt nicht über die erforderlichen Berechtigungen. | | **Lösungen** | - Stellen Sie sicher, dass Sie keinen [eingeschränkten API-Schlüssel](https://docs.stripe.com/keys-best-practices.md#limit-access) für einen Dienst verwenden, auf den dieser keinen Zugriff hat. - Führen Sie keine Aktionen im Dashboard aus, während Sie mit einer [Nutzerrolle](https://docs.stripe.com/get-started/account/teams/roles.md) ohne Berechtigung angemeldet sind. | ## Ratenbegrenzungsfehler | | | | | **Typ** | `Stripe::RateLimitError` | | **Problem** | Sie haben in zu kurzer Zeit zu viele API-Aufrufe getätigt. | | **Lösungen** | - Wenn ein einzelner API-Aufruf diesen Fehler auslöst, warten Sie und versuchen Sie es erneut. - Um die Ratenbegrenzung automatisch zu handhaben, wiederholen Sie den API-Aufruf nach einer Verzögerung und erhöhen Sie diese exponentiell, wenn der Fehler weiterhin auftritt. Weitere Hinweise finden Sie in der Dokumentation zu [Ratenbegrenzungen](https://docs.stripe.com/rate-limits.md). - Wenn Sie mit einem starken Anstieg des Datenverkehrs rechnen und eine Erhöhung der Ratenbegrenzung anfordern möchten, [kontaktieren Sie den Support](https://support.stripe.com/) im Voraus. | ## Fehler beim Verifizieren der Signatur | | | | | **Typ** | `Stripe::SignatureVerificationError` | | **Problem** | Sie verwenden die [Signaturverifizierung](https://docs.stripe.com/webhooks.md#verify-events) von *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests)s und konnten die Authentizität eines Webhook-Ereignisses nicht bestätigen. | | **Lösungen** | Dieser Fehler kann auftreten, wenn Ihre Integration ordnungsgemäß funktioniert. Wenn Sie die Webhook-Signaturverifizierung verwenden und Dritte versuchen, Ihnen einen gefälschten oder böswilligen Webhook zu senden, schlägt die Verifizierung fehl und resultiert in diesem Fehler. Fangen Sie ihn ab und antworten Sie mit dem Statuscode `400 Bad Request`. Wenn Sie diese Fehlermeldung erhalten, obwohl dies nicht zu erwarten war – beispielsweise bei Webhooks, von denen Sie wissen, dass sie von Stripe stammen – finden Sie weitere Hinweise in der Dokumentation zum [Überprüfen von Webhook-Signaturen](https://docs.stripe.com/webhooks.md#verify-events). Achten Sie insbesondere darauf, den richtigen Endopint-Geheimschlüssel zu verwenden. Dieser unterscheidet sich von Ihrem API-Schlüssel. | In der Stripe Python-Bibliothek gehören Fehlerobjekte zu `stripe.StripeError` und seinen Unterklassen. Verwenden Sie die Dokumentation für jede Klasse, um Tipps für Antworten zu erhalten. | Name | Klasse | Beschreibung | | ------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Zahlungsfehler | [Stripe. CardError](https://docs.stripe.com/error-handling.md#payment-errors) | Während der Zahlung ist eine der folgenden Fehlersituationen aufgetreten: - [Zahlung wegen Betrugsverdachts blockiert](https://docs.stripe.com/error-handling.md#payment-blocked) - [Zahlung von Aussteller abgewiesen](https://docs.stripe.com/error-handling.md#payment-declined). - [Andere Zahlungsfehler](https://docs.stripe.com/error-handling.md#other-payment-errors). | | Fehler „ungültige Anfrage“ | [Stripe. InvalidRequestError](https://docs.stripe.com/error-handling.md#invalid-request-errors) | Sie haben einen API-Aufruf mit den falschen Parametern, im falschen Status oder auf ungültige Weise ausgeführt. | | Verbindungsfehler | [Stripe. APIConnectionError](https://docs.stripe.com/error-handling.md#connection-errors) | Zwischen Ihrem Server und Stripe ist ein Netzwerkproblem aufgetreten. | | API-Fehler | [Stripe. APIError](https://docs.stripe.com/error-handling.md#api-errors) | Auf der Seite von Stripe ist ein Fehler aufgetreten. (Dies kommt sehr selten vor). | | Authentifizierungsfehler | [stripe.AuthenticationError](https://docs.stripe.com/error-handling.md#authentication-errors) | Stripe kann Sie mit den angegebenen Informationen nicht authentifizieren. | | Idempotenzfehler | [Stripe. IdempotencyError](https://docs.stripe.com/error-handling.md#idempotency-errors) | Sie haben einen [Idempotenz-Schlüssel](https://docs.stripe.com/api/idempotent_requests.md) für ein unerwartetes Ereignis verwendet, wie das Wiederholen einer Anfrage, jedoch mit Übergabe unterschiedlicher Parameter. | | Berechtigungsfehler | [Stripe. PermissionError](https://docs.stripe.com/error-handling.md#permission-errors) | Der für diese Anfrage verwendete API-Schlüssel verfügt nicht über die erforderlichen Berechtigungen. | | Ratenbegrenzungsfehler | [Stripe. RateLimitError](https://docs.stripe.com/error-handling.md#rate-limit-errors) | Sie haben in zu kurzer Zeit zu viele API-Aufrufe getätigt. | | Fehler beim Verifizieren der Signatur | [Stripe. SignatureVerificationError](https://docs.stripe.com/error-handling.md#signature-verification-errors) | Sie verwenden die [Signaturverifizierung](https://docs.stripe.com/webhooks.md#verify-events) von *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests)s und konnten die Authentizität eines Webhook-Ereignisses nicht bestätigen. | ## Zahlungsfehler Alle Angaben in diesem Abschnitt gelten auch für Zahlungen ohne Karte. Aus historischen Gründen haben Zahlungsfehler den Typ [stripe. CardError](https://docs.stripe.com/error-handling.md#card-error). Tatsächlich können sie aber bei jeder Zahlung ein Problem darstellen, unabhängig von der Zahlungsmethode. Zahlungsfehler – aus historischen Gründen auch manchmal als „Kartenfehler“ bezeichnet – decken ein breites Spektrum geläufiger Probleme ab. Sie sind auf drei Kategorien verteilt: - [Zahlung wegen Betrugsverdachts blockiert](https://docs.stripe.com/error-handling.md#payment-blocked) - [Zahlung von Aussteller abgewiesen](https://docs.stripe.com/error-handling.md#payment-declined) - [Andere Zahlungsfehler](https://docs.stripe.com/error-handling.md#other-payment-errors) Um diese Kategorien zu unterscheiden oder weitere Informationen zur Reaktion zu erhalten, sehen Sie unter [Fehlercode](https://docs.stripe.com/error-codes.md), [Ablehnungscode](https://docs.stripe.com/declines/codes.md) und [Zahlungsergebnis](https://docs.stripe.com/api/charges/object.md#charge_object-outcome) nach. (Um das Zahlungsergebnis von einem Fehlerobjekt zu finden, rufen Sie zuerst den [betroffenen Payment Intent](https://docs.stripe.com/api/errors.md#errors-payment_intent) und die [neueste von ihm erstellte Zahlung](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-latest_charge) auf. Im nachfolgenden Beispiel wird dies veranschaulicht.) #### 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.'); } } } ``` Nutzer/innen mit API-Version [2022-08-01](https://docs.stripe.com/upgrades.md#2022-08-01) oder älter: (Um das Zahlungsergebnis von einem Fehlerobjekt zu finden, rufen Sie zuerst den [betroffenen Payment Intent](https://docs.stripe.com/api/errors.md#errors-payment_intent) und die [neueste von ihm erstellte Zahlung](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-charges-data) auf. Im nachfolgenden Beispiel wird dies veranschaulicht.) #### 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.'); } } } ``` Mit Testkarten können Sie einige geläufige Arten von Zahlungsfehlern auslösen. In den folgenden Listen finden Sie Optionen: - [Aufgrund von Betrugsrisiko gesperrte Zahlungen simulieren](https://docs.stripe.com/testing.md#fraud-prevention) - [Abgelehnte Zahlungen und andere Kartenfehler simulieren](https://docs.stripe.com/testing.md#declined-payments) Der folgende Testcode demonstriert einige Möglichkeiten. #### Fehler beim Auslösen - Aufgrund Betrugsverdachts gesperrt #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_radarBlock', // Dies ist eine Testkarte, die aufgrund von Betrugsverdacht immer dann gesperrt wird, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Payment blocked for suspected fraud. ``` #### Fehler beim Auslösen - Vom Aussteller abgewiesen #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_visa_chargeDeclined', // Dies ist eine Testkarte, die vom Aussteller immer abgelehnt wird, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Payment declined by the issuer ``` #### Fehler beim Auslösen - Karte ist abgelaufen #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedExpiredCard', // Dies ist eine Testkarte, die immer dann als abgelaufen fehlschlägt, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Card expired. ``` #### Fehler beim Auslösen - Anderer Kartenfehler #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedProcessingError', // Dies ist eine Testkarte, die aufgrund eines Verarbeitungsfehlers fehlschlägt, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Other payment error. ``` ### Zahlung aufgrund Betrugsverdachts gesperrt | | | | | **Typ** | `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'` | | **Problem** | | *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), das Betrugspräventionssystem von Stripe, hat die Zahlung blockiert | | **Lösungen** | Dieser Fehler kann auftreten, wenn Ihre Integration ordnungsgemäß funktioniert. Fangen Sie ihn ab und fordern Sie den Kunden/die Kundin auf, eine andere Zahlungsmethode zu wählen. Probieren Sie Folgendes, damit weniger legitime Zahlungen blockiert werden: - [Optimieren Sie Ihre Radar-Integration](https://docs.stripe.com/radar/optimize-fraud-signals.md), um detailliertere Informationen zu erfassen. - Verwenden Sie [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) oder [Stripe Elements](https://docs.stripe.com/payments/elements.md) für vorgefertigte, optimierte Formularelemente. Kund/innen von *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) stehen folgende zusätzliche Optionen zur Verfügung: - Um eine bestimmte Zahlung auszunehmen, fügen Sie diese zu Ihrer Zulassungsliste hinzu. (Radar for Fraud Teams) - Passen Sie Ihre [Risikoeinstellungen](https://docs.stripe.com/radar/risk-settings.md) an, um Ihre Risikotoleranz zu ändern. (Radar for Fraud Teams) - Verwenden Sie [nutzerspezifische Regeln](https://docs.stripe.com/radar/rules.md), um die Kriterien für das Blockieren einer Zahlung zu ändern. (Radar for Fraud Teams) Sie können die Einstellungen Ihrer Integration mit [Testkarten, die Betrug simulieren](https://docs.stripe.com/radar/testing.md) testen. Wenn Sie nutzerdefinierte Radar-Regeln haben, folgen Sie den Test-Hinweisen in der [Dokumentation von Radar](https://docs.stripe.com/radar/testing.md). | ### Zahlung vom Aussteller abgewiesen | | | | | **Typ** | `stripe.CardError` | | **Codes** | `e.code == "card_declined"` | | **Problem** | Der Kartenaussteller hat die Zahlung abgelehnt. | | **Lösungen** | Dieser Fehler kann auftreten, obwohl Ihre Integration korrekt funktioniert. Er weist auf eine Aktion des Ausstellers hin, die legitim sein kann. Verwenden Sie den Ablehnungscode, um die nächsten angemessenen Schritte zu ermitteln. Entsprechende Antworten auf jeden Code finden Sie in der [Dokumentation zu Ablehnungscodes](https://docs.stripe.com/declines/codes.md). Sie können auch: - [Befolgen Sie die Empfehlungen, um die Ablehnungen durch Aussteller zu reduzieren](https://docs.stripe.com/declines/card.md#reducing-bank-declines). - Verwenden Sie [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) oder [Stripe Elements](https://docs.stripe.com/payments/elements.md) für vorgefertigte Formularelemente, die diese Empfehlungen implementiert haben. Testen Sie mit [Testkarten, die erfolgreiche und abgelehnte Zahlungen simulieren](https://docs.stripe.com/radar/testing.md), wie Ihre Integration mit Ablehnungen umgeht. | ### Andere Zahlungsfehler | | | | | **Typ** | `stripe.CardError` | | **Problem** | Es ist ein weiterer Zahlungsfehler aufgetreten. | | **Lösungen** | Dieser Fehler kann auftreten, obwohl Ihre Integration korrekt funktioniert. Verwenden Sie den Fehlercode, um die nächsten angemessenen Schritte zu ermitteln. Entsprechende Antworten auf jeden Code finden Sie in der [Dokumentation zu Fehlercodes](https://docs.stripe.com/error-codes.md). | ## Ungültige Anfragefehler | | | | | **Typ** | `stripe.InvalidRequestError` | | **Problem** | Sie haben einen API-Aufruf mit den falschen Parametern, im falschen Status oder auf ungültige Weise ausgeführt. | | **Lösungen** | In den meisten Fällen liegt das Problem bei der Anfrage selbst. Entweder sind seine Parameter ungültig oder sie kann im aktuellen Status Ihrer Integration nicht ausgeführt werden. - Einzelheiten zu diesem Problem finden Sie in der [Dokumentation zu Fehlercodes](https://docs.stripe.com/error-codes.md). - Unter dem Link `e.doc_url` erhalten Sie schnellen Zugriff auf Dokumentation zum Fehlercode. - Wenn der Fehler einen bestimmten Parameter beinhaltet, verwenden Sie `e.param`, um diesen zu bestimmen. | ## Verbindungsfehler | | | | | **Typ** | `stripe.APIConnectionError` | | **Problem** | Zwischen Ihrem Server und Stripe ist ein Netzwerkproblem aufgetreten. | | **Lösungen** | Behandeln Sie das Ergebnis des API-Aufrufs als unbestimmt. Das heißt, gehen Sie nicht davon aus, dass es erfolgreich war oder dass es fehlgeschlagen ist. So finden Sie heraus, ob es erfolgreich war: - Rufen Sie das entsprechende Objekt von Stripe ab und prüfen Sie seinen Status. - Überwachen Sie die Webhook-Benachrichtigung, ob der Vorgang erfolgreich war oder fehlgeschlagen ist. So unterstützen Sie die Wiederherstellung nach Verbindungsfehlern: - Verwenden Sie beim Erstellen oder Aktualisieren eines Objekts einen [Idempotenz-Schlüssel](https://docs.stripe.com/api/idempotent_requests.md). Falls ein Verbindungsfehler auftritt, können Sie die Anfrage dann sicher wiederholen, ohne dass das Risiko besteht, dass ein zweites Objekt erstellt wird oder dass die Aktualisierung zweimal durchgeführt wird. Wiederholen Sie die Anfrage mit demselben Idempotenz-Schlüssel, bis Sie eine eindeutige Erfolgs- oder Fehlermeldung erhalten. Weitere Hinweise zu dieser Strategie finden Sie unter [Low-Level-Fehler beheben](https://docs.stripe.com/error-low-level.md#idempotency). - Aktivieren Sie [automatische erneute Versuche](https://github.com/stripe/stripe-java?tab=readme-ov-file#configuring-automatic-retries). Dann generiert Stripe Idempotenz-Schlüssel für Sie und wiederholt an Ihrer Stelle Anfragen, sobald es sicher ist. Dieser Fehler kann andere verbergen. Es ist möglich, dass ein anderer Fehler zum Vorschein tritt, sobald der Verbindungsfehler behoben wurde. Durchsuchen Sie all diese Lösungen nach Fehlern, genau wie in der ursprünglichen Anfrage. | ## API-Fehler | | | | | **Typ** | `stripe.APIError` | | **Problem** | Auf der Seite von Stripe ist ein Fehler aufgetreten. (Dies kommt sehr selten vor). | | **Lösungen** | Behandeln Sie das Ergebnis des API-Aufrufs als unbestimmt. Das heißt, gehen Sie weder davon aus, dass es erfolgreich war, noch dass es fehlgeschlagen ist. Über *Webhooks* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) erhalten Sie Informationen zu dem Ergebnis. Nach Möglichkeit löst Stripe Webhooks für alle neuen Objekte aus, die wir erstellen, während wir an der Lösung für ein Problem arbeiten. Um Ihre Integration so solide wie möglich für ungewöhnliche Situationen zu gestalten, informieren Sie sich unter [dieser erweiterten Diskussion zu Serverfehlern.](https://docs.stripe.com/error-low-level.md#server-errors) | ## Authentifizierungsfehler | | | | | **Typ** | `stripe.AuthenticationError` | | **Problem** | Stripe kann Sie mit den angegebenen Informationen nicht authentifizieren. | | **Lösungen** | - Verwenden Sie den korrekten [API-Schlüssel](https://docs.stripe.com/keys.md). - Stellen Sie sicher, dass Sie keinen Schlüssel verwenden, den Sie [„rotiert“ oder widerrufen](https://docs.stripe.com/keys.md#rolling-keys) haben. | ## Idempotenz-Fehler | | | | | **Typ** | `stripe.IdempotencyError` | | **Problem** | Sie haben einen [Idempotenz-Schlüssel](https://docs.stripe.com/api/idempotent_requests.md) für ein unerwartetes Ereignis verwendet, wie das Wiederholen einer Anfrage, jedoch mit Übergabe unterschiedlicher Parameter. | | **Lösungen** | - Nach Verwenden eines Idempotenz-Schlüssels kann dieser nur für identische API-Aufrufe wiederverwendet werden. - Verwenden Sie Idempotenzschlüssel unter 255 Zeichen. | ## Berechtigungsfehler | | | | | **Typ** | `stripe.PermissionError` | | **Problem** | Der für diese Anfrage verwendete API-Schlüssel verfügt nicht über die erforderlichen Berechtigungen. | | **Lösungen** | - Stellen Sie sicher, dass Sie keinen [eingeschränkten API-Schlüssel](https://docs.stripe.com/keys-best-practices.md#limit-access) für einen Dienst verwenden, auf den dieser keinen Zugriff hat. - Führen Sie keine Aktionen im Dashboard aus, während Sie mit einer [Nutzerrolle](https://docs.stripe.com/get-started/account/teams/roles.md) ohne Berechtigung angemeldet sind. | ## Ratenbegrenzungsfehler | | | | | **Typ** | `stripe.RateLimitError` | | **Problem** | Sie haben in zu kurzer Zeit zu viele API-Aufrufe getätigt. | | **Lösungen** | - Wenn ein einzelner API-Aufruf diesen Fehler auslöst, warten Sie und versuchen Sie es erneut. - Um die Ratenbegrenzung automatisch zu handhaben, wiederholen Sie den API-Aufruf nach einer Verzögerung und erhöhen Sie diese exponentiell, wenn der Fehler weiterhin auftritt. Weitere Hinweise finden Sie in der Dokumentation zu [Ratenbegrenzungen](https://docs.stripe.com/rate-limits.md). - Wenn Sie mit einem starken Anstieg des Datenverkehrs rechnen und eine Erhöhung der Ratenbegrenzung anfordern möchten, [kontaktieren Sie den Support](https://support.stripe.com/) im Voraus. | ## Fehler beim Verifizieren der Signatur | | | | | **Typ** | `stripe.SignatureVerificationError` | | **Problem** | Sie verwenden die [Signaturverifizierung](https://docs.stripe.com/webhooks.md#verify-events) von *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests)s und konnten die Authentizität eines Webhook-Ereignisses nicht bestätigen. | | **Lösungen** | Dieser Fehler kann auftreten, wenn Ihre Integration ordnungsgemäß funktioniert. Wenn Sie die Webhook-Signaturverifizierung verwenden und Dritte versuchen, Ihnen einen gefälschten oder böswilligen Webhook zu senden, schlägt die Verifizierung fehl und resultiert in diesem Fehler. Fangen Sie ihn ab und antworten Sie mit dem Statuscode `400 Bad Request`. Wenn Sie diese Fehlermeldung erhalten, obwohl dies nicht zu erwarten war – beispielsweise bei Webhooks, von denen Sie wissen, dass sie von Stripe stammen – finden Sie weitere Hinweise in der Dokumentation zum [Überprüfen von Webhook-Signaturen](https://docs.stripe.com/webhooks.md#verify-events). Achten Sie insbesondere darauf, den richtigen Endopint-Geheimschlüssel zu verwenden. Dieser unterscheidet sich von Ihrem API-Schlüssel. | In der Stripe PHP-Bibliothek gehört jeder Fehlertyp zu einer eigenen Klasse. Hinweise zum richtigen Vorgehen finden Sie in der Dokumentation zu den einzelnen Klassen. | Name | Klasse | Beschreibung | | ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Zahlungsfehler | [Stripe\Exception\CardException](https://docs.stripe.com/error-handling.md#payment-errors) | Während der Zahlung ist eine der folgenden Fehlersituationen aufgetreten: - [Zahlung wegen Betrugsverdachts blockiert](https://docs.stripe.com/error-handling.md#payment-blocked) - [Zahlung von Aussteller abgewiesen](https://docs.stripe.com/error-handling.md#payment-declined). - [Andere Zahlungsfehler](https://docs.stripe.com/error-handling.md#other-payment-errors). | | Fehler „ungültige Anfrage“ | [Stripe\Exception\InvalidRequestException](https://docs.stripe.com/error-handling.md#invalid-request-errors) | Sie haben einen API-Aufruf mit den falschen Parametern, im falschen Status oder auf ungültige Weise ausgeführt. | | Verbindungsfehler | [Stripe\Exception\ApiConnectionException](https://docs.stripe.com/error-handling.md#connection-errors) | Zwischen Ihrem Server und Stripe ist ein Netzwerkproblem aufgetreten. | | API-Fehler | [Stripe\Exception\ApiErrorException](https://docs.stripe.com/error-handling.md#api-errors) | Auf der Seite von Stripe ist ein Fehler aufgetreten. (Dies kommt sehr selten vor). | | Authentifizierungsfehler | [Stripe\Exception\AuthenticationException](https://docs.stripe.com/error-handling.md#authentication-errors) | Stripe kann Sie mit den angegebenen Informationen nicht authentifizieren. | | Idempotenzfehler | [Stripe\Exception\IdempotencyException](https://docs.stripe.com/error-handling.md#idempotency-errors) | Sie haben einen [Idempotenz-Schlüssel](https://docs.stripe.com/api/idempotent_requests.md) für ein unerwartetes Ereignis verwendet, wie das Wiederholen einer Anfrage, jedoch mit Übergabe unterschiedlicher Parameter. | | Berechtigungsfehler | [Stripe\Exception\PermissionException](https://docs.stripe.com/error-handling.md#permission-errors) | Der für diese Anfrage verwendete API-Schlüssel verfügt nicht über die erforderlichen Berechtigungen. | | Ratenbegrenzungsfehler | [Stripe\Exception\RateLimitException](https://docs.stripe.com/error-handling.md#rate-limit-errors) | Sie haben in zu kurzer Zeit zu viele API-Aufrufe getätigt. | | Fehler beim Verifizieren der Signatur | [Stripe\Exception\SignatureVerificationException](https://docs.stripe.com/error-handling.md#signature-verification-errors) | Sie verwenden die [Signaturverifizierung](https://docs.stripe.com/webhooks.md#verify-events) von *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests)s und konnten die Authentizität eines Webhook-Ereignisses nicht bestätigen. | ## Zahlungsfehler Alle Angaben in diesem Abschnitt gelten auch für Zahlungen ohne Karte. Aus historischen Gründen haben Zahlungsfehler den Typ [Stripe\Exception\CardException](https://docs.stripe.com/error-handling.md#card-error). Tatsächlich können sie aber bei jeder Zahlung ein Problem darstellen, unabhängig von der Zahlungsmethode. Zahlungsfehler – aus historischen Gründen auch manchmal als „Kartenfehler“ bezeichnet – decken ein breites Spektrum geläufiger Probleme ab. Sie sind auf drei Kategorien verteilt: - [Zahlung wegen Betrugsverdachts blockiert](https://docs.stripe.com/error-handling.md#payment-blocked) - [Zahlung von Aussteller abgewiesen](https://docs.stripe.com/error-handling.md#payment-declined) - [Andere Zahlungsfehler](https://docs.stripe.com/error-handling.md#other-payment-errors) Um diese Kategorien zu unterscheiden oder weitere Informationen zur Reaktion zu erhalten, sehen Sie unter [Fehlercode](https://docs.stripe.com/error-codes.md), [Ablehnungscode](https://docs.stripe.com/declines/codes.md) und [Zahlungsergebnis](https://docs.stripe.com/api/charges/object.md#charge_object-outcome) nach. (Um das Zahlungsergebnis von einem Fehlerobjekt zu finden, rufen Sie zuerst den [betroffenen Payment Intent](https://docs.stripe.com/api/errors.md#errors-payment_intent) und die [neueste von ihm erstellte Zahlung](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-latest_charge) auf. Im nachfolgenden Beispiel wird dies veranschaulicht.) #### 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.'); } } } ``` Nutzer/innen mit API-Version [2022-08-01](https://docs.stripe.com/upgrades.md#2022-08-01) oder älter: (Um das Zahlungsergebnis von einem Fehlerobjekt zu finden, rufen Sie zuerst den [betroffenen Payment Intent](https://docs.stripe.com/api/errors.md#errors-payment_intent) und die [neueste von ihm erstellte Zahlung](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-charges-data) auf. Im nachfolgenden Beispiel wird dies veranschaulicht.) #### 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.'); } } } ``` Mit Testkarten können Sie einige geläufige Arten von Zahlungsfehlern auslösen. In den folgenden Listen finden Sie Optionen: - [Aufgrund von Betrugsrisiko gesperrte Zahlungen simulieren](https://docs.stripe.com/testing.md#fraud-prevention) - [Abgelehnte Zahlungen und andere Kartenfehler simulieren](https://docs.stripe.com/testing.md#declined-payments) Der folgende Testcode demonstriert einige Möglichkeiten. #### Fehler beim Auslösen - Aufgrund Betrugsverdachts gesperrt #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_radarBlock', // Dies ist eine Testkarte, die aufgrund von Betrugsverdacht immer dann gesperrt wird, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Payment blocked for suspected fraud. ``` #### Fehler beim Auslösen - Vom Aussteller abgewiesen #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_visa_chargeDeclined', // Dies ist eine Testkarte, die vom Aussteller immer abgelehnt wird, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Payment declined by the issuer ``` #### Fehler beim Auslösen - Karte ist abgelaufen #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedExpiredCard', // Dies ist eine Testkarte, die immer dann als abgelaufen fehlschlägt, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Card expired. ``` #### Fehler beim Auslösen - Anderer Kartenfehler #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedProcessingError', // Dies ist eine Testkarte, die aufgrund eines Verarbeitungsfehlers fehlschlägt, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Other payment error. ``` ### Zahlung aufgrund Betrugsverdachts gesperrt | | | | | **Typ** | `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'` | | **Problem** | | *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), das Betrugspräventionssystem von Stripe, hat die Zahlung blockiert | | **Lösungen** | Dieser Fehler kann auftreten, wenn Ihre Integration ordnungsgemäß funktioniert. Fangen Sie ihn ab und fordern Sie den Kunden/die Kundin auf, eine andere Zahlungsmethode zu wählen. Probieren Sie Folgendes, damit weniger legitime Zahlungen blockiert werden: - [Optimieren Sie Ihre Radar-Integration](https://docs.stripe.com/radar/optimize-fraud-signals.md), um detailliertere Informationen zu erfassen. - Verwenden Sie [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) oder [Stripe Elements](https://docs.stripe.com/payments/elements.md) für vorgefertigte, optimierte Formularelemente. Kund/innen von *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) stehen folgende zusätzliche Optionen zur Verfügung: - Um eine bestimmte Zahlung auszunehmen, fügen Sie diese zu Ihrer Zulassungsliste hinzu. (Radar for Fraud Teams) - Passen Sie Ihre [Risikoeinstellungen](https://docs.stripe.com/radar/risk-settings.md) an, um Ihre Risikotoleranz zu ändern. (Radar for Fraud Teams) - Verwenden Sie [nutzerspezifische Regeln](https://docs.stripe.com/radar/rules.md), um die Kriterien für das Blockieren einer Zahlung zu ändern. (Radar for Fraud Teams) Sie können die Einstellungen Ihrer Integration mit [Testkarten, die Betrug simulieren](https://docs.stripe.com/radar/testing.md) testen. Wenn Sie nutzerdefinierte Radar-Regeln haben, folgen Sie den Test-Hinweisen in der [Dokumentation von Radar](https://docs.stripe.com/radar/testing.md). | ### Zahlung vom Aussteller abgewiesen | | | | | **Typ** | `Stripe\Exception\CardException` | | **Codes** | `$e->getError()->code == "card_declined"` | | **Problem** | Der Kartenaussteller hat die Zahlung abgelehnt. | | **Lösungen** | Dieser Fehler kann auftreten, obwohl Ihre Integration korrekt funktioniert. Er weist auf eine Aktion des Ausstellers hin, die legitim sein kann. Verwenden Sie den Ablehnungscode, um die nächsten angemessenen Schritte zu ermitteln. Entsprechende Antworten auf jeden Code finden Sie in der [Dokumentation zu Ablehnungscodes](https://docs.stripe.com/declines/codes.md). Sie können auch: - [Befolgen Sie die Empfehlungen, um die Ablehnungen durch Aussteller zu reduzieren](https://docs.stripe.com/declines/card.md#reducing-bank-declines). - Verwenden Sie [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) oder [Stripe Elements](https://docs.stripe.com/payments/elements.md) für vorgefertigte Formularelemente, die diese Empfehlungen implementiert haben. Testen Sie mit [Testkarten, die erfolgreiche und abgelehnte Zahlungen simulieren](https://docs.stripe.com/radar/testing.md), wie Ihre Integration mit Ablehnungen umgeht. | ### Andere Zahlungsfehler | | | | | **Typ** | `Stripe\Exception\CardException` | | **Problem** | Es ist ein weiterer Zahlungsfehler aufgetreten. | | **Lösungen** | Dieser Fehler kann auftreten, obwohl Ihre Integration korrekt funktioniert. Verwenden Sie den Fehlercode, um die nächsten angemessenen Schritte zu ermitteln. Entsprechende Antworten auf jeden Code finden Sie in der [Dokumentation zu Fehlercodes](https://docs.stripe.com/error-codes.md). | ## Ungültige Anfragefehler | | | | | **Typ** | `Stripe\Exception\InvalidRequestException` | | **Problem** | Sie haben einen API-Aufruf mit den falschen Parametern, im falschen Status oder auf ungültige Weise ausgeführt. | | **Lösungen** | In den meisten Fällen liegt das Problem bei der Anfrage selbst. Entweder sind seine Parameter ungültig oder sie kann im aktuellen Status Ihrer Integration nicht ausgeführt werden. - Einzelheiten zu diesem Problem finden Sie in der [Dokumentation zu Fehlercodes](https://docs.stripe.com/error-codes.md). - Unter dem Link `e->getError()->doc_url` erhalten Sie schnellen Zugriff auf Dokumentation zum Fehlercode. - Wenn der Fehler einen bestimmten Parameter beinhaltet, verwenden Sie `e->getError()->param`, um diesen zu bestimmen. | ## Verbindungsfehler | | | | | **Typ** | `Stripe\Exception\ApiConnectionException` | | **Problem** | Zwischen Ihrem Server und Stripe ist ein Netzwerkproblem aufgetreten. | | **Lösungen** | Behandeln Sie das Ergebnis des API-Aufrufs als unbestimmt. Das heißt, gehen Sie nicht davon aus, dass es erfolgreich war oder dass es fehlgeschlagen ist. So finden Sie heraus, ob es erfolgreich war: - Rufen Sie das entsprechende Objekt von Stripe ab und prüfen Sie seinen Status. - Überwachen Sie die Webhook-Benachrichtigung, ob der Vorgang erfolgreich war oder fehlgeschlagen ist. So unterstützen Sie die Wiederherstellung nach Verbindungsfehlern: - Verwenden Sie beim Erstellen oder Aktualisieren eines Objekts einen [Idempotenz-Schlüssel](https://docs.stripe.com/api/idempotent_requests.md). Falls ein Verbindungsfehler auftritt, können Sie die Anfrage dann sicher wiederholen, ohne dass das Risiko besteht, dass ein zweites Objekt erstellt wird oder dass die Aktualisierung zweimal durchgeführt wird. Wiederholen Sie die Anfrage mit demselben Idempotenz-Schlüssel, bis Sie eine eindeutige Erfolgs- oder Fehlermeldung erhalten. Weitere Hinweise zu dieser Strategie finden Sie unter [Low-Level-Fehler beheben](https://docs.stripe.com/error-low-level.md#idempotency). - Aktivieren Sie [automatische erneute Versuche](https://github.com/stripe/stripe-java?tab=readme-ov-file#configuring-automatic-retries). Dann generiert Stripe Idempotenz-Schlüssel für Sie und wiederholt an Ihrer Stelle Anfragen, sobald es sicher ist. Dieser Fehler kann andere verbergen. Es ist möglich, dass ein anderer Fehler zum Vorschein tritt, sobald der Verbindungsfehler behoben wurde. Durchsuchen Sie all diese Lösungen nach Fehlern, genau wie in der ursprünglichen Anfrage. | ## API-Fehler | | | | | **Typ** | `Stripe\Exception\APIException` | | **Problem** | Auf der Seite von Stripe ist ein Fehler aufgetreten. (Dies kommt sehr selten vor). | | **Lösungen** | Behandeln Sie das Ergebnis des API-Aufrufs als unbestimmt. Das heißt, gehen Sie weder davon aus, dass es erfolgreich war, noch dass es fehlgeschlagen ist. Über *Webhooks* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) erhalten Sie Informationen zu dem Ergebnis. Nach Möglichkeit löst Stripe Webhooks für alle neuen Objekte aus, die wir erstellen, während wir an der Lösung für ein Problem arbeiten. Um Ihre Integration so solide wie möglich für ungewöhnliche Situationen zu gestalten, informieren Sie sich unter [dieser erweiterten Diskussion zu Serverfehlern.](https://docs.stripe.com/error-low-level.md#server-errors) | ## Authentifizierungsfehler | | | | | **Typ** | `Stripe\Exception\AuthenticationException` | | **Problem** | Stripe kann Sie mit den angegebenen Informationen nicht authentifizieren. | | **Lösungen** | - Verwenden Sie den korrekten [API-Schlüssel](https://docs.stripe.com/keys.md). - Stellen Sie sicher, dass Sie keinen Schlüssel verwenden, den Sie [„rotiert“ oder widerrufen](https://docs.stripe.com/keys.md#rolling-keys) haben. | ## Idempotenz-Fehler | | | | | **Typ** | `Stripe\Exception\IdempotencyException` | | **Problem** | Sie haben einen [Idempotenz-Schlüssel](https://docs.stripe.com/api/idempotent_requests.md) für ein unerwartetes Ereignis verwendet, wie das Wiederholen einer Anfrage, jedoch mit Übergabe unterschiedlicher Parameter. | | **Lösungen** | - Nach Verwenden eines Idempotenz-Schlüssels kann dieser nur für identische API-Aufrufe wiederverwendet werden. - Verwenden Sie Idempotenzschlüssel unter 255 Zeichen. | ## Berechtigungsfehler | | | | | **Typ** | `Stripe\Exception\PermissionException` | | **Problem** | Der für diese Anfrage verwendete API-Schlüssel verfügt nicht über die erforderlichen Berechtigungen. | | **Lösungen** | - Stellen Sie sicher, dass Sie keinen [eingeschränkten API-Schlüssel](https://docs.stripe.com/keys-best-practices.md#limit-access) für einen Dienst verwenden, auf den dieser keinen Zugriff hat. - Führen Sie keine Aktionen im Dashboard aus, während Sie mit einer [Nutzerrolle](https://docs.stripe.com/get-started/account/teams/roles.md) ohne Berechtigung angemeldet sind. | ## Ratenbegrenzungsfehler | | | | | **Typ** | `Stripe\Exception\RateLimitException` | | **Problem** | Sie haben in zu kurzer Zeit zu viele API-Aufrufe getätigt. | | **Lösungen** | - Wenn ein einzelner API-Aufruf diesen Fehler auslöst, warten Sie und versuchen Sie es erneut. - Um die Ratenbegrenzung automatisch zu handhaben, wiederholen Sie den API-Aufruf nach einer Verzögerung und erhöhen Sie diese exponentiell, wenn der Fehler weiterhin auftritt. Weitere Hinweise finden Sie in der Dokumentation zu [Ratenbegrenzungen](https://docs.stripe.com/rate-limits.md). - Wenn Sie mit einem starken Anstieg des Datenverkehrs rechnen und eine Erhöhung der Ratenbegrenzung anfordern möchten, [kontaktieren Sie den Support](https://support.stripe.com/) im Voraus. | ## Fehler beim Verifizieren der Signatur | | | | | **Typ** | `Stripe\Exception\SignatureVerificationException` | | **Problem** | Sie verwenden die [Signaturverifizierung](https://docs.stripe.com/webhooks.md#verify-events) von *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests)s und konnten die Authentizität eines Webhook-Ereignisses nicht bestätigen. | | **Lösungen** | Dieser Fehler kann auftreten, wenn Ihre Integration ordnungsgemäß funktioniert. Wenn Sie die Webhook-Signaturverifizierung verwenden und Dritte versuchen, Ihnen einen gefälschten oder böswilligen Webhook zu senden, schlägt die Verifizierung fehl und resultiert in diesem Fehler. Fangen Sie ihn ab und antworten Sie mit dem Statuscode `400 Bad Request`. Wenn Sie diese Fehlermeldung erhalten, obwohl dies nicht zu erwarten war – beispielsweise bei Webhooks, von denen Sie wissen, dass sie von Stripe stammen – finden Sie weitere Hinweise in der Dokumentation zum [Überprüfen von Webhook-Signaturen](https://docs.stripe.com/webhooks.md#verify-events). Achten Sie insbesondere darauf, den richtigen Endopint-Geheimschlüssel zu verwenden. Dieser unterscheidet sich von Ihrem API-Schlüssel. | In der Stripe Java-Bibliothek gehört jeder Fehlertyp zu einer eigenen Klasse. Hinweise zum richtigen Vorgehen finden Sie in der Dokumentation zu den einzelnen Klassen. | Name | Klasse | Beschreibung | | ------------------------------------- | --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Zahlungsfehler | [CardException](https://docs.stripe.com/error-handling.md#payment-errors) | Während der Zahlung ist eine der folgenden Fehlersituationen aufgetreten: - [Zahlung wegen Betrugsverdachts blockiert](https://docs.stripe.com/error-handling.md#payment-blocked) - [Zahlung von Aussteller abgewiesen](https://docs.stripe.com/error-handling.md#payment-declined). - [Andere Zahlungsfehler](https://docs.stripe.com/error-handling.md#other-payment-errors). | | Fehler „ungültige Anfrage“ | [InvalidRequestException](https://docs.stripe.com/error-handling.md#invalid-request-errors) | Sie haben einen API-Aufruf mit den falschen Parametern, im falschen Status oder auf ungültige Weise ausgeführt. | | Verbindungsfehler | [ApiConnectionException](https://docs.stripe.com/error-handling.md#connection-errors) | Zwischen Ihrem Server und Stripe ist ein Netzwerkproblem aufgetreten. | | API-Fehler | [APIException](https://docs.stripe.com/error-handling.md#api-errors) | Auf der Seite von Stripe ist ein Fehler aufgetreten. (Dies kommt sehr selten vor). | | Authentifizierungsfehler | [AuthenticationException](https://docs.stripe.com/error-handling.md#authentication-errors) | Stripe kann Sie mit den angegebenen Informationen nicht authentifizieren. | | Idempotenzfehler | [IdempotencyException](https://docs.stripe.com/error-handling.md#idempotency-errors) | Sie haben einen [Idempotenz-Schlüssel](https://docs.stripe.com/api/idempotent_requests.md) für ein unerwartetes Ereignis verwendet, wie das Wiederholen einer Anfrage, jedoch mit Übergabe unterschiedlicher Parameter. | | Berechtigungsfehler | [PermissionException](https://docs.stripe.com/error-handling.md#permission-errors) | Der für diese Anfrage verwendete API-Schlüssel verfügt nicht über die erforderlichen Berechtigungen. | | Ratenbegrenzungsfehler | [RateLimitException](https://docs.stripe.com/error-handling.md#rate-limit-errors) | Sie haben in zu kurzer Zeit zu viele API-Aufrufe getätigt. | | Fehler beim Verifizieren der Signatur | [SignatureVerificationException](https://docs.stripe.com/error-handling.md#signature-verification-errors) | Sie verwenden die [Signaturverifizierung](https://docs.stripe.com/webhooks.md#verify-events) von *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests)s und konnten die Authentizität eines Webhook-Ereignisses nicht bestätigen. | ## Zahlungsfehler Alle Angaben in diesem Abschnitt gelten auch für Zahlungen ohne Karte. Aus historischen Gründen haben Zahlungsfehler den Typ [CardException](https://docs.stripe.com/error-handling.md#card-error). Tatsächlich können sie aber bei jeder Zahlung ein Problem darstellen, unabhängig von der Zahlungsmethode. Zahlungsfehler – aus historischen Gründen auch manchmal als „Kartenfehler“ bezeichnet – decken ein breites Spektrum geläufiger Probleme ab. Sie sind auf drei Kategorien verteilt: - [Zahlung wegen Betrugsverdachts blockiert](https://docs.stripe.com/error-handling.md#payment-blocked) - [Zahlung von Aussteller abgewiesen](https://docs.stripe.com/error-handling.md#payment-declined) - [Andere Zahlungsfehler](https://docs.stripe.com/error-handling.md#other-payment-errors) Um diese Kategorien zu unterscheiden oder weitere Informationen zur Reaktion zu erhalten, sehen Sie unter [Fehlercode](https://docs.stripe.com/error-codes.md), [Ablehnungscode](https://docs.stripe.com/declines/codes.md) und [Zahlungsergebnis](https://docs.stripe.com/api/charges/object.md#charge_object-outcome) nach. (Um das Zahlungsergebnis von einem Fehlerobjekt zu finden, rufen Sie zuerst den [betroffenen Payment Intent](https://docs.stripe.com/api/errors.md#errors-payment_intent) und die [neueste von ihm erstellte Zahlung](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-latest_charge) auf. Im nachfolgenden Beispiel wird dies veranschaulicht.) #### 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.'); } } } ``` Nutzer/innen mit API-Version [2022-08-01](https://docs.stripe.com/upgrades.md#2022-08-01) oder älter: (Um das Zahlungsergebnis von einem Fehlerobjekt zu finden, rufen Sie zuerst den [betroffenen Payment Intent](https://docs.stripe.com/api/errors.md#errors-payment_intent) und die [neueste von ihm erstellte Zahlung](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-charges-data) auf. Im nachfolgenden Beispiel wird dies veranschaulicht.) #### 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.'); } } } ``` Mit Testkarten können Sie einige geläufige Arten von Zahlungsfehlern auslösen. In den folgenden Listen finden Sie Optionen: - [Aufgrund von Betrugsrisiko gesperrte Zahlungen simulieren](https://docs.stripe.com/testing.md#fraud-prevention) - [Abgelehnte Zahlungen und andere Kartenfehler simulieren](https://docs.stripe.com/testing.md#declined-payments) Der folgende Testcode demonstriert einige Möglichkeiten. #### Fehler beim Auslösen - Aufgrund Betrugsverdachts gesperrt #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_radarBlock', // Dies ist eine Testkarte, die aufgrund von Betrugsverdacht immer dann gesperrt wird, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Payment blocked for suspected fraud. ``` #### Fehler beim Auslösen - Vom Aussteller abgewiesen #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_visa_chargeDeclined', // Dies ist eine Testkarte, die vom Aussteller immer abgelehnt wird, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Payment declined by the issuer ``` #### Fehler beim Auslösen - Karte ist abgelaufen #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedExpiredCard', // Dies ist eine Testkarte, die immer dann als abgelaufen fehlschlägt, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Card expired. ``` #### Fehler beim Auslösen - Anderer Kartenfehler #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedProcessingError', // Dies ist eine Testkarte, die aufgrund eines Verarbeitungsfehlers fehlschlägt, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Other payment error. ``` ### Zahlung aufgrund Betrugsverdachts gesperrt | | | | | **Typ** | `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"` | | **Problem** | | *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), das Betrugspräventionssystem von Stripe, hat die Zahlung blockiert | | **Lösungen** | Dieser Fehler kann auftreten, wenn Ihre Integration ordnungsgemäß funktioniert. Fangen Sie ihn ab und fordern Sie den Kunden/die Kundin auf, eine andere Zahlungsmethode zu wählen. Probieren Sie Folgendes, damit weniger legitime Zahlungen blockiert werden: - [Optimieren Sie Ihre Radar-Integration](https://docs.stripe.com/radar/optimize-fraud-signals.md), um detailliertere Informationen zu erfassen. - Verwenden Sie [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) oder [Stripe Elements](https://docs.stripe.com/payments/elements.md) für vorgefertigte, optimierte Formularelemente. Kund/innen von *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) stehen folgende zusätzliche Optionen zur Verfügung: - Um eine bestimmte Zahlung auszunehmen, fügen Sie diese zu Ihrer Zulassungsliste hinzu. (Radar for Fraud Teams) - Passen Sie Ihre [Risikoeinstellungen](https://docs.stripe.com/radar/risk-settings.md) an, um Ihre Risikotoleranz zu ändern. (Radar for Fraud Teams) - Verwenden Sie [nutzerspezifische Regeln](https://docs.stripe.com/radar/rules.md), um die Kriterien für das Blockieren einer Zahlung zu ändern. (Radar for Fraud Teams) Sie können die Einstellungen Ihrer Integration mit [Testkarten, die Betrug simulieren](https://docs.stripe.com/radar/testing.md) testen. Wenn Sie nutzerdefinierte Radar-Regeln haben, folgen Sie den Test-Hinweisen in der [Dokumentation von Radar](https://docs.stripe.com/radar/testing.md). | ### Zahlung vom Aussteller abgewiesen | | | | | **Typ** | `CardException` | | **Codes** | `e.getCode() == "card_declined"` | | **Problem** | Der Kartenaussteller hat die Zahlung abgelehnt. | | **Lösungen** | Dieser Fehler kann auftreten, obwohl Ihre Integration korrekt funktioniert. Er weist auf eine Aktion des Ausstellers hin, die legitim sein kann. Verwenden Sie den Ablehnungscode, um die nächsten angemessenen Schritte zu ermitteln. Entsprechende Antworten auf jeden Code finden Sie in der [Dokumentation zu Ablehnungscodes](https://docs.stripe.com/declines/codes.md). Sie können auch: - [Befolgen Sie die Empfehlungen, um die Ablehnungen durch Aussteller zu reduzieren](https://docs.stripe.com/declines/card.md#reducing-bank-declines). - Verwenden Sie [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) oder [Stripe Elements](https://docs.stripe.com/payments/elements.md) für vorgefertigte Formularelemente, die diese Empfehlungen implementiert haben. Testen Sie mit [Testkarten, die erfolgreiche und abgelehnte Zahlungen simulieren](https://docs.stripe.com/radar/testing.md), wie Ihre Integration mit Ablehnungen umgeht. | ### Andere Zahlungsfehler | | | | | **Typ** | `CardException` | | **Problem** | Es ist ein weiterer Zahlungsfehler aufgetreten. | | **Lösungen** | Dieser Fehler kann auftreten, obwohl Ihre Integration korrekt funktioniert. Verwenden Sie den Fehlercode, um die nächsten angemessenen Schritte zu ermitteln. Entsprechende Antworten auf jeden Code finden Sie in der [Dokumentation zu Fehlercodes](https://docs.stripe.com/error-codes.md). | ## Ungültige Anfragefehler | | | | | **Typ** | `InvalidRequestException` | | **Problem** | Sie haben einen API-Aufruf mit den falschen Parametern, im falschen Status oder auf ungültige Weise ausgeführt. | | **Lösungen** | In den meisten Fällen liegt das Problem bei der Anfrage selbst. Entweder sind seine Parameter ungültig oder sie kann im aktuellen Status Ihrer Integration nicht ausgeführt werden. - Einzelheiten zu diesem Problem finden Sie in der [Dokumentation zu Fehlercodes](https://docs.stripe.com/error-codes.md). - Unter dem Link `e.getDocUrl()` erhalten Sie schnellen Zugriff auf Dokumentation zum Fehlercode. - Wenn der Fehler einen bestimmten Parameter beinhaltet, verwenden Sie `e.getParam()`, um diesen zu bestimmen. | ## Verbindungsfehler | | | | | **Typ** | `APIConnectionException` | | **Problem** | Zwischen Ihrem Server und Stripe ist ein Netzwerkproblem aufgetreten. | | **Lösungen** | Behandeln Sie das Ergebnis des API-Aufrufs als unbestimmt. Das heißt, gehen Sie nicht davon aus, dass es erfolgreich war oder dass es fehlgeschlagen ist. So finden Sie heraus, ob es erfolgreich war: - Rufen Sie das entsprechende Objekt von Stripe ab und prüfen Sie seinen Status. - Überwachen Sie die Webhook-Benachrichtigung, ob der Vorgang erfolgreich war oder fehlgeschlagen ist. So unterstützen Sie die Wiederherstellung nach Verbindungsfehlern: - Verwenden Sie beim Erstellen oder Aktualisieren eines Objekts einen [Idempotenz-Schlüssel](https://docs.stripe.com/api/idempotent_requests.md). Falls ein Verbindungsfehler auftritt, können Sie die Anfrage dann sicher wiederholen, ohne dass das Risiko besteht, dass ein zweites Objekt erstellt wird oder dass die Aktualisierung zweimal durchgeführt wird. Wiederholen Sie die Anfrage mit demselben Idempotenz-Schlüssel, bis Sie eine eindeutige Erfolgs- oder Fehlermeldung erhalten. Weitere Hinweise zu dieser Strategie finden Sie unter [Low-Level-Fehler beheben](https://docs.stripe.com/error-low-level.md#idempotency). - Aktivieren Sie [automatische erneute Versuche](https://github.com/stripe/stripe-java?tab=readme-ov-file#configuring-automatic-retries). Dann generiert Stripe Idempotenz-Schlüssel für Sie und wiederholt an Ihrer Stelle Anfragen, sobald es sicher ist. Dieser Fehler kann andere verbergen. Es ist möglich, dass ein anderer Fehler zum Vorschein tritt, sobald der Verbindungsfehler behoben wurde. Durchsuchen Sie all diese Lösungen nach Fehlern, genau wie in der ursprünglichen Anfrage. | ## API-Fehler | | | | | **Typ** | `APIException` | | **Problem** | Auf der Seite von Stripe ist ein Fehler aufgetreten. (Dies kommt sehr selten vor). | | **Lösungen** | Behandeln Sie das Ergebnis des API-Aufrufs als unbestimmt. Das heißt, gehen Sie weder davon aus, dass es erfolgreich war, noch dass es fehlgeschlagen ist. Über *Webhooks* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) erhalten Sie Informationen zu dem Ergebnis. Nach Möglichkeit löst Stripe Webhooks für alle neuen Objekte aus, die wir erstellen, während wir an der Lösung für ein Problem arbeiten. Um Ihre Integration so solide wie möglich für ungewöhnliche Situationen zu gestalten, informieren Sie sich unter [dieser erweiterten Diskussion zu Serverfehlern.](https://docs.stripe.com/error-low-level.md#server-errors) | ## Authentifizierungsfehler | | | | | **Typ** | `AuthenticationException` | | **Problem** | Stripe kann Sie mit den angegebenen Informationen nicht authentifizieren. | | **Lösungen** | - Verwenden Sie den korrekten [API-Schlüssel](https://docs.stripe.com/keys.md). - Stellen Sie sicher, dass Sie keinen Schlüssel verwenden, den Sie [„rotiert“ oder widerrufen](https://docs.stripe.com/keys.md#rolling-keys) haben. | ## Idempotenz-Fehler | | | | | **Typ** | `IdempotencyException` | | **Problem** | Sie haben einen [Idempotenz-Schlüssel](https://docs.stripe.com/api/idempotent_requests.md) für ein unerwartetes Ereignis verwendet, wie das Wiederholen einer Anfrage, jedoch mit Übergabe unterschiedlicher Parameter. | | **Lösungen** | - Nach Verwenden eines Idempotenz-Schlüssels kann dieser nur für identische API-Aufrufe wiederverwendet werden. - Verwenden Sie Idempotenzschlüssel unter 255 Zeichen. | ## Berechtigungsfehler | | | | | **Typ** | `PermissionException` | | **Problem** | Der für diese Anfrage verwendete API-Schlüssel verfügt nicht über die erforderlichen Berechtigungen. | | **Lösungen** | - Stellen Sie sicher, dass Sie keinen [eingeschränkten API-Schlüssel](https://docs.stripe.com/keys-best-practices.md#limit-access) für einen Dienst verwenden, auf den dieser keinen Zugriff hat. - Führen Sie keine Aktionen im Dashboard aus, während Sie mit einer [Nutzerrolle](https://docs.stripe.com/get-started/account/teams/roles.md) ohne Berechtigung angemeldet sind. | ## Ratenbegrenzungsfehler | | | | | **Typ** | `RateLimitException` | | **Problem** | Sie haben in zu kurzer Zeit zu viele API-Aufrufe getätigt. | | **Lösungen** | - Wenn ein einzelner API-Aufruf diesen Fehler auslöst, warten Sie und versuchen Sie es erneut. - Um die Ratenbegrenzung automatisch zu handhaben, wiederholen Sie den API-Aufruf nach einer Verzögerung und erhöhen Sie diese exponentiell, wenn der Fehler weiterhin auftritt. Weitere Hinweise finden Sie in der Dokumentation zu [Ratenbegrenzungen](https://docs.stripe.com/rate-limits.md). - Wenn Sie mit einem starken Anstieg des Datenverkehrs rechnen und eine Erhöhung der Ratenbegrenzung anfordern möchten, [kontaktieren Sie den Support](https://support.stripe.com/) im Voraus. | ## Fehler beim Verifizieren der Signatur | | | | | **Typ** | `SignatureVerificationException` | | **Problem** | Sie verwenden die [Signaturverifizierung](https://docs.stripe.com/webhooks.md#verify-events) von *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests)s und konnten die Authentizität eines Webhook-Ereignisses nicht bestätigen. | | **Lösungen** | Dieser Fehler kann auftreten, wenn Ihre Integration ordnungsgemäß funktioniert. Wenn Sie die Webhook-Signaturverifizierung verwenden und Dritte versuchen, Ihnen einen gefälschten oder böswilligen Webhook zu senden, schlägt die Verifizierung fehl und resultiert in diesem Fehler. Fangen Sie ihn ab und antworten Sie mit dem Statuscode `400 Bad Request`. Wenn Sie diese Fehlermeldung erhalten, obwohl dies nicht zu erwarten war – beispielsweise bei Webhooks, von denen Sie wissen, dass sie von Stripe stammen – finden Sie weitere Hinweise in der Dokumentation zum [Überprüfen von Webhook-Signaturen](https://docs.stripe.com/webhooks.md#verify-events). Achten Sie insbesondere darauf, den richtigen Endopint-Geheimschlüssel zu verwenden. Dieser unterscheidet sich von Ihrem API-Schlüssel. | In der Stripe Node.js-Bibliothek hat jedes Fehlerobjekt ein `type`-Attribut. Hinweise zum richtigen Vorgehen finden Sie in der Dokumentation zu den einzelnen Typen. | Name | Typ | Beschreibung | | ------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Zahlungsfehler | [StripeCardError](https://docs.stripe.com/error-handling.md#payment-errors) | Während der Zahlung ist eine der folgenden Fehlersituationen aufgetreten: - [Zahlung wegen Betrugsverdachts blockiert](https://docs.stripe.com/error-handling.md#payment-blocked) - [Zahlung von Aussteller abgewiesen](https://docs.stripe.com/error-handling.md#payment-declined). - [Andere Zahlungsfehler](https://docs.stripe.com/error-handling.md#other-payment-errors). | | Fehler „ungültige Anfrage“ | [StripeInvalidRequestError](https://docs.stripe.com/error-handling.md#invalid-request-errors) | Sie haben einen API-Aufruf mit den falschen Parametern, im falschen Status oder auf ungültige Weise ausgeführt. | | Verbindungsfehler | [StripeConnectionError](https://docs.stripe.com/error-handling.md#connection-errors) | Zwischen Ihrem Server und Stripe ist ein Netzwerkproblem aufgetreten. | | API-Fehler | [StripeAPIError](https://docs.stripe.com/error-handling.md#api-errors) | Auf der Seite von Stripe ist ein Fehler aufgetreten. (Dies kommt sehr selten vor). | | Authentifizierungsfehler | [StripeAuthenticationError](https://docs.stripe.com/error-handling.md#authentication-errors) | Stripe kann Sie mit den angegebenen Informationen nicht authentifizieren. | | Idempotenzfehler | [StripeIdempotencyError](https://docs.stripe.com/error-handling.md#idempotency-errors) | Sie haben einen [Idempotenz-Schlüssel](https://docs.stripe.com/api/idempotent_requests.md) für ein unerwartetes Ereignis verwendet, wie das Wiederholen einer Anfrage, jedoch mit Übergabe unterschiedlicher Parameter. | | Berechtigungsfehler | [StripePermissionError](https://docs.stripe.com/error-handling.md#permission-errors) | Der für diese Anfrage verwendete API-Schlüssel verfügt nicht über die erforderlichen Berechtigungen. | | Ratenbegrenzungsfehler | [StripeRateLimitError](https://docs.stripe.com/error-handling.md#rate-limit-errors) | Sie haben in zu kurzer Zeit zu viele API-Aufrufe getätigt. | | Fehler beim Verifizieren der Signatur | [StripeSignatureVerificationError](https://docs.stripe.com/error-handling.md#signature-verification-errors) | Sie verwenden die [Signaturverifizierung](https://docs.stripe.com/webhooks.md#verify-events) von *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests)s und konnten die Authentizität eines Webhook-Ereignisses nicht bestätigen. | ## Zahlungsfehler Alle Angaben in diesem Abschnitt gelten auch für Zahlungen ohne Karte. Aus historischen Gründen haben Zahlungsfehler den Typ [StripeCardError](https://docs.stripe.com/error-handling.md#card-error). Tatsächlich können sie aber bei jeder Zahlung ein Problem darstellen, unabhängig von der Zahlungsmethode. Zahlungsfehler – aus historischen Gründen auch manchmal als „Kartenfehler“ bezeichnet – decken ein breites Spektrum geläufiger Probleme ab. Sie sind auf drei Kategorien verteilt: - [Zahlung wegen Betrugsverdachts blockiert](https://docs.stripe.com/error-handling.md#payment-blocked) - [Zahlung von Aussteller abgewiesen](https://docs.stripe.com/error-handling.md#payment-declined) - [Andere Zahlungsfehler](https://docs.stripe.com/error-handling.md#other-payment-errors) Um diese Kategorien zu unterscheiden oder weitere Informationen zur Reaktion zu erhalten, sehen Sie unter [Fehlercode](https://docs.stripe.com/error-codes.md), [Ablehnungscode](https://docs.stripe.com/declines/codes.md) und [Zahlungsergebnis](https://docs.stripe.com/api/charges/object.md#charge_object-outcome) nach. (Um das Zahlungsergebnis von einem Fehlerobjekt zu finden, rufen Sie zuerst den [betroffenen Payment Intent](https://docs.stripe.com/api/errors.md#errors-payment_intent) und die [neueste von ihm erstellte Zahlung](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-latest_charge) auf. Im nachfolgenden Beispiel wird dies veranschaulicht.) #### 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.'); } } } ``` Nutzer/innen mit API-Version [2022-08-01](https://docs.stripe.com/upgrades.md#2022-08-01) oder älter: (Um das Zahlungsergebnis von einem Fehlerobjekt zu finden, rufen Sie zuerst den [betroffenen Payment Intent](https://docs.stripe.com/api/errors.md#errors-payment_intent) und die [neueste von ihm erstellte Zahlung](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-charges-data) auf. Im nachfolgenden Beispiel wird dies veranschaulicht.) #### 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.'); } } } ``` Mit Testkarten können Sie einige geläufige Arten von Zahlungsfehlern auslösen. In den folgenden Listen finden Sie Optionen: - [Aufgrund von Betrugsrisiko gesperrte Zahlungen simulieren](https://docs.stripe.com/testing.md#fraud-prevention) - [Abgelehnte Zahlungen und andere Kartenfehler simulieren](https://docs.stripe.com/testing.md#declined-payments) Der folgende Testcode demonstriert einige Möglichkeiten. #### Fehler beim Auslösen - Aufgrund Betrugsverdachts gesperrt #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_radarBlock', // Dies ist eine Testkarte, die aufgrund von Betrugsverdacht immer dann gesperrt wird, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Payment blocked for suspected fraud. ``` #### Fehler beim Auslösen - Vom Aussteller abgewiesen #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_visa_chargeDeclined', // Dies ist eine Testkarte, die vom Aussteller immer abgelehnt wird, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Payment declined by the issuer ``` #### Fehler beim Auslösen - Karte ist abgelaufen #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedExpiredCard', // Dies ist eine Testkarte, die immer dann als abgelaufen fehlschlägt, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Card expired. ``` #### Fehler beim Auslösen - Anderer Kartenfehler #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedProcessingError', // Dies ist eine Testkarte, die aufgrund eines Verarbeitungsfehlers fehlschlägt, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Other payment error. ``` ### Zahlung aufgrund Betrugsverdachts gesperrt | | | | | **Typ** | `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'` | | **Problem** | | *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), das Betrugspräventionssystem von Stripe, hat die Zahlung blockiert | | **Lösungen** | Dieser Fehler kann auftreten, wenn Ihre Integration ordnungsgemäß funktioniert. Fangen Sie ihn ab und fordern Sie den Kunden/die Kundin auf, eine andere Zahlungsmethode zu wählen. Probieren Sie Folgendes, damit weniger legitime Zahlungen blockiert werden: - [Optimieren Sie Ihre Radar-Integration](https://docs.stripe.com/radar/optimize-fraud-signals.md), um detailliertere Informationen zu erfassen. - Verwenden Sie [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) oder [Stripe Elements](https://docs.stripe.com/payments/elements.md) für vorgefertigte, optimierte Formularelemente. Kund/innen von *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) stehen folgende zusätzliche Optionen zur Verfügung: - Um eine bestimmte Zahlung auszunehmen, fügen Sie diese zu Ihrer Zulassungsliste hinzu. (Radar for Fraud Teams) - Passen Sie Ihre [Risikoeinstellungen](https://docs.stripe.com/radar/risk-settings.md) an, um Ihre Risikotoleranz zu ändern. (Radar for Fraud Teams) - Verwenden Sie [nutzerspezifische Regeln](https://docs.stripe.com/radar/rules.md), um die Kriterien für das Blockieren einer Zahlung zu ändern. (Radar for Fraud Teams) Sie können die Einstellungen Ihrer Integration mit [Testkarten, die Betrug simulieren](https://docs.stripe.com/radar/testing.md) testen. Wenn Sie nutzerdefinierte Radar-Regeln haben, folgen Sie den Test-Hinweisen in der [Dokumentation von Radar](https://docs.stripe.com/radar/testing.md). | ### Zahlung vom Aussteller abgewiesen | | | | | **Typ** | `StripeCardError` | | **Codes** | `e.code === 'card_declined'` | | **Problem** | Der Kartenaussteller hat die Zahlung abgelehnt. | | **Lösungen** | Dieser Fehler kann auftreten, obwohl Ihre Integration korrekt funktioniert. Er weist auf eine Aktion des Ausstellers hin, die legitim sein kann. Verwenden Sie den Ablehnungscode, um die nächsten angemessenen Schritte zu ermitteln. Entsprechende Antworten auf jeden Code finden Sie in der [Dokumentation zu Ablehnungscodes](https://docs.stripe.com/declines/codes.md). Sie können auch: - [Befolgen Sie die Empfehlungen, um die Ablehnungen durch Aussteller zu reduzieren](https://docs.stripe.com/declines/card.md#reducing-bank-declines). - Verwenden Sie [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) oder [Stripe Elements](https://docs.stripe.com/payments/elements.md) für vorgefertigte Formularelemente, die diese Empfehlungen implementiert haben. Testen Sie mit [Testkarten, die erfolgreiche und abgelehnte Zahlungen simulieren](https://docs.stripe.com/radar/testing.md), wie Ihre Integration mit Ablehnungen umgeht. | ### Andere Zahlungsfehler | | | | | **Typ** | `StripeCardError` | | **Problem** | Es ist ein weiterer Zahlungsfehler aufgetreten. | | **Lösungen** | Dieser Fehler kann auftreten, obwohl Ihre Integration korrekt funktioniert. Verwenden Sie den Fehlercode, um die nächsten angemessenen Schritte zu ermitteln. Entsprechende Antworten auf jeden Code finden Sie in der [Dokumentation zu Fehlercodes](https://docs.stripe.com/error-codes.md). | ## Ungültige Anfragefehler | | | | | **Typ** | `StripeInvalidRequestError` | | **Problem** | Sie haben einen API-Aufruf mit den falschen Parametern, im falschen Status oder auf ungültige Weise ausgeführt. | | **Lösungen** | In den meisten Fällen liegt das Problem bei der Anfrage selbst. Entweder sind seine Parameter ungültig oder sie kann im aktuellen Status Ihrer Integration nicht ausgeführt werden. - Einzelheiten zu diesem Problem finden Sie in der [Dokumentation zu Fehlercodes](https://docs.stripe.com/error-codes.md). - Unter dem Link `e.doc_url` erhalten Sie schnellen Zugriff auf Dokumentation zum Fehlercode. - Wenn der Fehler einen bestimmten Parameter beinhaltet, verwenden Sie `e.param`, um diesen zu bestimmen. | ## Verbindungsfehler | | | | | **Typ** | `StripeAPIConnectionError` | | **Problem** | Zwischen Ihrem Server und Stripe ist ein Netzwerkproblem aufgetreten. | | **Lösungen** | Behandeln Sie das Ergebnis des API-Aufrufs als unbestimmt. Das heißt, gehen Sie nicht davon aus, dass es erfolgreich war oder dass es fehlgeschlagen ist. So finden Sie heraus, ob es erfolgreich war: - Rufen Sie das entsprechende Objekt von Stripe ab und prüfen Sie seinen Status. - Überwachen Sie die Webhook-Benachrichtigung, ob der Vorgang erfolgreich war oder fehlgeschlagen ist. So unterstützen Sie die Wiederherstellung nach Verbindungsfehlern: - Verwenden Sie beim Erstellen oder Aktualisieren eines Objekts einen [Idempotenz-Schlüssel](https://docs.stripe.com/api/idempotent_requests.md). Falls ein Verbindungsfehler auftritt, können Sie die Anfrage dann sicher wiederholen, ohne dass das Risiko besteht, dass ein zweites Objekt erstellt wird oder dass die Aktualisierung zweimal durchgeführt wird. Wiederholen Sie die Anfrage mit demselben Idempotenz-Schlüssel, bis Sie eine eindeutige Erfolgs- oder Fehlermeldung erhalten. Weitere Hinweise zu dieser Strategie finden Sie unter [Low-Level-Fehler beheben](https://docs.stripe.com/error-low-level.md#idempotency). - Aktivieren Sie [automatische erneute Versuche](https://github.com/stripe/stripe-java?tab=readme-ov-file#configuring-automatic-retries). Dann generiert Stripe Idempotenz-Schlüssel für Sie und wiederholt an Ihrer Stelle Anfragen, sobald es sicher ist. Dieser Fehler kann andere verbergen. Es ist möglich, dass ein anderer Fehler zum Vorschein tritt, sobald der Verbindungsfehler behoben wurde. Durchsuchen Sie all diese Lösungen nach Fehlern, genau wie in der ursprünglichen Anfrage. | ## API-Fehler | | | | | **Typ** | `StripeAPIError` | | **Problem** | Auf der Seite von Stripe ist ein Fehler aufgetreten. (Dies kommt sehr selten vor). | | **Lösungen** | Behandeln Sie das Ergebnis des API-Aufrufs als unbestimmt. Das heißt, gehen Sie weder davon aus, dass es erfolgreich war, noch dass es fehlgeschlagen ist. Über *Webhooks* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) erhalten Sie Informationen zu dem Ergebnis. Nach Möglichkeit löst Stripe Webhooks für alle neuen Objekte aus, die wir erstellen, während wir an der Lösung für ein Problem arbeiten. Um Ihre Integration so solide wie möglich für ungewöhnliche Situationen zu gestalten, informieren Sie sich unter [dieser erweiterten Diskussion zu Serverfehlern.](https://docs.stripe.com/error-low-level.md#server-errors) | ## Authentifizierungsfehler | | | | | **Typ** | `StripeAuthenticationError` | | **Problem** | Stripe kann Sie mit den angegebenen Informationen nicht authentifizieren. | | **Lösungen** | - Verwenden Sie den korrekten [API-Schlüssel](https://docs.stripe.com/keys.md). - Stellen Sie sicher, dass Sie keinen Schlüssel verwenden, den Sie [„rotiert“ oder widerrufen](https://docs.stripe.com/keys.md#rolling-keys) haben. | ## Idempotenz-Fehler | | | | | **Typ** | `StripeIdempotencyError` | | **Problem** | Sie haben einen [Idempotenz-Schlüssel](https://docs.stripe.com/api/idempotent_requests.md) für ein unerwartetes Ereignis verwendet, wie das Wiederholen einer Anfrage, jedoch mit Übergabe unterschiedlicher Parameter. | | **Lösungen** | - Nach Verwenden eines Idempotenz-Schlüssels kann dieser nur für identische API-Aufrufe wiederverwendet werden. - Verwenden Sie Idempotenzschlüssel unter 255 Zeichen. | ## Berechtigungsfehler | | | | | **Typ** | `StripePermissionError` | | **Problem** | Der für diese Anfrage verwendete API-Schlüssel verfügt nicht über die erforderlichen Berechtigungen. | | **Lösungen** | - Stellen Sie sicher, dass Sie keinen [eingeschränkten API-Schlüssel](https://docs.stripe.com/keys-best-practices.md#limit-access) für einen Dienst verwenden, auf den dieser keinen Zugriff hat. - Führen Sie keine Aktionen im Dashboard aus, während Sie mit einer [Nutzerrolle](https://docs.stripe.com/get-started/account/teams/roles.md) ohne Berechtigung angemeldet sind. | ## Ratenbegrenzungsfehler | | | | | **Typ** | `StripeRateLimitError` | | **Problem** | Sie haben in zu kurzer Zeit zu viele API-Aufrufe getätigt. | | **Lösungen** | - Wenn ein einzelner API-Aufruf diesen Fehler auslöst, warten Sie und versuchen Sie es erneut. - Um die Ratenbegrenzung automatisch zu handhaben, wiederholen Sie den API-Aufruf nach einer Verzögerung und erhöhen Sie diese exponentiell, wenn der Fehler weiterhin auftritt. Weitere Hinweise finden Sie in der Dokumentation zu [Ratenbegrenzungen](https://docs.stripe.com/rate-limits.md). - Wenn Sie mit einem starken Anstieg des Datenverkehrs rechnen und eine Erhöhung der Ratenbegrenzung anfordern möchten, [kontaktieren Sie den Support](https://support.stripe.com/) im Voraus. | ## Fehler beim Verifizieren der Signatur | | | | | **Typ** | `StripeSignatureVerificationError` | | **Problem** | Sie verwenden die [Signaturverifizierung](https://docs.stripe.com/webhooks.md#verify-events) von *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests)s und konnten die Authentizität eines Webhook-Ereignisses nicht bestätigen. | | **Lösungen** | Dieser Fehler kann auftreten, wenn Ihre Integration ordnungsgemäß funktioniert. Wenn Sie die Webhook-Signaturverifizierung verwenden und Dritte versuchen, Ihnen einen gefälschten oder böswilligen Webhook zu senden, schlägt die Verifizierung fehl und resultiert in diesem Fehler. Fangen Sie ihn ab und antworten Sie mit dem Statuscode `400 Bad Request`. Wenn Sie diese Fehlermeldung erhalten, obwohl dies nicht zu erwarten war – beispielsweise bei Webhooks, von denen Sie wissen, dass sie von Stripe stammen – finden Sie weitere Hinweise in der Dokumentation zum [Überprüfen von Webhook-Signaturen](https://docs.stripe.com/webhooks.md#verify-events). Achten Sie insbesondere darauf, den richtigen Endopint-Geheimschlüssel zu verwenden. Dieser unterscheidet sich von Ihrem API-Schlüssel. | In der Stripe Go-Bibliothek hat jedes Fehlerobjekt ein `Type`-Attribut. Hinweise zum richtigen Vorgehen finden Sie in der Dokumentation zu den einzelnen Typen. | Name | Typ | Beschreibung | | -------------------------- | -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Zahlungsfehler | [stripe.ErrorTypeCard](https://docs.stripe.com/error-handling.md#payment-errors) | Während der Zahlung ist eine der folgenden Fehlersituationen aufgetreten: - [Zahlung wegen Betrugsverdachts blockiert](https://docs.stripe.com/error-handling.md#payment-blocked) - [Zahlung von Aussteller abgewiesen](https://docs.stripe.com/error-handling.md#payment-declined). - [Andere Zahlungsfehler](https://docs.stripe.com/error-handling.md#other-payment-errors). | | Fehler „ungültige Anfrage“ | [stripe.ErrorTypeInvalidRequest](https://docs.stripe.com/error-handling.md#invalid-request-errors) | Sie haben einen API-Aufruf auf eine Weise ausgeführt, die derzeit nicht gültig ist. Dies kann Folgendes beinhalten: - [Fehler bei der Ratenbegrenzung](https://docs.stripe.com/error-handling.md#rate-limiting) - [Authentifizierungsfehler](https://docs.stripe.com/error-handling.md#authentication-errors) - [Ungültige Parameter oder ungültiger Status](https://docs.stripe.com/error-handling.md#invalid-parameters-or-state) | | API-Fehler | [stripe.ErrorTypeAPI](https://docs.stripe.com/error-handling.md#api-errors) | Auf der Seite von Stripe ist ein Fehler aufgetreten. (Dies kommt sehr selten vor). | | Idempotenzfehler | [stripe.ErrorTypeIdempotency](https://docs.stripe.com/error-handling.md#idempotency-errors) | Sie haben einen [Idempotenz-Schlüssel](https://docs.stripe.com/api/idempotent_requests.md) für ein unerwartetes Ereignis verwendet, wie das Wiederholen einer Anfrage, jedoch mit Übergabe unterschiedlicher Parameter. | ## Kartenfehler Alle Angaben in diesem Abschnitt gelten auch für Zahlungen ohne Karte. Aus historischen Gründen haben Zahlungsfehler den Typ [stripe. ErrorTypeCard](https://docs.stripe.com/error-handling.md#card-error). Tatsächlich können sie aber bei jeder Zahlung ein Problem darstellen, unabhängig von der Zahlungsmethode. Zahlungsfehler – aus historischen Gründen auch manchmal als „Kartenfehler“ bezeichnet – decken ein breites Spektrum geläufiger Probleme ab. Sie sind auf drei Kategorien verteilt: - [Zahlung wegen Betrugsverdachts blockiert](https://docs.stripe.com/error-handling.md#payment-blocked) - [Zahlung von Aussteller abgewiesen](https://docs.stripe.com/error-handling.md#payment-declined) - [Andere Zahlungsfehler](https://docs.stripe.com/error-handling.md#other-payment-errors) Um diese Kategorien zu unterscheiden oder weitere Informationen zur Reaktion zu erhalten, sehen Sie unter [Fehlercode](https://docs.stripe.com/error-codes.md), [Ablehnungscode](https://docs.stripe.com/declines/codes.md) und [Zahlungsergebnis](https://docs.stripe.com/api/charges/object.md#charge_object-outcome) nach. (Um das Zahlungsergebnis von einem Fehlerobjekt zu finden, rufen Sie zuerst den [betroffenen Payment Intent](https://docs.stripe.com/api/errors.md#errors-payment_intent) und die [neueste von ihm erstellte Zahlung](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-latest_charge) auf. Im nachfolgenden Beispiel wird dies veranschaulicht.) #### 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.'); } } } ``` Nutzer/innen mit API-Version [2022-08-01](https://docs.stripe.com/upgrades.md#2022-08-01) oder älter: (Um das Zahlungsergebnis von einem Fehlerobjekt zu finden, rufen Sie zuerst den [betroffenen Payment Intent](https://docs.stripe.com/api/errors.md#errors-payment_intent) und die [neueste von ihm erstellte Zahlung](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-charges-data) auf. Im nachfolgenden Beispiel wird dies veranschaulicht.) #### 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.'); } } } ``` Mit Testkarten können Sie einige geläufige Arten von Zahlungsfehlern auslösen. In den folgenden Listen finden Sie Optionen: - [Aufgrund von Betrugsrisiko gesperrte Zahlungen simulieren](https://docs.stripe.com/testing.md#fraud-prevention) - [Abgelehnte Zahlungen und andere Kartenfehler simulieren](https://docs.stripe.com/testing.md#declined-payments) Der folgende Testcode demonstriert einige Möglichkeiten. #### Fehler beim Auslösen - Aufgrund Betrugsverdachts gesperrt #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_radarBlock', // Dies ist eine Testkarte, die aufgrund von Betrugsverdacht immer dann gesperrt wird, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Payment blocked for suspected fraud. ``` #### Fehler beim Auslösen - Vom Aussteller abgewiesen #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_visa_chargeDeclined', // Dies ist eine Testkarte, die vom Aussteller immer abgelehnt wird, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Payment declined by the issuer ``` #### Fehler beim Auslösen - Karte ist abgelaufen #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedExpiredCard', // Dies ist eine Testkarte, die immer dann als abgelaufen fehlschlägt, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Card expired. ``` #### Fehler beim Auslösen - Anderer Kartenfehler #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedProcessingError', // Dies ist eine Testkarte, die aufgrund eines Verarbeitungsfehlers fehlschlägt, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Other payment error. ``` ### Aufgrund Betrugsverdachts gesperrt | | | | | **Typ** | `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"` | | **Problem** | | *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), das Betrugspräventionssystem von Stripe, hat die Zahlung blockiert | | **Lösungen** | Dieser Fehler kann auftreten, wenn Ihre Integration ordnungsgemäß funktioniert. Fangen Sie ihn ab und fordern Sie den Kunden/die Kundin auf, eine andere Zahlungsmethode zu wählen. Probieren Sie Folgendes, damit weniger legitime Zahlungen blockiert werden: - [Optimieren Sie Ihre Radar-Integration](https://docs.stripe.com/radar/optimize-fraud-signals.md), um detailliertere Informationen zu erfassen. - Verwenden Sie [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) oder [Stripe Elements](https://docs.stripe.com/payments/elements.md) für vorgefertigte, optimierte Formularelemente. Kund/innen von *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) stehen folgende zusätzliche Optionen zur Verfügung: - Um eine bestimmte Zahlung auszunehmen, fügen Sie diese zu Ihrer Zulassungsliste hinzu. (Radar for Fraud Teams) - Passen Sie Ihre [Risikoeinstellungen](https://docs.stripe.com/radar/risk-settings.md) an, um Ihre Risikotoleranz zu ändern. (Radar for Fraud Teams) - Verwenden Sie [nutzerspezifische Regeln](https://docs.stripe.com/radar/rules.md), um die Kriterien für das Blockieren einer Zahlung zu ändern. (Radar for Fraud Teams) Sie können die Einstellungen Ihrer Integration mit [Testkarten, die Betrug simulieren](https://docs.stripe.com/radar/testing.md) testen. Wenn Sie nutzerdefinierte Radar-Regeln haben, folgen Sie den Test-Hinweisen in der [Dokumentation von Radar](https://docs.stripe.com/radar/testing.md). | ### Vom Aussteller abgewiesen | | | | | **Typ** | `stripe.ErrorTypeCard` | | **Codes** | `cardErr.Error.Code == stripe.ErrorCodeCardDeclined` | | **Problem** | Der Kartenaussteller hat die Zahlung abgelehnt. | | **Lösungen** | Dieser Fehler kann auftreten, obwohl Ihre Integration korrekt funktioniert. Er weist auf eine Aktion des Ausstellers hin, die legitim sein kann. Verwenden Sie den Ablehnungscode, um die nächsten angemessenen Schritte zu ermitteln. Entsprechende Antworten auf jeden Code finden Sie in der [Dokumentation zu Ablehnungscodes](https://docs.stripe.com/declines/codes.md). Sie können auch: - [Befolgen Sie die Empfehlungen, um die Ablehnungen durch Aussteller zu reduzieren](https://docs.stripe.com/declines/card.md#reducing-bank-declines). - Verwenden Sie [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) oder [Stripe Elements](https://docs.stripe.com/payments/elements.md) für vorgefertigte Formularelemente, die diese Empfehlungen implementiert haben. Testen Sie mit [Testkarten, die erfolgreiche und abgelehnte Zahlungen simulieren](https://docs.stripe.com/radar/testing.md), wie Ihre Integration mit Ablehnungen umgeht. | ### Andere Zahlungsfehler | | | | | **Typ** | `stripe.ErrorTypeCard` | | **Problem** | Es ist ein weiterer Zahlungsfehler aufgetreten. | | **Lösungen** | Dieser Fehler kann auftreten, obwohl Ihre Integration korrekt funktioniert. Verwenden Sie den Fehlercode, um die nächsten angemessenen Schritte zu ermitteln. Entsprechende Antworten auf jeden Code finden Sie in der [Dokumentation zu Fehlercodes](https://docs.stripe.com/error-codes.md). | ## Ungültige Anfragefehler Fehler aufgrund einer ungültigen Anforderung decken eine Reihe von Situationen ab. Am häufigsten tritt dies auf, wenn die API-Anfrage ungültige Parameter enthält oder im aktuellen Status Ihrer Integration nicht zulässig ist. Verwenden Sie den Fehlercode (`stripeErr.Code`) und schlagen Sie in der [Fehlercode-Dokumentation](https://docs.stripe.com/error-codes.md) nach, um eine Lösung zu finden. Einige Fehlercodes erfordern eine spezielle Reaktion: - `rate_limit` and `lock_timeout` spiegeln [Ratenbegrenzungsfehler](https://docs.stripe.com/error-handling.md#rate-limit-errors) wider - `secret_key_required` spiegelt einen [Authentifizierungsfehler](https://docs.stripe.com/error-handling.md#authentication-errors) wider - Andere Fehlercodes spiegeln [ungültige Parameter oder Status](https://docs.stripe.com/error-handling.md#other-invalid-request-errors) wider ### Ratenbegrenzungsfehler | | | | | **Typ** | `stripe.ErrorTypeInvalidRequest` | | **Codes** | `stripeErr.Code == stripe.ErrorCodeRateLimit or stripeErr.Code == stripe.ErrorCodeLockTimeout` | | **Problem** | Sie haben in zu kurzer Zeit zu viele API-Aufrufe getätigt. | | **Lösungen** | - Wenn ein einzelner API-Aufruf diesen Fehler auslöst, warten Sie und versuchen Sie es erneut. - Um die Ratenbegrenzung automatisch zu handhaben, wiederholen Sie den API-Aufruf nach einer Verzögerung und erhöhen Sie diese exponentiell, wenn der Fehler weiterhin auftritt. Weitere Hinweise finden Sie in der Dokumentation zu [Ratenbegrenzungen](https://docs.stripe.com/rate-limits.md). - Wenn Sie mit einem starken Anstieg des Datenverkehrs rechnen und eine Erhöhung der Ratenbegrenzung anfordern möchten, [kontaktieren Sie den Support](https://support.stripe.com/) im Voraus. | ### Authentifizierungsfehler | | | | | **Typ** | `stripe.ErrorTypeInvalidRequest` | | **Codes** | `stripeErr.Code == stripe.ErrorCodeSecretKeyRequired` | | **Problem** | Stripe kann Sie mit den angegebenen Informationen nicht authentifizieren. | | **Lösungen** | - Verwenden Sie den korrekten [API-Schlüssel](https://docs.stripe.com/keys.md). - Stellen Sie sicher, dass Sie keinen Schlüssel verwenden, den Sie [„rotiert“ oder widerrufen](https://docs.stripe.com/keys.md#rolling-keys) haben. | ### Ungültige Parameter oder Status | | | | | **Typ** | `stripe.ErrorTypeInvalidRequest` | | **Codes** | `stripeErr.Code != stripe.ErrorCodeRateLimit and stripeErr.Code != stripe.ErrorCodeLockTimeout and stripeErr.Code != stripe.ErrorCodeSecretKeyRequired` | | **Problem** | Sie haben einen API-Aufruf mit den falschen Parametern, im falschen Status oder auf ungültige Weise ausgeführt. | | **Lösungen** | In den meisten Fällen liegt das Problem bei der Anfrage selbst. Entweder sind seine Parameter ungültig oder sie kann im aktuellen Status Ihrer Integration nicht ausgeführt werden. - Einzelheiten zu diesem Problem finden Sie in der [Dokumentation zu Fehlercodes](https://docs.stripe.com/error-codes.md). - Unter dem Link `stripeErr.DocURL` erhalten Sie schnellen Zugriff auf Dokumentation zum Fehlercode. - Wenn der Fehler einen bestimmten Parameter beinhaltet, verwenden Sie `stripeErr.Param`, um diesen zu bestimmen. | ## API-Fehler | | | | | **Typ** | `stripe.ErrorTypeAPI` | | **Problem** | Auf der Seite von Stripe ist ein Fehler aufgetreten. (Dies kommt sehr selten vor). | | **Lösungen** | Behandeln Sie das Ergebnis des API-Aufrufs als unbestimmt. Das heißt, gehen Sie weder davon aus, dass es erfolgreich war, noch dass es fehlgeschlagen ist. Über *Webhooks* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) erhalten Sie Informationen zu dem Ergebnis. Nach Möglichkeit löst Stripe Webhooks für alle neuen Objekte aus, die wir erstellen, während wir an der Lösung für ein Problem arbeiten. Um Ihre Integration so solide wie möglich für ungewöhnliche Situationen zu gestalten, informieren Sie sich unter [dieser erweiterten Diskussion zu Serverfehlern.](https://docs.stripe.com/error-low-level.md#server-errors) | ## Idempotenz-Fehler | | | | | **Typ** | `stripe.ErrorTypeIdempotency` | | **Problem** | Sie haben einen [Idempotenz-Schlüssel](https://docs.stripe.com/api/idempotent_requests.md) für ein unerwartetes Ereignis verwendet, wie das Wiederholen einer Anfrage, jedoch mit Übergabe unterschiedlicher Parameter. | | **Lösungen** | - Nach Verwenden eines Idempotenz-Schlüssels kann dieser nur für identische API-Aufrufe wiederverwendet werden. - Verwenden Sie Idempotenzschlüssel unter 255 Zeichen. | In der .NET-Bibliothek von Stripe verfügt jedes Fehlerobjekt über das Attribut `type`. Hinweise zum richtigen Vorgehen finden Sie in der Dokumentation zu den einzelnen Typen. | Name | Typ | Beschreibung | | ------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Zahlungsfehler | [card_error](https://docs.stripe.com/error-handling.md#payment-errors) | Während der Zahlung ist eine der folgenden Fehlersituationen aufgetreten: - [Zahlung wegen Betrugsverdachts blockiert](https://docs.stripe.com/error-handling.md#payment-blocked) - [Zahlung von Aussteller abgewiesen](https://docs.stripe.com/error-handling.md#payment-declined). - [Andere Zahlungsfehler](https://docs.stripe.com/error-handling.md#other-payment-errors). | | Fehler „ungültige Anfrage“ | [invalid_request_error](https://docs.stripe.com/error-handling.md#invalid-request-errors) | Sie haben einen API-Aufruf mit den falschen Parametern, im falschen Status oder auf ungültige Weise ausgeführt. | | Verbindungsfehler | [api_connection_error](https://docs.stripe.com/error-handling.md#connection-errors) | Zwischen Ihrem Server und Stripe ist ein Netzwerkproblem aufgetreten. | | API-Fehler | [api_error](https://docs.stripe.com/error-handling.md#api-errors) | Auf der Seite von Stripe ist ein Fehler aufgetreten. (Dies kommt sehr selten vor). | | Authentifizierungsfehler | [authentication_error](https://docs.stripe.com/error-handling.md#authentication-errors) | Stripe kann Sie mit den angegebenen Informationen nicht authentifizieren. | | Idempotenzfehler | [idempotency_error](https://docs.stripe.com/error-handling.md#idempotency-errors) | Sie haben einen [Idempotenz-Schlüssel](https://docs.stripe.com/api/idempotent_requests.md) für ein unerwartetes Ereignis verwendet, wie das Wiederholen einer Anfrage, jedoch mit Übergabe unterschiedlicher Parameter. | | Berechtigungsfehler | [permission_error](https://docs.stripe.com/error-handling.md#permission-errors) | Der für diese Anfrage verwendete API-Schlüssel verfügt nicht über die erforderlichen Berechtigungen. | | Ratenbegrenzungsfehler | [rate_limit_error](https://docs.stripe.com/error-handling.md#rate-limit-errors) | Sie haben in zu kurzer Zeit zu viele API-Aufrufe getätigt. | | Fehler beim Verifizieren der Signatur | [signature_verification_error](https://docs.stripe.com/error-handling.md#signature-verification-errors) | Sie verwenden die [Signaturverifizierung](https://docs.stripe.com/webhooks.md#verify-events) von *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests)s und konnten die Authentizität eines Webhook-Ereignisses nicht bestätigen. | ## Zahlungsfehler Alle Angaben in diesem Abschnitt gelten auch für Zahlungen ohne Karte. Aus historischen Gründen haben Zahlungsfehler den Typ [card_error](https://docs.stripe.com/error-handling.md#card-error). Tatsächlich können sie aber bei jeder Zahlung ein Problem darstellen, unabhängig von der Zahlungsmethode. Zahlungsfehler – aus historischen Gründen auch manchmal als „Kartenfehler“ bezeichnet – decken ein breites Spektrum geläufiger Probleme ab. Sie sind auf drei Kategorien verteilt: - [Zahlung wegen Betrugsverdachts blockiert](https://docs.stripe.com/error-handling.md#payment-blocked) - [Zahlung von Aussteller abgewiesen](https://docs.stripe.com/error-handling.md#payment-declined) - [Andere Zahlungsfehler](https://docs.stripe.com/error-handling.md#other-payment-errors) Um diese Kategorien zu unterscheiden oder weitere Informationen zur Reaktion zu erhalten, sehen Sie unter [Fehlercode](https://docs.stripe.com/error-codes.md), [Ablehnungscode](https://docs.stripe.com/declines/codes.md) und [Zahlungsergebnis](https://docs.stripe.com/api/charges/object.md#charge_object-outcome) nach. (Um das Zahlungsergebnis von einem Fehlerobjekt zu finden, rufen Sie zuerst den [betroffenen Payment Intent](https://docs.stripe.com/api/errors.md#errors-payment_intent) und die [neueste von ihm erstellte Zahlung](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-latest_charge) auf. Im nachfolgenden Beispiel wird dies veranschaulicht.) #### 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.'); } } } ``` Nutzer/innen mit API-Version [2022-08-01](https://docs.stripe.com/upgrades.md#2022-08-01) oder älter: (Um das Zahlungsergebnis von einem Fehlerobjekt zu finden, rufen Sie zuerst den [betroffenen Payment Intent](https://docs.stripe.com/api/errors.md#errors-payment_intent) und die [neueste von ihm erstellte Zahlung](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-charges-data) auf. Im nachfolgenden Beispiel wird dies veranschaulicht.) #### 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.'); } } } ``` Mit Testkarten können Sie einige geläufige Arten von Zahlungsfehlern auslösen. In den folgenden Listen finden Sie Optionen: - [Aufgrund von Betrugsrisiko gesperrte Zahlungen simulieren](https://docs.stripe.com/testing.md#fraud-prevention) - [Abgelehnte Zahlungen und andere Kartenfehler simulieren](https://docs.stripe.com/testing.md#declined-payments) Der folgende Testcode demonstriert einige Möglichkeiten. #### Fehler beim Auslösen - Aufgrund Betrugsverdachts gesperrt #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_radarBlock', // Dies ist eine Testkarte, die aufgrund von Betrugsverdacht immer dann gesperrt wird, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Payment blocked for suspected fraud. ``` #### Fehler beim Auslösen - Vom Aussteller abgewiesen #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_visa_chargeDeclined', // Dies ist eine Testkarte, die vom Aussteller immer abgelehnt wird, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Payment declined by the issuer ``` #### Fehler beim Auslösen - Karte ist abgelaufen #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedExpiredCard', // Dies ist eine Testkarte, die immer dann als abgelaufen fehlschlägt, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Card expired. ``` #### Fehler beim Auslösen - Anderer Kartenfehler #### PHP ```php example_function([ 'currency' => 'usd', 'amount' => 2000, 'confirm' => True, 'payment_method' => 'pm_card_chargeDeclinedProcessingError', // Dies ist eine Testkarte, die aufgrund eines Verarbeitungsfehlers fehlschlägt, wenn sie in einer Sandbox verwendet wird. Verwenden Sie diese und andere Testkarten, um den Umgang mit Fehlern in Ihrer Integration zu testen. Im Produktionscode würden Sie hier eine echte Zahlungsmethode verwenden. ]); ``` ``` Other payment error. ``` ### Zahlung aufgrund Betrugsverdachts gesperrt | | | | | **Typ** | `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"` | | **Problem** | | *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), das Betrugspräventionssystem von Stripe, hat die Zahlung blockiert | | **Lösungen** | Dieser Fehler kann auftreten, wenn Ihre Integration ordnungsgemäß funktioniert. Fangen Sie ihn ab und fordern Sie den Kunden/die Kundin auf, eine andere Zahlungsmethode zu wählen. Probieren Sie Folgendes, damit weniger legitime Zahlungen blockiert werden: - [Optimieren Sie Ihre Radar-Integration](https://docs.stripe.com/radar/optimize-fraud-signals.md), um detailliertere Informationen zu erfassen. - Verwenden Sie [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) oder [Stripe Elements](https://docs.stripe.com/payments/elements.md) für vorgefertigte, optimierte Formularelemente. Kund/innen von *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) stehen folgende zusätzliche Optionen zur Verfügung: - Um eine bestimmte Zahlung auszunehmen, fügen Sie diese zu Ihrer Zulassungsliste hinzu. (Radar for Fraud Teams) - Passen Sie Ihre [Risikoeinstellungen](https://docs.stripe.com/radar/risk-settings.md) an, um Ihre Risikotoleranz zu ändern. (Radar for Fraud Teams) - Verwenden Sie [nutzerspezifische Regeln](https://docs.stripe.com/radar/rules.md), um die Kriterien für das Blockieren einer Zahlung zu ändern. (Radar for Fraud Teams) Sie können die Einstellungen Ihrer Integration mit [Testkarten, die Betrug simulieren](https://docs.stripe.com/radar/testing.md) testen. Wenn Sie nutzerdefinierte Radar-Regeln haben, folgen Sie den Test-Hinweisen in der [Dokumentation von Radar](https://docs.stripe.com/radar/testing.md). | ### Zahlung vom Aussteller abgewiesen | | | | | **Typ** | `card_error` | | **Codes** | `e.StripeError.Code == "card_declined"` | | **Problem** | Der Kartenaussteller hat die Zahlung abgelehnt. | | **Lösungen** | Dieser Fehler kann auftreten, obwohl Ihre Integration korrekt funktioniert. Er weist auf eine Aktion des Ausstellers hin, die legitim sein kann. Verwenden Sie den Ablehnungscode, um die nächsten angemessenen Schritte zu ermitteln. Entsprechende Antworten auf jeden Code finden Sie in der [Dokumentation zu Ablehnungscodes](https://docs.stripe.com/declines/codes.md). Sie können auch: - [Befolgen Sie die Empfehlungen, um die Ablehnungen durch Aussteller zu reduzieren](https://docs.stripe.com/declines/card.md#reducing-bank-declines). - Verwenden Sie [Payment Links](https://docs.stripe.com/payment-links.md), [Checkout](https://docs.stripe.com/payments/checkout.md) oder [Stripe Elements](https://docs.stripe.com/payments/elements.md) für vorgefertigte Formularelemente, die diese Empfehlungen implementiert haben. Testen Sie mit [Testkarten, die erfolgreiche und abgelehnte Zahlungen simulieren](https://docs.stripe.com/radar/testing.md), wie Ihre Integration mit Ablehnungen umgeht. | ### Andere Zahlungsfehler | | | | | **Typ** | `card_error` | | **Problem** | Es ist ein weiterer Zahlungsfehler aufgetreten. | | **Lösungen** | Dieser Fehler kann auftreten, obwohl Ihre Integration korrekt funktioniert. Verwenden Sie den Fehlercode, um die nächsten angemessenen Schritte zu ermitteln. Entsprechende Antworten auf jeden Code finden Sie in der [Dokumentation zu Fehlercodes](https://docs.stripe.com/error-codes.md). | ## Ungültige Anfragefehler | | | | | **Typ** | `invalid_request_error` | | **Problem** | Sie haben einen API-Aufruf mit den falschen Parametern, im falschen Status oder auf ungültige Weise ausgeführt. | | **Lösungen** | In den meisten Fällen liegt das Problem bei der Anfrage selbst. Entweder sind seine Parameter ungültig oder sie kann im aktuellen Status Ihrer Integration nicht ausgeführt werden. - Einzelheiten zu diesem Problem finden Sie in der [Dokumentation zu Fehlercodes](https://docs.stripe.com/error-codes.md). - Unter dem Link erhalten Sie schnellen Zugriff auf Dokumentation zum Fehlercode. - Wenn der Fehler einen bestimmten Parameter beinhaltet, verwenden Sie , um diesen zu bestimmen. | ## Verbindungsfehler | | | | | **Typ** | `api_connection_error` | | **Problem** | Zwischen Ihrem Server und Stripe ist ein Netzwerkproblem aufgetreten. | | **Lösungen** | Behandeln Sie das Ergebnis des API-Aufrufs als unbestimmt. Das heißt, gehen Sie nicht davon aus, dass es erfolgreich war oder dass es fehlgeschlagen ist. So finden Sie heraus, ob es erfolgreich war: - Rufen Sie das entsprechende Objekt von Stripe ab und prüfen Sie seinen Status. - Überwachen Sie die Webhook-Benachrichtigung, ob der Vorgang erfolgreich war oder fehlgeschlagen ist. So unterstützen Sie die Wiederherstellung nach Verbindungsfehlern: - Verwenden Sie beim Erstellen oder Aktualisieren eines Objekts einen [Idempotenz-Schlüssel](https://docs.stripe.com/api/idempotent_requests.md). Falls ein Verbindungsfehler auftritt, können Sie die Anfrage dann sicher wiederholen, ohne dass das Risiko besteht, dass ein zweites Objekt erstellt wird oder dass die Aktualisierung zweimal durchgeführt wird. Wiederholen Sie die Anfrage mit demselben Idempotenz-Schlüssel, bis Sie eine eindeutige Erfolgs- oder Fehlermeldung erhalten. Weitere Hinweise zu dieser Strategie finden Sie unter [Low-Level-Fehler beheben](https://docs.stripe.com/error-low-level.md#idempotency). - Aktivieren Sie [automatische erneute Versuche](https://github.com/stripe/stripe-java?tab=readme-ov-file#configuring-automatic-retries). Dann generiert Stripe Idempotenz-Schlüssel für Sie und wiederholt an Ihrer Stelle Anfragen, sobald es sicher ist. Dieser Fehler kann andere verbergen. Es ist möglich, dass ein anderer Fehler zum Vorschein tritt, sobald der Verbindungsfehler behoben wurde. Durchsuchen Sie all diese Lösungen nach Fehlern, genau wie in der ursprünglichen Anfrage. | ## API-Fehler | | | | | **Typ** | `api_error` | | **Problem** | Auf der Seite von Stripe ist ein Fehler aufgetreten. (Dies kommt sehr selten vor). | | **Lösungen** | Behandeln Sie das Ergebnis des API-Aufrufs als unbestimmt. Das heißt, gehen Sie weder davon aus, dass es erfolgreich war, noch dass es fehlgeschlagen ist. Über *Webhooks* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) erhalten Sie Informationen zu dem Ergebnis. Nach Möglichkeit löst Stripe Webhooks für alle neuen Objekte aus, die wir erstellen, während wir an der Lösung für ein Problem arbeiten. Um Ihre Integration so solide wie möglich für ungewöhnliche Situationen zu gestalten, informieren Sie sich unter [dieser erweiterten Diskussion zu Serverfehlern.](https://docs.stripe.com/error-low-level.md#server-errors) | ## Authentifizierungsfehler | | | | | **Typ** | `authentication_error` | | **Problem** | Stripe kann Sie mit den angegebenen Informationen nicht authentifizieren. | | **Lösungen** | - Verwenden Sie den korrekten [API-Schlüssel](https://docs.stripe.com/keys.md). - Stellen Sie sicher, dass Sie keinen Schlüssel verwenden, den Sie [„rotiert“ oder widerrufen](https://docs.stripe.com/keys.md#rolling-keys) haben. | ## Idempotenz-Fehler | | | | | **Typ** | `idempotency_error` | | **Problem** | Sie haben einen [Idempotenz-Schlüssel](https://docs.stripe.com/api/idempotent_requests.md) für ein unerwartetes Ereignis verwendet, wie das Wiederholen einer Anfrage, jedoch mit Übergabe unterschiedlicher Parameter. | | **Lösungen** | - Nach Verwenden eines Idempotenz-Schlüssels kann dieser nur für identische API-Aufrufe wiederverwendet werden. - Verwenden Sie Idempotenzschlüssel unter 255 Zeichen. | ## Berechtigungsfehler | | | | | **Typ** | `permission_error` | | **Problem** | Der für diese Anfrage verwendete API-Schlüssel verfügt nicht über die erforderlichen Berechtigungen. | | **Lösungen** | - Stellen Sie sicher, dass Sie keinen [eingeschränkten API-Schlüssel](https://docs.stripe.com/keys-best-practices.md#limit-access) für einen Dienst verwenden, auf den dieser keinen Zugriff hat. - Führen Sie keine Aktionen im Dashboard aus, während Sie mit einer [Nutzerrolle](https://docs.stripe.com/get-started/account/teams/roles.md) ohne Berechtigung angemeldet sind. | ## Ratenbegrenzungsfehler | | | | | **Typ** | `rate_limit_error` | | **Problem** | Sie haben in zu kurzer Zeit zu viele API-Aufrufe getätigt. | | **Lösungen** | - Wenn ein einzelner API-Aufruf diesen Fehler auslöst, warten Sie und versuchen Sie es erneut. - Um die Ratenbegrenzung automatisch zu handhaben, wiederholen Sie den API-Aufruf nach einer Verzögerung und erhöhen Sie diese exponentiell, wenn der Fehler weiterhin auftritt. Weitere Hinweise finden Sie in der Dokumentation zu [Ratenbegrenzungen](https://docs.stripe.com/rate-limits.md). - Wenn Sie mit einem starken Anstieg des Datenverkehrs rechnen und eine Erhöhung der Ratenbegrenzung anfordern möchten, [kontaktieren Sie den Support](https://support.stripe.com/) im Voraus. | ## Fehler beim Verifizieren der Signatur | | | | | **Typ** | `signature_verification_error` | | **Problem** | Sie verwenden die [Signaturverifizierung](https://docs.stripe.com/webhooks.md#verify-events) von *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests)s und konnten die Authentizität eines Webhook-Ereignisses nicht bestätigen. | | **Lösungen** | Dieser Fehler kann auftreten, wenn Ihre Integration ordnungsgemäß funktioniert. Wenn Sie die Webhook-Signaturverifizierung verwenden und Dritte versuchen, Ihnen einen gefälschten oder böswilligen Webhook zu senden, schlägt die Verifizierung fehl und resultiert in diesem Fehler. Fangen Sie ihn ab und antworten Sie mit dem Statuscode `400 Bad Request`. Wenn Sie diese Fehlermeldung erhalten, obwohl dies nicht zu erwarten war – beispielsweise bei Webhooks, von denen Sie wissen, dass sie von Stripe stammen – finden Sie weitere Hinweise in der Dokumentation zum [Überprüfen von Webhook-Signaturen](https://docs.stripe.com/webhooks.md#verify-events). Achten Sie insbesondere darauf, den richtigen Endopint-Geheimschlüssel zu verwenden. Dieser unterscheidet sich von Ihrem API-Schlüssel. |