Claude Code & Stripe: Zahlungsabwicklung in SaaS-Projekten integrieren
Wer ein SaaS-Produkt baut, kommt an Stripe kaum vorbei. Die API ist durchdacht, die Dokumentation exzellent — aber der Weg von "SDK installiert" bis "Webhooks korrekt verifiziert und Subscriptions verwaltet" kostet trotzdem Zeit. Claude Code Stripe-Integration beschleunigt genau diesen Weg: Webhook-Handler generieren, Fehler in der Webhook-Verarbeitung debuggen, Checkout-Sessions konfigurieren — alles mit dem gesamten Projekt-Kontext im Blick.
Dieser Artikel zeigt den vollständigen Stack: von der SDK-Installation über Checkout Sessions und Webhooks bis hin zu Kunden und Abonnements — und erklärt konkret, wo Claude Code den Unterschied macht.
Claude Code Mastery — Stripe, Agents, Hooks auf Deutsch
Im Kurs lernst du, wie du Claude Code für echte Produktions-Workflows einsetzt: Stripe-Integration, autonome Agents, MCP-Server und mehr. Einmalig bezahlt, kein Abo.
Zum Kurs — Jetzt starten → Einmalzahlung · Kein Abo · 14 Tage Rückgaberecht1. Was ist Stripe — APIs, Dashboard, Test-Modus
Stripe ist eine Zahlungsplattform, die Kreditkarten, SEPA-Lastschrift, Wallets und Dutzende weitere Methoden hinter einer einheitlichen API zusammenfasst. Für SaaS-Entwickler sind drei Teile relevant:
- Stripe Dashboard: Weboberfläche für Testzahlungen, Logs, Webhooks, Kunden und Abonnements. Hier siehst du in Echtzeit, was deine API-Calls auslösen.
- Test-Modus vs. Live-Modus: Jeder Account hat zwei Schlüsselpaare. Im Test-Modus fließt kein echtes Geld — Testkarten funktionieren, Stripe-Webhooks liefern realistische Events. Der Wechsel in den Live-Modus erfordert nur den Schlüsseltausch.
- Stripe CLI:
stripe listenleitet Webhook-Events an deinen lokalen Server weiter. Unverzichtbar für die Entwicklung.
Test-Modus ist der Standard: Alle neuen Stripe-Accounts starten im Test-Modus. Du siehst es oben rechts im Dashboard. Test-API-Keys beginnen mit sk_test_, Live-Keys mit sk_live_. Verwechsle sie nicht — Claude Code kann beim Audit helfen, aber sk_live_ in einer .env.test-Datei ist ein reales Sicherheitsproblem.
2. Stripe SDK einrichten: Python und Node
Der API-Key gehört immer in eine Umgebungsvariable, niemals direkt in den Code. Weder als String-Literal noch als Default-Parameter. Claude Code folgt dieser Regel automatisch, wenn du es explizit anweist — und weist dich darauf hin, wenn du es nicht tust.
Python
pip install stripe python-dotenv
import os
import stripe
from dotenv import load_dotenv
load_dotenv()
stripe.api_key = os.environ["STRIPE_SECRET_KEY"]
Node.js / TypeScript
npm install stripe dotenv
import Stripe from "stripe";
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!, {
apiVersion: "2024-06-20",
});
Niemals hardcoden: stripe.api_key = "sk_test_abc123..." im Quellcode ist ein kritischer Fehler. Keys tauchen in Git-History auf, in Logs, in Error-Reports. Immer os.environ["STRIPE_SECRET_KEY"] — und .env in .gitignore. Claude Code erkennt hartkodierte Keys beim Code-Review und weist aktiv darauf hin.
3. Checkout Session erstellen
Stripe Checkout ist die schnellste Integration: Du erstellst eine Session, leitest den Nutzer auf die Stripe-gehostete Seite um, und Stripe kümmert sich um alles weitere. Keine eigene Zahlungsformular-Implementierung, keine PCI-Compliance-Kopfschmerzen.
Einmalige Zahlung (Python)
import stripe
import os
stripe.api_key = os.environ["STRIPE_SECRET_KEY"]
session = stripe.checkout.Session.create(
payment_method_types=["card"],
line_items=[{
"price_data": {
"currency": "eur",
"product_data": {"name": "Claude Code Mastery Kurs"},
"unit_amount": 19900, # Cent: 199,00 EUR
},
"quantity": 1,
}],
mode="payment",
success_url="https://example.com/success?session_id={CHECKOUT_SESSION_ID}",
cancel_url="https://example.com/cancel",
)
print(session.url) # Nutzer hierhin weiterleiten
Subscription (Abo)
session = stripe.checkout.Session.create(
payment_method_types=["card"],
line_items=[{
"price": os.environ["STRIPE_PRICE_ID"], # Price-ID aus dem Dashboard
"quantity": 1,
}],
mode="subscription",
success_url="https://example.com/success?session_id={CHECKOUT_SESSION_ID}",
cancel_url="https://example.com/cancel",
customer_email=user_email, # Optional: Stripe-Kunden direkt zuordnen
)
Claude Code generiert diese Checkout-Session-Konfigurationen auf Abruf — inklusive Fehlerbehandlung, Logging und dem passenden Flask/FastAPI/Express-Endpoint darum herum. Ein einzelner Prompt reicht: "Erstelle einen POST-Endpoint /create-checkout-session der eine Stripe Checkout Session für das Abo mit der Price-ID aus .env anlegt."
4. Webhooks empfangen und verifizieren
Webhooks sind der kritischste Teil der Stripe-Integration — und der, bei dem die meisten Fehler passieren. Stripe sendet Events an deinen Server: checkout.session.completed, invoice.paid, customer.subscription.deleted. Ohne korrekte Webhook-Verarbeitung weißt du nicht, wann Zahlungen eingehen oder Abos gekündigt werden.
Die Signaturverifikation ist Pflicht. Ohne sie kann jeder beliebige HTTP-Request deinen Webhook-Endpoint triggern und Zahlungen vortäuschen.
import stripe
import os
from flask import Flask, request, jsonify
app = Flask(__name__)
stripe.api_key = os.environ["STRIPE_SECRET_KEY"]
webhook_secret = os.environ["STRIPE_WEBHOOK_SECRET"]
@app.route("/webhook", methods=["POST"])
def webhook():
payload = request.get_data(as_text=True)
sig_header = request.headers.get("Stripe-Signature")
try:
event = stripe.Webhook.construct_event(
payload, sig_header, webhook_secret
)
except stripe.error.SignatureVerificationError:
return jsonify({"error": "Invalid signature"}), 400
if event["type"] == "checkout.session.completed":
session = event["data"]["object"]
fulfill_order(session)
elif event["type"] == "customer.subscription.deleted":
subscription = event["data"]["object"]
cancel_subscription(subscription["customer"])
return jsonify({"status": "ok"}), 200
Claude Code Tipp: Beschreibe deinen Webhook-Handler und alle Events, die du verarbeiten willst, in einem einzigen Prompt. Claude Code liest deine bestehenden Datenbankmodelle, erkennt das ORM-Pattern und generiert den Handler konsistent mit deinem Stil — inklusive idempotenter Verarbeitung (wichtig: Stripe kann Events mehrfach senden).
Lokale Webhooks mit der Stripe CLI
# Stripe CLI installieren (macOS)
brew install stripe/stripe-cli/stripe
# Lokale Entwicklung: Webhooks weiterleiten
stripe listen --forward-to localhost:5000/webhook
# Webhook-Secret aus der CLI-Ausgabe in .env eintragen:
# STRIPE_WEBHOOK_SECRET=whsec_...
5. Kunden und Abonnements verwalten
Für SaaS-Produkte mit Subscription-Modell brauchst du eine stabile Beziehung zwischen deinen Nutzern und den Stripe-Kunden-IDs. Lege Stripe-Kunden beim ersten Checkout-Abschluss an und speichere die customer_id in deiner Datenbank.
import stripe
import os
stripe.api_key = os.environ["STRIPE_SECRET_KEY"]
# Neuen Stripe-Kunden anlegen
customer = stripe.Customer.create(
email=user.email,
name=user.display_name,
metadata={"user_id": str(user.id)}, # Interne ID verknüpfen
)
# customer.id in der Datenbank speichern
user.stripe_customer_id = customer.id
db.session.commit()
# Aktive Abonnements eines Kunden abfragen
subscriptions = stripe.Subscription.list(
customer=user.stripe_customer_id,
status="active",
)
# Abonnement kündigen (zum Ende der Laufzeit)
stripe.Subscription.modify(
subscription_id,
cancel_at_period_end=True,
)
Das metadata-Feld ist entscheidend: Es verknüpft den Stripe-Kunden mit deiner internen User-ID. Ohne diese Verknüpfung wird es mühsam, in Webhook-Handlers den richtigen Datenbankdatensatz zu finden.
6. Testmodus: Testkarten und lokale Entwicklung
Stripe stellt offizielle Testkarten bereit, die bestimmte Szenarien zuverlässig auslösen — kein echtes Geld, volle Event-Pipeline.
4242 4242 4242 4242— Erfolgreiche Zahlung4000 0000 0000 9995— Karte wird abgelehnt (insufficient_funds)4000 0025 0000 3155— Erfordert 3D Secure Authentifizierung4000 0000 0000 0069— Abgelaufene Karte
Beliebiges Ablaufdatum in der Zukunft und beliebige dreistellige CVC funktionieren mit allen Testkarten.
# Testzahlung direkt per CLI auslösen
stripe trigger checkout.session.completed
# Spezifisches Event mit Custom-Payload testen
stripe trigger payment_intent.succeeded \
--override payment_intent:amount=2000
7. Claude Code Tipps für die Stripe-Integration
Die drei Bereiche, bei denen Claude Code bei der Claude Code Stripe-Entwicklung den meisten Zeitgewinn bringt:
- Webhook-Handler generieren: Beschreibe alle Events und dein Datenbankschema in einem Prompt. Claude Code generiert einen vollständigen, idempotenten Handler mit korrekter Signaturverifikation, Fehlerbehandlung und dem passenden ORM-Code.
- Fehler debuggen: Stripe-Fehler haben Codes wie
card_declined,insufficient_fundsoderwebhook_signature_verification_failed. Wirf den Fehler-Response direkt in Claude Code: es erkennt den Stripe-Fehlercode, liest den relevanten Code-Pfad und erklärt, wo der Fehler entsteht und wie er behoben wird. - Security-Audit: "Überprüfe meinen Stripe-Code auf Sicherheitsprobleme" — Claude Code prüft auf hartkodierte Keys, fehlende Signaturverifikation, fehlende Idempotenz und unsichere Datenverarbeitung in einem Durchgang.
"Ich habe meinen Webhook-Handler beschrieben und Claude Code hat in einem Prompt einen vollständigen Handler für fünf verschiedene Stripe-Events generiert — inklusive Datenbankupdate, idempotenter Verarbeitung und Fehler-Logging. Was ich sonst in 2 Stunden gebaut hätte, war in 15 Minuten fertig und getestet."
Ein weiterer Vorteil: Claude Code liest die Stripe-SDK-Dokumentation und dein Projekt gleichzeitig. Es weiß, welche API-Version du verwendest, welche Parameter erforderlich sind, und welche deprecated sind — ohne dass du zwischen Dokumentations-Tab und IDE wechseln musst.
Verwandte Artikel:
- Claude Code Debugging — Stripe-Fehler und Webhook-Probleme systematisch debuggen
- Claude Code für Python-Projekte — Workflow-Setup für Flask, FastAPI und Django
Claude Code Mastery — von Stripe bis zum produktiven Agent
Stripe ist ein Kapitel. Im Kurs lernst du außerdem Agents, MCP-Server, Hooks und Multi-Agent-Workflows — vollständig auf Deutsch, einmalig bezahlt.
Jetzt starten → Einmalzahlung · Kein Abo · 14 Tage RückgaberechtKurs · Claude Code Mastery
Stripe, Agents, MCP — alles auf Deutsch
Stripe-Integration. Webhook-Handler. Autonome Agents. MCP-Server. Hooks. Alles auf Deutsch, einmalig bezahlt — kein Abo, keine Plattformabhängigkeit.
Einmalzahlung · Kein Abo · 14 Tage Rückgaberecht