AlgoGuardDocs
AlgoGuard

AlgoGuard

Integration

Stripe Integration

Verbinde Stripe Zahlungen mit AlgoGuard Lizenzen

💳 Stripe Integration

Verbinde deine Stripe-Zahlungsevents mit der AlgoGuard License API, um nach dem Kauf automatisch Lizenzen zu erstellen.


🚀 Workflow

  1. Stripe Webhook: Erstelle in Stripe einen Webhook für checkout.session.completed und leite ihn an dein Backend.
  2. Backend Handler: Empfange das Event, prüfe die Signatur und extrahiere die E-Mail des Kunden.
  3. AlgoGuard API: Rufe POST /api/v1/licenses auf, um eine Lizenz zu generieren.
  4. 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
Stripe Integration | AlgoGuard