💳 Stripe Integration
Verbinde deine Stripe-Zahlungsevents mit der AlgoGuard License API, um nach dem Kauf automatisch Lizenzen zu erstellen.
🚀 Workflow
- Stripe Webhook: Erstelle in Stripe einen Webhook für
checkout.session.completedund leite ihn an dein Backend. - Backend Handler: Empfange das Event, prüfe die Signatur und extrahiere die E-Mail des Kunden.
- AlgoGuard API: Rufe
POST /api/v1/licensesauf, um eine Lizenz zu generieren. - Zustellung: AlgoGuard sendet den Lizenzschlüssel an den Kunden (falls konfiguriert) oder gibt ihn an dein Backend zurück.
💻 Next.js Implementierung
Hier ist ein komplettes Beispiel für einen Next.js 14 Route Handler, der ein Stripe Checkout Event verarbeitet.
// app/api/stripe-webhook/route.ts
import Stripe from "stripe";
import { NextRequest } from "next/server";
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);
export async function POST(req: NextRequest) {
const payload = await req.text();
const signature = req.headers.get("stripe-signature")!;
let event;
try {
event = stripe.webhooks.constructEvent(payload, signature, process.env.STRIPE_WEBHOOK_SECRET!);
} catch (err) {
return new Response(`Webhook Error: ${err.message}`, { status: 400 });
}
// Verarbeite das checkout.session.completed Event
if (event.type === "checkout.session.completed") {
const session = event.data.object as Stripe.Checkout.Session;
// AlgoGuard API aufrufen
await fetch(`${process.env.ALGOGUARD_BASE_URL}/api/v1/licenses`, {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.ALGOGUARD_API_KEY}`,
"Content-Type": "application/json",
// Wichtig: Stripe Session ID als Idempotency Key nutzen
"Idempotency-Key": session.id,
},
body: JSON.stringify({
product_id: process.env.ALGOGUARD_PRODUCT_ID,
customer_email: session.customer_email || session.customer_details?.email,
metadata: {
stripe_session_id: session.id,
plan: "premium",
},
}),
});
}
return new Response(JSON.stringify({ received: true }), { status: 200 });
}
🔑 Wichtige Konzepte
Idempotenz
Sende immer den Idempotency-Key Header (z.B. die Stripe Session ID). Dies stellt sicher, dass bei mehrfacher Zustellung des Webhooks durch Stripe keine doppelten Lizenzen erstellt werden.
API Keys
Erstelle einen Service Key unter Settings → Developers → API Keys. Nutze für Backend-Integrationen keine persönlichen User-Keys.
Testen
Du kannst den Flow mit der Stripe CLI lokal testen:
stripe trigger checkout.session.completed