KOSTENLOSES TOOL · STRIPE TESTKARTEN
Stripe Testkarten
Die Karte, die du suchst, ist 4242 4242 4242 4242 — mit einer beliebigen dreistelligen CVC (vier Ziffern bei American Express), einem beliebigen Ablaufdatum in der Zukunft wie 12/34 und beliebigen Werten in den übrigen Feldern. Sie funktioniert nur mit deinen Test-API-Schlüsseln von Stripe. Die Tabelle unten enthält 119 Testkarten, am 26. September 2026 gegen Stripes eigene Testreferenz geprüft, darunter die 64 Karten, die Stripe nach Land führt: Die deutsche Karte steht in dieser Gruppe vorn, die deutschen SEPA-Test-IBANs führen die Tabelle der lokalen Zahlungsmethoden an. Durchsuch sie, klick auf eine Nummer, um sie zu kopieren, und lad den ganzen Satz als JSON oder CSV für deine Testsuite herunter. Jede Karte, die einen Fehler auslöst, nennt außerdem Fehlercode, Ablehnungscode und Webhook-Ereignis — genau das, was Stripes Dokumentation auf drei Seiten verteilt.
Auch aufEnglish繁體中文日本語한국어EspañolFrançaisDeutschPortuguês (Brasil)
Klick auf eine Nummer, um sie ohne Leerzeichen zu kopieren. Nichts wird irgendwohin gesendet — Tabelle und Downloads entstehen auf dieser Seite. Der Download folgt dem Filter, du kannst also nur die Ablehnungskarten exportieren.
| Nummer | Simuliert | Marke | PaymentMethod | Codes und Ereignis |
|---|---|---|---|---|
| Erfolgreiche Zahlung, nach Kartenmarke · 15 | ||||
| Erfolgreiche Zahlung | Visa | pm_card_visa |
||
| Erfolgreiche Zahlung mit einer Debitkarte | Visa (debit) | pm_card_visa_debit |
||
| Erfolgreiche Zahlung | Mastercard | pm_card_mastercard |
||
| Erfolgreiche Zahlung mit einer BIN der 2er-Serie | Mastercard (2-series) | |||
| Erfolgreiche Zahlung mit einer Debitkarte | Mastercard (debit) | pm_card_mastercard_debit |
||
| Erfolgreiche Zahlung mit einer Prepaid-Karte | Mastercard (prepaid) | pm_card_mastercard_prepaid |
||
| Erfolgreiche Zahlung (15 Stellen, vierstellige CVC) | American Express | pm_card_amex |
||
| Erfolgreiche Zahlung, zweite American-Express-BIN | American Express | |||
| Erfolgreiche Zahlung | Discover | pm_card_discover |
||
| Erfolgreiche Zahlung mit 19-stelliger Kartennummer | UnionPay (19-digit) | |||
| Erfolgreiche Zahlung | Diners Club | pm_card_diners |
||
| Erfolgreiche Zahlung mit 14-stelliger Kartennummer | Diners Club (14-digit) | |||
| Erfolgreiche Zahlung | JCB | pm_card_jcb |
||
| Erfolgreiche Zahlung | UnionPay | pm_card_unionpay |
||
| Erfolgreiche Zahlung mit einer französischen Co-Branding-Karte (Cartes Bancaires/Visa) | Cartes Bancaires / Visa | pm_card_visa_cartesBancaires |
||
| Ablehnungen · 10 | ||||
| Allgemeine Ablehnung | Visa | pm_card_visa_chargeDeclined |
card_declined |
|
| Ablehnung wegen unzureichender Deckung | Visa | pm_card_visa_chargeDeclinedInsufficientFunds |
card_declined |
|
| Ablehnung wegen verlorener Karte | Visa | pm_card_visa_chargeDeclinedLostCard |
card_declined |
|
| Ablehnung wegen gestohlener Karte | Visa | pm_card_visa_chargeDeclinedStolenCard |
card_declined |
|
| Ablehnung wegen abgelaufener Karte | Visa | pm_card_chargeDeclinedExpiredCard |
expired_card |
|
| Ablehnung wegen falscher CVC (CVC mitschicken, sonst wird nicht geprüft) | Visa | pm_card_chargeDeclinedIncorrectCvc |
incorrect_cvc |
|
| Ablehnung wegen eines Verarbeitungsfehlers | Visa | pm_card_chargeDeclinedProcessingError |
processing_error |
|
| Falsche Nummer — fällt absichtlich durch die Luhn-Prüfung | Visa | incorrect_number |
||
| Ablehnung wegen überschrittenem Geschwindigkeitsgrenzwert | Visa | pm_card_visa_chargeDeclinedVelocityLimitExceeded |
card_declined |
|
| Lässt sich einem Kunden anhängen, schlägt aber beim Belasten fehl | Visa | pm_card_chargeCustomerFail |
card_declined |
|
| Radar, Betrug und Adressprüfungen · 9 | ||||
| Risikoniveau „sehr hoch“ — Radar blockiert sie immer | Visa | pm_card_radarBlock |
card_declined |
|
| Risikoniveau „sehr hoch“ — Radar blockiert je nach deinen Einstellungen | Visa | pm_card_riskLevelHighest |
card_declined |
|
| Risikoniveau „erhöht“ — Radar kann sie zur manuellen Prüfung einreihen | Visa | pm_card_riskLevelElevated |
||
| Hoher Score für Anfechtungen wegen Betrugs | Visa | pm_card_highFraudDisputeScore |
||
| Hoher Score für frühzeitige Betrugswarnungen | Visa | pm_card_highEfwScore |
||
| Missbrauch der kostenlosen Testversion — blockiert, wenn diese Kontrolle aktiv ist | Visa | pm_card_freeTrialAbuseBlock |
card_declined |
|
| CVC-Prüfung schlägt fehl (nur wenn du eine CVC mitschickst) | Visa | pm_card_cvcCheckFail |
card_declined |
|
| Postleitzahlprüfung schlägt fehl (nur wenn du eine Postleitzahl mitschickst) | Visa | pm_card_avsZipFail |
card_declined |
|
| Prüfung von Postleitzahl und Adresszeile 1 schlägt fehl | Visa | pm_card_avsFail |
card_declined |
|
| Anfechtungen und Betrugswarnungen · 8 | ||||
| Zahlung erfolgreich, dann Anfechtung wegen Betrugs | Visa | pm_card_createDispute |
||
| Zahlung erfolgreich, dann Anfechtung wegen Betrugs (Discover) | Discover | |||
| Zahlung erfolgreich, dann Anfechtung: Produkt nicht erhalten | Visa | pm_card_createDisputeProductNotReceived |
||
| Zahlung erfolgreich, dann Anfechtung als Anfrage statt Rückbuchung | Visa | pm_card_createDisputeInquiry |
||
| Zahlung erfolgreich, dann eine frühzeitige Betrugswarnung | Visa | pm_card_createIssuerFraudRecord |
||
| Zahlung erfolgreich, dann mehrere Anfechtungen | Visa | pm_card_createMultipleDisputes |
||
| Anfechtung, für die Visa Compelling Evidence 3.0 infrage kommt | Visa | pm_card_createCe3EligibleDispute |
||
| Anfechtung, für die Smart Disputes infrage kommt | Visa | pm_card_createAutoRepresentmentEligibleDispute |
||
| Rückerstattungen und Guthaben · 4 | ||||
| Rückerstattung erst ausstehend, später erfolgreich | Visa | pm_card_pendingRefund |
||
| Rückerstattung scheinbar erfolgreich, schlägt später fehl | Visa | pm_card_refundFail |
||
| US-Zahlung landet direkt im verfügbaren Guthaben | Visa | pm_card_bypassPending |
||
| Internationale Zahlung landet direkt im verfügbaren Guthaben | Visa | pm_card_bypassPendingInternational |
||
| 3D Secure · 9 | ||||
| 3DS erforderlich, die Authentifizierung gelingt | Visa (IE) | pm_card_threeDSecure2Required |
||
| 3DS erforderlich bei einer in den USA ausgestellten Karte, die Authentifizierung gelingt | Visa (US) | |||
| 3DS gelingt, die Zahlung wird trotzdem abgelehnt | Visa | pm_card_threeDSecureRequiredChargeDeclined |
card_declined |
|
| Die 3DS-Abfrage selbst schlägt fehl, die Zahlung wird abgelehnt | Visa | pm_card_threeDSecureRequiredProcessingError |
card_declined |
|
| 3DS unterstützt, von den Standardregeln aber nicht verlangt | Visa | pm_card_threeDSecureOptional |
||
| 3DS unterstützt, der Versuch endet mit einem Verarbeitungsfehler | Visa | pm_card_threeDSecureOptionalProcessingError |
card_declined |
|
| Off-Session-Zahlungen brauchen 3DS, bis die Karte für künftige Zahlungen eingerichtet ist | Visa | pm_card_authenticationRequiredOnSetup |
||
| 3DS bei jeder Transaktion, egal wie die Karte eingerichtet ist | Visa | pm_card_authenticationRequired |
||
| Schon für Off-Session eingerichtet; On-Session-Zahlungen werden trotzdem authentifiziert | Visa | pm_card_authenticationRequiredSetupForOffSession |
||
| Erfolgreiche Zahlung, nach Land · 64 | ||||
| Dein MarktZahlung erfolgreich — Ausstellerland: Deutschland | Visa | pm_card_de |
||
| Zahlung erfolgreich — Ausstellerland: Vereinigte Staaten | Visa | pm_card_us |
||
| Zahlung erfolgreich — Ausstellerland: Argentinien | Visa | pm_card_ar |
||
| Zahlung erfolgreich — Ausstellerland: Brasilien | Visa | pm_card_br |
||
| Zahlung erfolgreich — Ausstellerland: Kanada | Visa | pm_card_ca |
||
| Zahlung erfolgreich — Ausstellerland: Chile | Visa | pm_card_cl |
||
| Zahlung erfolgreich — Ausstellerland: Kolumbien | Visa | pm_card_co |
||
| Zahlung erfolgreich — Ausstellerland: Costa Rica | Visa | pm_card_cr |
||
| Zahlung erfolgreich — Ausstellerland: Ecuador | Visa | pm_card_ec |
||
| Zahlung erfolgreich — Ausstellerland: Mexiko | Visa | pm_card_mx |
||
| Zahlung erfolgreich — Ausstellerland: Mexiko | Carnet | |||
| Zahlung erfolgreich — Ausstellerland: Panama | Visa | pm_card_pa |
||
| Zahlung erfolgreich — Ausstellerland: Paraguay | Visa | pm_card_py |
||
| Zahlung erfolgreich — Ausstellerland: Peru | Visa | pm_card_pe |
||
| Zahlung erfolgreich — Ausstellerland: Uruguay | Visa | pm_card_uy |
||
| Zahlung erfolgreich — Ausstellerland: Vereinigte Arabische Emirate | Visa | pm_card_ae |
||
| Zahlung erfolgreich — Ausstellerland: Vereinigte Arabische Emirate | Mastercard | pm_card_ae_mastercard |
||
| Zahlung erfolgreich — Ausstellerland: Österreich | Visa | pm_card_at |
||
| Zahlung erfolgreich — Ausstellerland: Belgien | Visa | pm_card_be |
||
| Zahlung erfolgreich — Ausstellerland: Bulgarien | Visa | pm_card_bg |
||
| Zahlung erfolgreich — Ausstellerland: Belarus | Visa | pm_card_by |
||
| Zahlung erfolgreich — Ausstellerland: Kroatien | Visa | pm_card_hr |
||
| Zahlung erfolgreich — Ausstellerland: Zypern | Visa | pm_card_cy |
||
| Zahlung erfolgreich — Ausstellerland: Tschechien | Visa | pm_card_cz |
||
| Zahlung erfolgreich — Ausstellerland: Dänemark | Visa | pm_card_dk |
||
| Zahlung erfolgreich — Ausstellerland: Estland | Visa | pm_card_ee |
||
| Zahlung erfolgreich — Ausstellerland: Finnland | Visa | pm_card_fi |
||
| Zahlung erfolgreich — Ausstellerland: Frankreich | Visa | pm_card_fr |
||
| Zahlung erfolgreich — Ausstellerland: Gibraltar | Visa | pm_card_gi |
||
| Zahlung erfolgreich — Ausstellerland: Griechenland | Visa | pm_card_gr |
||
| Zahlung erfolgreich — Ausstellerland: Ungarn | Visa | pm_card_hu |
||
| Zahlung erfolgreich — Ausstellerland: Irland | Visa | pm_card_ie |
||
| Zahlung erfolgreich — Ausstellerland: Italien | Visa | pm_card_it |
||
| Zahlung erfolgreich — Ausstellerland: Lettland | Visa | pm_card_lv |
||
| Zahlung erfolgreich — Ausstellerland: Liechtenstein | Visa | pm_card_li |
||
| Zahlung erfolgreich — Ausstellerland: Litauen | Visa | pm_card_lt |
||
| Zahlung erfolgreich — Ausstellerland: Luxemburg | Visa | pm_card_lu |
||
| Zahlung erfolgreich — Ausstellerland: Malta | Visa | pm_card_mt |
||
| Zahlung erfolgreich — Ausstellerland: Niederlande | Visa | pm_card_nl |
||
| Zahlung erfolgreich — Ausstellerland: Norwegen | Visa | pm_card_no |
||
| Zahlung erfolgreich — Ausstellerland: Polen | Visa | pm_card_pl |
||
| Zahlung erfolgreich — Ausstellerland: Portugal | Visa | pm_card_pt |
||
| Zahlung erfolgreich — Ausstellerland: Rumänien | Visa | pm_card_ro |
||
| Zahlung erfolgreich — Ausstellerland: Saudi-Arabien | Visa | |||
| Zahlung erfolgreich — Ausstellerland: Slowenien | Visa | pm_card_si |
||
| Zahlung erfolgreich — Ausstellerland: Slowakei | Visa | pm_card_sk |
||
| Zahlung erfolgreich — Ausstellerland: Spanien | Visa | pm_card_es |
||
| Zahlung erfolgreich — Ausstellerland: Schweden | Visa | pm_card_se |
||
| Zahlung erfolgreich — Ausstellerland: Schweiz | Visa | pm_card_ch |
||
| Zahlung erfolgreich — Ausstellerland: Vereinigtes Königreich | Visa | pm_card_gb |
||
| Zahlung erfolgreich — Ausstellerland: Vereinigtes Königreich | Visa (debit) | pm_card_gb_debit |
||
| Zahlung erfolgreich — Ausstellerland: Vereinigtes Königreich | Mastercard | pm_card_gb_mastercard |
||
| Zahlung erfolgreich — Ausstellerland: Australien | Visa | pm_card_au |
||
| Zahlung erfolgreich — Ausstellerland: China | Visa | pm_card_cn |
||
| Zahlung erfolgreich — Ausstellerland: Hongkong | Visa | pm_card_hk |
||
| Zahlung erfolgreich — Ausstellerland: Indien | Visa | pm_card_in |
||
| Zahlung erfolgreich — Ausstellerland: Japan | Visa | pm_card_jp |
||
| Zahlung erfolgreich — Ausstellerland: Japan | JCB | pm_card_jcb |
||
| Zahlung erfolgreich — Ausstellerland: Malaysia | Visa | pm_card_my |
||
| Zahlung erfolgreich — Ausstellerland: Neuseeland | Visa | pm_card_nz |
||
| Zahlung erfolgreich — Ausstellerland: Singapur | Visa | pm_card_sg |
||
| Zahlung erfolgreich — Ausstellerland: Taiwan | Visa | pm_card_tw |
||
| Zahlung erfolgreich — Ausstellerland: Thailand | Visa (credit) | pm_card_th_credit |
||
| Zahlung erfolgreich — Ausstellerland: Thailand | Visa (debit) | pm_card_th_debit |
||
Lokale Zahlungsmethoden: Testwerte
Was Stripe für die SEPA-Lastschrift in Deutschland, Frankreich und Spanien, für Konbini in Japan und für Boleto in Brasilien veröffentlicht. Klick auf einen Wert, um ihn zu kopieren. Diese Zahlungen warten in processing oder requires_action, bevor sie sich entscheiden — die letzte Spalte zeigt deshalb die ganze Webhook-Abfolge.
| Testwert | Simuliert | Parameter | PaymentMethod | Codes und Ereignis |
|---|---|---|---|---|
| SEPA Direct Debit · Deutschland (DE) · 6 | ||||
| Dein MarktDer Status des PaymentIntent wechselt von processing zu succeeded | sepa_ |
pm_ |
||
| Dein MarktDer Status des PaymentIntent wechselt nach mindestens drei Minuten von processing zu succeeded | sepa_ |
pm_ |
||
| Dein MarktDer Status des PaymentIntent wechselt von processing zu requires_payment_method | sepa_ |
pm_ |
||
| Dein MarktDer Status des PaymentIntent wechselt nach mindestens drei Minuten von processing zu requires_payment_method | sepa_ |
pm_ |
||
| Dein MarktDer Status des PaymentIntent wechselt von processing zu succeeded, es wird jedoch sofort eine Zahlungsanfechtung erstellt | sepa_ |
pm_ |
||
| Dein MarktDie Zahlung schlägt mit dem Fehlercode insufficient_funds fehl | sepa_ |
pm_ |
insufficient_ |
|
| SEPA Direct Debit · Frankreich (FR) · 6 | ||||
| Der Status des PaymentIntent wechselt von processing zu succeeded | sepa_ |
pm_ |
||
| Der Status des PaymentIntent wechselt nach mindestens drei Minuten von processing zu succeeded | sepa_ |
pm_ |
||
| Der Status des PaymentIntent wechselt von processing zu requires_payment_method | sepa_ |
pm_ |
||
| Der Status des PaymentIntent wechselt nach mindestens drei Minuten von processing zu requires_payment_method | sepa_ |
pm_ |
||
| Der Status des PaymentIntent wechselt von processing zu succeeded, es wird jedoch sofort eine Zahlungsanfechtung erstellt | sepa_ |
pm_ |
||
| Die Zahlung schlägt mit dem Fehlercode insufficient_funds fehl | sepa_ |
pm_ |
insufficient_ |
|
| SEPA Direct Debit · Spanien (ES) · 6 | ||||
| Der Status des PaymentIntent wechselt von processing zu succeeded | sepa_ |
pm_ |
||
| Der Status des PaymentIntent wechselt nach mindestens drei Minuten von processing zu succeeded | sepa_ |
pm_ |
||
| Der Status des PaymentIntent wechselt von processing zu requires_payment_method | sepa_ |
pm_ |
||
| Der Status des PaymentIntent wechselt nach mindestens drei Minuten von processing zu requires_payment_method | sepa_ |
pm_ |
||
| Der Status des PaymentIntent wechselt von processing zu succeeded, es wird jedoch sofort eine Zahlungsanfechtung erstellt | sepa_ |
pm_ |
||
| Die Zahlung schlägt mit dem Fehlercode insufficient_funds fehl | sepa_ |
pm_ |
insufficient_ |
|
| Konbini · Japan (JP) · 6 | ||||
| Zahlung nach 3 Minuten erfolgreich | billing_ |
|||
| Zahlung sofort erfolgreich | billing_ |
|||
| Zahlung läuft sofort ab | billing_ |
|||
| Nie bezahlt; läuft nach 3 Minuten ab | billing_ |
|||
| Nie bezahlt; läuft zu dem expires_at ab, das du gesetzt hast | billing_ |
|||
| Bestätigungsnummer wird beim Bestätigen des PaymentIntent abgelehnt | payment_ |
payment_ |
||
| Boleto · Brasilien (BR) · 6 | ||||
| Boleto nach 3 Minuten bezahlt | billing_ |
|||
| Boleto sofort bezahlt | billing_ |
|||
| Boleto läuft unbezahlt ab; payment_failed nach wenigen Sekunden | billing_ |
|||
| Boleto läuft nach etwa 3 Minuten unbezahlt ab | billing_ |
|||
| Boleto wird nie bezahlt; läuft zu seinem expires_at ab | billing_ |
|||
| Sandbox-CPF, die die Prüfung der Steuernummer umgeht | boleto[ |
|||
Quellen: Stripe-Dokumentation auf Deutsch — Testen (Testkarten, Zahlung nach Land, SEPA-Test-IBANs, Webhook-Abfolgen), SEPA-Lastschrift, SEPA-Lastschriftzahlungen annehmen, Wahl der Kartenmarke und Ablehnungscodes. Kartendaten am 26. September 2026 geprüft, die deutschen Zeilen am 27. September 2026 gegen die deutsche Fassung.
So benutzt du eine Stripe-Testkarte
Drei Schritte. Testkarten gehören zu Test-API-Schlüsseln, deshalb kann hier nichts eine echte Karte oder einen echten Kunden berühren.
- Auf Testschlüssel umstellen. Nimm deine veröffentlichbaren und geheimen Test-API-Schlüssel oder eine Sandbox. Echte Kartendaten haben dort nichts zu suchen: Stripes Rahmenvertrag verbietet es, im Live-Modus mit echten Zahlungsdaten zu testen. Umgekehrt lehnt der Live-Modus Testnummern ab — Stripe führt dafür einen eigenen Ablehnungscode, testmode_decline.
- Die Karte für das gewünschte Ergebnis wählen. 4242 4242 4242 4242 für eine schlichte erfolgreiche Zahlung. Für deine Fehlerbehandlung nimmst du die Karte, deren Zeile den gewünschten Ablehnungscode nennt, dazu eine beliebige dreistellige CVC und ein Datum in der Zukunft wie 12/34.
- Im Servercode die PaymentMethod verwenden. Stripe rät davon ab, Kartennummern direkt in API-Aufrufen oder serverseitigem Code zu verwenden, auch in Testumgebungen — sonst ist dein Code beim Livegang womöglich nicht PCI-konform. Nimm ein Token wie pm_card_visa; die Spalte PaymentMethod nennt es für jede Karte, die eines hat.
Zahlungen aus Deutschland testen: DE-Karte, SEPA-Lastschrift, girocard
Für einen Shop, der in Deutschland kassiert, zählen drei Stellen der Tabelle mehr als 4242 4242 4242 4242 — und Stripe dokumentiert sie an drei verschiedenen Orten.
- Die deutsche Karte, 4000 0027 6000 0016 (
pm_card_de), steht auf dieser Seite am Anfang der Gruppe „nach Land“. Sie simuliert eine erfolgreiche Zahlung mit einer in Deutschland ausgestellten Karte. Was sich ändert, ist das Ausstellerland, und danach berechnet Stripe grenzüberschreitende Gebühren — für Karten, deren Ausstellerland nicht die USA ist, laut Stripe auch in Testumgebungen. Was die Karte nicht testet, ist die Authentifizierung: Die Vorschriften zur starken Kundenauthentifizierung verlangen für Online-Zahlungen im Europäischen Wirtschaftsraum 3D Secure, aber die Karten aus Stripes Abschnitt Europa und Naher Osten simulieren eine Zahlung, die ohne Authentifizierung erfolgreich ist. Für den Challenge-Ablauf ist die Gruppe 3D Secure zuständig. - Die deutschen SEPA-Test-IBANs führen die Tabelle der lokalen Zahlungsmethoden an:
DE89370400440532013000für eine Lastschrift, die durchgeht,DE62370400440532013001für eine, die fehlschlägt,DE35370400440532013002für eine sofortige Zahlungsanfechtung,DE65370400440002222227für unzureichende Deckung, dazu die VariantenDE08370400440532013003undDE78370400440532013004, die erst nach mindestens drei Minuten entscheiden. Gibst du einen dieser Testwerte ein, validiert das Payment Element die IBAN und zeigt das Mandat an. Stripe veröffentlicht neun Szenarien pro Land; die Tabelle führt die sechs Kernszenarien, die beiden Limit-Fälle undbank_account_unusablestehen bei Stripe. - girocard steht in Stripes Testkarten-Liste nicht. Die Pflicht zur Wahl der Kartenmarke aus der Verordnung (EU) 2015/751 betrifft Co-Badge-girocards laut Stripe nur bei Zahlungen vor Ort; online geht es um Karten mit Cartes-Bancaires-Co-Badge. Wundere dich trotzdem nicht über eine Netzwerkauswahl im Test-Checkout: In Sandboxes ist Cartes Bancaires für Online-Zahlungen immer aktiviert, deshalb kann der Selektor auf Stripes gehosteten Oberflächen auftauchen, auch wenn du Cartes Bancaires nie eingeschaltet hast. Die Co-Branding-Karte Cartes Bancaires/Visa steht in der Markengruppe.
Zwei Dinge, die diese Zeilen nicht zeigen und die du vor dem Livegang wissen solltest. Eine SEPA-Lastschrift entscheidet sich im Test nach Minuten; im Live-Modus rät Stripe, mindestens sechs Werktage zu warten, bevor du eine Zahlung als erfolgreich betrachtest. Und die Kundin kann eine Lastschrift bis zu acht Wochen danach ohne Angabe von Gründen über ihre Bank anfechten — solche Anfechtungen werden automatisch anerkannt; danach und bis zu 13 Monate nach dem Einzug nur noch, wenn die Lastschrift als nicht autorisiert gilt. Plane die Auslieferung entsprechend: Das Ereignis payment_intent.succeeded ist bei der Lastschrift nicht das letzte Wort.
Welche Karte welchen Fehler auslöst — und was dein Webhook sieht
Eine fehlgeschlagene Zahlung gut zu behandeln heißt, drei Dinge gleichzeitig im Kopf zu haben: den error.code, den dein API-Aufruf wirft, den decline_code, den der Aussteller mitschickt, und das Ereignis, das später an deinem Webhook-Endpunkt ankommt. Stripe dokumentiert die drei auf drei verschiedenen Seiten, deshalb ist die meiste Integration gegen eine davon geschrieben und von den anderen beiden überrascht. Hier steht dieselbe Information als eine Zeile pro Ergebnis.
| Testkarte | Was sie simuliert | error.code | decline_code | Webhook-Ereignis |
|---|---|---|---|---|
| 4000 0000 0000 0002 | Allgemeine Ablehnung | card_declined | generic_decline | payment_intent.payment_failed |
| 4000 0000 0000 9995 | Unzureichende Deckung | card_declined | insufficient_funds | payment_intent.payment_failed |
| 4000 0000 0000 9987 | Verlorene Karte | card_declined | lost_card | payment_intent.payment_failed |
| 4000 0000 0000 9979 | Gestohlene Karte | card_declined | stolen_card | payment_intent.payment_failed |
| 4000 0000 0000 6975 | Zu viele Versuche mit einer Karte | card_declined | card_velocity_exceeded | payment_intent.payment_failed |
| 4000 0000 0000 0069 | Abgelaufene Karte | expired_card | keiner | payment_intent.payment_failed |
| 4000 0000 0000 0127 | Falsche CVC | incorrect_cvc | keiner | payment_intent.payment_failed |
| 4000 0000 0000 0119 | Verarbeitungsfehler im Netzwerk | processing_error | keiner | payment_intent.payment_failed |
| 4242 4242 4242 4241 | Nummer, die die Luhn-Prüfung nicht besteht | incorrect_number | keiner | keins — abgelehnt, bevor eine Zahlung existiert |
| 4100 0000 0000 0019 | Radar blockiert sie immer | card_declined | generic_decline | payment_intent.payment_failed |
| 4000 0000 0000 9235 | Erhöhtes Risiko, zur Prüfung eingereiht | keiner — die Zahlung wird erstellt | keiner | review.opened |
| 4000 0000 0000 0101 | CVC-Prüfung schlägt bei Radar fehl | card_declined | generic_decline | payment_intent.payment_failed |
| 4000 0000 0000 0036 | Postleitzahlprüfung schlägt bei Radar fehl | card_declined | generic_decline | payment_intent.payment_failed |
| 4000 0000 0000 0259 | Zahlung erfolgreich, dann Anfechtung wegen Betrugs | keiner | keiner | charge.dispute.created |
| 4000 0000 0000 2685 | Zahlung erfolgreich, dann „Produkt nicht erhalten“ | keiner | keiner | charge.dispute.created |
| 4000 0000 0000 5423 | Zahlung erfolgreich, dann frühzeitige Betrugswarnung | keiner | keiner | radar.early_fraud_warning.created |
| 4000 0000 0000 7726 | Rückerstattung erst ausstehend, später erfolgreich | keiner | keiner | refund.updated |
| 4000 0000 0000 5126 | Rückerstattung scheinbar erfolgreich, später fehlgeschlagen | keiner | keiner | refund.failed |
| 4000 0000 0000 3220 | 3D-Secure-Authentifizierung erforderlich | keiner | keiner | payment_intent.requires_action |
| 4000 0084 0000 1629 | Authentifiziert, dann trotzdem abgelehnt | card_declined | keiner | payment_intent.payment_failed |
| 4000 0084 0000 1280 | Die 3D-Secure-Abfrage selbst schlägt fehl | card_declined | keiner | payment_intent.payment_failed |
Aus dem Lesen als eine Tabelle folgen zwei Gewohnheiten. Erstens: card_declined ist kein Grund, sondern eine Kategorie — der Grund steht im decline_code. Von den acht Ablehnungen oben in der Tabelle tragen fünf einen; die drei anderen liefern einen eigenen error.code. Eine Fehlerbehandlung, die nur auf error.code schaut, kann unzureichende Deckung und eine gestohlene Karte nicht auseinanderhalten. Dabei sollen verlorene und gestohlene Karten laut Stripe gegenüber dem Kunden gar nicht genannt, sondern als generic_decline gemeldet werden — während der Kunde, dessen Konto nur gerade leer ist, einen hilfreichen Hinweis verdient.
Zweitens tauchen manche Ergebnisse in der Antwort gar nicht auf. Eine zur Prüfung eingereihte Zahlung, eine Anfechtung drei Wochen später, eine asynchrone Rückerstattung, die von erfolgreich auf fehlgeschlagen springt — nichts davon ist im Moment des API-Aufrufs sichtbar. Es kommt als Ereignis, oder es kommt gar nicht, weil der Endpunkt nie gebaut wurde. Genau diesen Fehlerfall solltest du gezielt testen: Karte auslösen, dann nachsehen, was dein System mit dem Ereignis gemacht hat.
Zwei Fußnoten, die nicht in die Tabelle passen. Stripe überspringt die CVC- und die Postleitzahlprüfung, wenn du diese Felder nicht mitschickst — die Karten für eine fehlschlagende Prüfung gehen also still durch, solange dein Formular die Felder nicht erfasst. Und für von Radar blockierte Zahlungen nennt Stripe generic_decline, dessen Beschreibung ausdrücklich den Fall einschließt, dass Stripe-Radar bzw. Adaptive Acceptance die Zahlung blockiert haben: Der Kunde soll nicht erfahren, dass er als verdächtig eingestuft wurde. Und weil der Status auf Kartenebene aus einem Test laut Stripe spätere Tests mit derselben Karte beeinflussen kann, nimmst du für jedes unabhängige End-to-End-Szenario eine eigene Testkarte.
3D Secure testen
3D Secure ist der Authentifizierungsschritt, den die Regeln zur starken Kundenauthentifizierung für die meisten Online-Kartenzahlungen im EWR verlangen — und die Stelle, an der eine funktionierende Integration am häufigsten umfällt, weil der Normalfall sie nie sieht. Eine Zahlung, die eine Authentifizierung braucht, schlägt weder fehl noch gelingt sie: Der PaymentIntent kommt mit dem Status requires_action zurück, und dein Frontend muss an Stripe.js übergeben, damit der Kunde die Abfrage abschließen kann.
Neun Karten der Tabelle decken die Zweige ab, und die Unterscheidung, die am meisten Zeit spart, ist erforderlich gegen unterstützt:
- 4000 0000 0000 3220 — Authentifizierung erforderlich, sie gelingt. Das ist die Karte, gegen die du baust. Mit ihr merkst du, ob dein Client den Bestätigungsschritt wirklich aufruft oder
requires_actionstill als Fehler behandelt. - 4000 0000 0000 3055 — 3D Secure wird unterstützt, standardmäßig aber nicht angefordert. Nützlich, um zu prüfen, dass du die Authentifizierung nicht versehentlich zur Pflicht gemacht hast.
- 4000 0084 0000 1629 und 4000 0084 0000 1280 — die beiden schlechten Enden: Der Kunde authentifiziert sich und der Aussteller lehnt trotzdem ab, oder die Abfrage selbst schlägt fehl. Beide kommen als
card_declinedzurück; eine Fehlerbehandlung, die eine abgeschlossene Abfrage für eine abgeschlossene Zahlung hält, zeigt eine Erfolgsseite für eine Zahlung, die nie stattgefunden hat. - 4000 0025 0000 3155 und 4000 0027 6000 3184 — die Fälle mit gespeicherter Karte. Die erste verlangt Authentifizierung für Off-Session-Zahlungen, bis sie für künftige Zahlungen eingerichtet ist; die zweite verlangt sie immer. Wenn du später abbuchen willst, ohne dass der Kunde dabei ist, entscheiden diese beiden über eine funktionierende Verlängerung oder ein totes Abo.
Eine Falle: Nur die Karten dieser Gruppe testen 3D Secure wirklich. Andere Testkarten können es auslösen, aber Stripe gibt dann attempt_acknowledged zurück und überspringt die zusätzlichen Schritte — deine Challenge-Oberfläche erscheint nie, und du schließt fälschlich, dass sie funktioniert. Die deutsche Karte und die anderen europäischen Karten der Gruppe „nach Land“ gehen ohnehin ohne Authentifizierung durch. Und 3D-Secure-Weiterleitungen finden für Zahlungen, die direkt im Stripe-Dashboard angelegt werden, nicht statt: Steuere den Test über dein eigenes Frontend oder einen API-Aufruf.
Stripe-Testkarten nach Land
Stripe führt eine eigene Liste von Testkarten nach Land: 64 Karten aus 58 Ländern, jede simuliert eine erfolgreiche Zahlung mit einer Karte aus diesem Land. Sie sind die letzte Gruppe der Tabelle, und auf dieser Seite steht Deutschland darin an erster Stelle. Die PaymentMethods folgen dem Ländercode — pm_card_de, pm_card_at, pm_card_ch — mit drei Ausnahmen: Die mexikanische Carnet-Karte und die saudische Karte haben keine PaymentMethod, und die japanische JCB-Karte nutzt pm_card_jcb, dieselbe wie die JCB-Karte der Markengruppe. Die Zeile für die Vereinigten Staaten ist 4242 4242 4242 4242 selbst, mit eigener pm_card_us.
Diese Karten ändern das Ausstellerland, und genau dafür sind sie da: Stripe berechnet grenzüberschreitende Gebühren nach dem Land des Kartenausstellers, auch in Testumgebungen. Lass sie also durch alles laufen, was die Gebühr oder das Land der Karte ausliest — etwa eine Abrechnung, die zwischen EWR- und Auslandskarten unterscheidet. Authentifizierung testen sie nicht: Die Karten aus Europa und dem Nahen Osten gehen ohne 3D Secure durch.
Um zu simulieren, wo der Kunde sitzt, statt woher seine Karte kommt, dokumentiert Stripe E-Mail-Adressen im Standortformat für Checkout-Sitzungen, Zahlungslinks und Preistabellen: Häng +location_XX an den lokalen Teil, etwa test+location_DE@example.com, und übergib die Adresse als customer_email einer Checkout-Sitzung oder als prefilled_email eines Zahlungslinks. So siehst du, was eine Kundin in Deutschland im Checkout angezeigt bekommt.
Unter der Kartentabelle stehen die Testwerte, die Stripe für drei lokale Methoden veröffentlicht: SEPA-IBANs für Deutschland, Frankreich und Spanien, Konbini für Japan und Boleto für Brasilien. Sie entscheiden sich anders als Karten. Eine SEPA-Lastschrift wartet in processing, bevor sie gelingt oder fehlschlägt, ein Konbini- oder Boleto-Gutschein wartet in requires_action, bis er bezahlt ist oder abläuft — jede Zeile nennt deshalb die ganze Abfolge von Ereignissen, die dein Webhook bekommt, nicht nur eines.
Rückerstattungen, Anfechtungen und alles, was später kommt
Rückerstattungen sind im Live-Modus asynchron: Eine Rückerstattung kann scheinbar gelingen und später fehlschlagen, oder erst ausstehen und später gelingen. Fast jede Testsuite verpasst das, weil Rückerstattungen mit gewöhnlichen Testkarten sofort erfolgreich sind und ihren Status danach nie ändern. Zwei Karten holen das echte Verhalten zurück: 4000 0000 0000 7726 lässt die Rückerstattung erst ausstehen und später gelingen, 4000 0000 0000 5126 meldet sie erst als erfolgreich und lässt sie später scheitern. Beide senden danach ein Ereignis — genau der Codepfad, den du geschrieben haben willst, bevor ein Kunde am Telefon nach Geld fragt, das nie zurückkam.
Anfechtungen laufen genauso, nur in Zeitlupe. Die Zahlung gelingt ganz normal, Tage später erscheint eine Rückbuchung, und charge.dispute.created ist die einzige Nachricht, die du bekommst. 4000 0000 0000 0259 löst eine Anfechtung wegen Betrugs aus, 4000 0000 0000 2685 „Produkt nicht erhalten“, und 4000 0000 0000 1976 eine Anfrage statt einer vollen Rückbuchung — ein Unterschied, der sich lohnt, weil eine Anfrage oft ohne Eskalation geschlossen werden kann und eine Rückbuchung nicht. 4000 0000 0000 5423 erzeugt stattdessen eine frühzeitige Betrugswarnung: das Netzwerk kündigt eine wahrscheinliche Anfechtung an, solange eine freiwillige Rückerstattung noch möglich ist.
Um auch den Ausgang zu simulieren, antwortest du auf die Anfechtung mit den Beweiswerten, die Stripe für Tests reserviert: winning_evidence schließt sie als gewonnen, losing_evidence als verloren, und escalate_inquiry_evidence macht aus einer Anfrage eine Rückbuchung. Über die API übergibst du den Wert als uncategorized_text. Für die SEPA-Lastschrift gibt es mit DE35370400440532013002 eine eigene Test-IBAN, die sofort nach dem Erfolg eine Zahlungsanfechtung erzeugt.
Als Letztes aus dieser Gruppe: 4000 0000 0000 0077 bucht das Geld direkt auf dein verfügbares statt auf dein ausstehendes Guthaben. Das ist kein Zahlungstest, sondern ein Buchhaltungstest — nützlich, wenn nachgelagert etwas Auszahlungen abgleicht und du nicht erst eine Abwicklungsfrist abwarten willst, um zu sehen, ob es funktioniert.
Die Fixtures als JSON oder CSV herunterladen
Eine Tabelle, die du von Hand abschreiben musst, schreibst du falsch ab. Die beiden Download-Knöpfe oben auf der Seite liefern dieselben 119 Karten als maschinenlesbare Dateien, im Browser aus genau den Daten erzeugt, aus denen diese Seite gerendert wird — was du herunterlädst, kann also nicht von dem abweichen, was du gerade gelesen hast.
Das JSON ist ein Objekt mit source, checked, count und einem Array cards. Jede Karte trägt eine stabile id, auf die du dich in einem Testnamen beziehen kannst, die Ziffern, die Marke, die Gruppe, eine einzeilige Beschreibung, die Regeln für CVC und Ablaufdatum, die vier Felder des Abgleichs — payment_method, error_code, decline_code und webhook_event — und country, den ISO-Code des Ausstellerlands für die Karten der Gruppe nach Land. Felder, die nicht zutreffen, sind null statt zu fehlen, damit ein Parser nie auf fehlende Schlüssel prüfen muss.
Das CSV enthält dieselben zwölf Spalten mit Anführungszeichen nach RFC 4180 — es öffnet sich in einer Tabellenkalkulation und lädt in pandas ohne Konvertierungsargument. Beide Dateien bleiben englisch, in jeder Sprachversion dieser Seite dieselben. Die Testwerte der lokalen Zahlungsmethoden sind zum Kopieren da, nicht zum Herunterladen: Keine der beiden Dateien enthält sie.
Beide Downloads folgen dem gesetzten Filter. Grenz die Tabelle auf die Ablehnungen ein, drück „JSON herunterladen“, und du bekommst zehn Zeilen statt 119 — meist genau das, was ein parametrisierter Test will:
test.each(fixtures.cards.filter(c => c.group === 'decline'))(
'$id surfaces $decline_code',
async ({ payment_method, error_code, decline_code }) => { /* … */ },
);
Die Dateien tragen die Quell-URL und das Prüfdatum, denn einer Kartenliste ohne Datum kannst du in sechs Monaten nicht mehr trauen. Ändert Stripe eine Nummer, ist die ehrliche Korrektur ein erneuter Blick in die Quelle, nicht eine veraltete Kopie im Repository.
Was du eigentlich baust
Niemand schlägt Testkarten zum Spaß nach. Du bist hier, weil du einen Checkout verdrahtest, und der Checkout ist ein Teil von etwas Größerem: ein Katalog, ein Preis, den der Kunde nicht ändern kann, eine Sitzung, die irgendwo mit einem Geheimnis erzeugt wird, ein Webhook, der entscheidet, ob die Bestellung als bezahlt gilt, und alles, was passiert, nachdem das Geld angekommen ist.
Das Teil, das am häufigsten schiefgeht, ist nicht die Karte, sondern der Preis. Eine statische Website, die ihre Preise im HTML hält und einen Betrag an einen Checkout-Endpunkt schickt, vertraut dem Browser die Zahl an — und der Browser ist nicht vertrauenswürdig. Das ist eine ganze Klasse von Fehlern, die keine Testkarte je findet, denn eine manipulierte Zahlung geht wunderbar durch.
Clize baut genau deshalb auf Stripe Checkout und legt den Preis auf die Serverseite: Ein gehosteter Shop berechnet jeden Warenkorb gegen die _catalog.json, die mit der Website ausgeliefert wird, und ignoriert den Betrag, den der Client behauptet. Wenn das die Form deines Problems ist, gibt es für die Katalogdatei einen Generator und einen Validator (auf Englisch). Und wenn nur ein Kunde einen Betrag bezahlen soll, liefert clize pay link --amount 49 eine echte Stripe-Checkout-URL ohne eigenes Stripe-Konto — diese Zahlung ist echtes Geld, also halte sie weit weg von den Nummern auf dieser Seite.
FAQ
Welche Nummer hat die Stripe-Testkarte?
Die Standardkarte ist 4242 4242 4242 4242, eine Visa, die immer gelingt. Dazu eine beliebige dreistellige CVC, ein beliebiges Ablaufdatum in der Zukunft wie 12/34 und beliebige Werte in den übrigen Feldern. Sie funktioniert nur mit deinen Stripe-Test-API-Schlüsseln.
Welches Ablaufdatum und welche CVC nehme ich für eine Stripe-Testkarte?
Jedes Datum in der Zukunft funktioniert — 12/34 ist das Beispiel, das Stripe selbst nennt. Die CVC sind beliebige drei Ziffern, bei American Express beliebige vier. Schickst du gar keine CVC mit, überspringt Stripe die Prüfung; deshalb scheint die Karte für eine fehlschlagende CVC-Prüfung zu gelingen, wenn dein Formular das Feld weglässt.
Gibt es eine deutsche Stripe-Testkarte?
Ja: 4000 0027 6000 0016 mit der PaymentMethod pm_card_de, die Zeile Deutschland in Stripes Liste nach Land. Sie simuliert eine erfolgreiche Zahlung mit einer in Deutschland ausgestellten Karte, ohne Authentifizierung. Für 3D Secure nimmst du die Karten der Gruppe 3D Secure, etwa 4000 0000 0000 3220. Eine girocard-Testkarte führt Stripe nicht.
Wie teste ich eine SEPA-Lastschrift mit Stripe?
Mit Stripes Test-IBANs, zum Beispiel DE89370400440532013000 für eine Lastschrift, die gelingt, und DE62370400440532013001 für eine, die fehlschlägt. Der PaymentIntent geht zuerst in processing und dann in succeeded oder requires_payment_method; die verzögerten IBANs brauchen mindestens drei Minuten. Im Live-Modus rät Stripe, mindestens sechs Werktage zu warten, bevor du eine Lastschrift als erfolgreich betrachtest.
Warum wird meine Stripe-Testkarte abgelehnt?
Drei übliche Gründe. Du schickst sie an Live-Schlüssel; dort meldet Stripe eine Testnummer mit dem Ablehnungscode testmode_decline. Du hast eine Karte kopiert, die ablehnen soll — 4000 0000 0000 0002 und die ganze Gruppe Ablehnungen gibt es genau dafür. Oder die Nummer fällt durch die Luhn-Prüfung, wie 4242 4242 4242 4241, die incorrect_number liefert, bevor eine Zahlung entsteht.
Wie teste ich 3D Secure mit Stripe?
Mit 4000 0000 0000 3220: Sie verlangt eine Authentifizierung, und die gelingt. Der PaymentIntent kommt als requires_action zurück, und dein Frontend muss an Stripe.js übergeben, damit der Kunde die Abfrage abschließt. Nur die Karten der Gruppe 3D Secure testen diesen Ablauf wirklich; andere können ihn auslösen, aber Stripe gibt attempt_acknowledged zurück und überspringt den Schritt.
Welche Stripe-Testkarte löst eine Zahlungsanfechtung aus?
4000 0000 0000 0259 für eine Anfechtung wegen Betrugs, 4000 0000 0000 2685 für „Produkt nicht erhalten“ und 4000 0000 0000 1976 für eine Anfrage statt einer vollen Rückbuchung. Die Zahlung gelingt zuerst, die Anfechtung kommt später als Ereignis charge.dispute.created. Mit den Beweiswerten winning_evidence oder losing_evidence schließt du sie als gewonnen oder verloren.
Wenn die Tests durch sind: eine echte Zahlung annehmen.
Ein Befehl liefert einen echten Stripe-Checkout-Link, ohne eigenes Stripe-Konto, ohne Schlüssel und ohne Onboarding-Formular. Das ist echtes Geld — halte die beiden Nummernsätze sauber auseinander.
$ npm i -g @clize/clize && clize login $ clize pay link --amount 49 --for "Rechnung 1042"[ Agent Storefront → ]