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ückgaberecht

1. 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:

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.

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:

"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 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ückgaberecht

Kurs · 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.

Jetzt einsteigen → Kursübersicht ansehen →

Einmalzahlung · Kein Abo · 14 Tage Rückgaberecht