Stripe mit Discord-Rollen verbinden

Um eine Discord-Rolle zu vergeben, wenn jemand mit Stripe zahlt, brauchst du drei Teile: einen Weg, den Kauf einem Discord-Account zuzuordnen, einen Webhook, der auf die Abo-Events von Stripe hört, und einen Bot, der die Rolle über die Discord-API vergibt oder entfernt. Du kannst alle drei selbst bauen oder einen Bot wie flatpass nutzen, der dasselbe auf deinem eigenen Stripe-Konto erledigt.

  • Der ganze Aufbau, Schritt für Schritt
  • Die Sonderfälle, die Zeit kosten
  • Oder die fertige Lösung
  1. Käufer meldet sich mit Discord anidentify · guilds.join
  2. Stripe CheckoutAbo-Modus · Discord-ID angehängt
  3. Dein WebhookSignatur geprüft · jedes Event einmal
  4. Discord APIPUT …/members/{user}/roles/{role}
  5. Rolle vergebenund entfernt, wenn es endet

Selbst bauen

Fünf Schritte bis zur ersten funktionierenden Version.

Schritt 1: Herausfinden, wer der Käufer auf Discord ist

Stripe kennt eine E-Mail-Adresse, keinen Discord-Account, und die beiden passen oft nicht zusammen. Verknüpfe sie also vor dem Bezahlen:

  • Schick den Käufer durch Discords OAuth2 mit dem Scope identify. Du bekommst seine Discord-Benutzer-ID.
  • Füge guilds.join hinzu, wenn Käufer vielleicht noch nicht in deinem Server sind. Damit kann dein Bot sie hinzufügen.
  • Setz die Discord-Benutzer-ID als client_reference_id auf die Checkout Session und in die Metadaten des Abos, damit jedes spätere Event sie findet.

Schritt 2: Den Discord-Bot erstellen

  • Erstelle im Discord Developer Portal eine Anwendung und füge ihr einen Bot hinzu.
  • Lade ihn mit „Rollen verwalten“ in deinen Server ein, plus „Einladung erstellen“, wenn er Käufer zum Server hinzufügen soll.
  • Zieh die Rolle des Bots über jede Rolle, die er verkauft, in Servereinstellungen → Rollen. Discord lässt einen Bot nur Rollen unter seiner eigenen verwalten und setzt die Rolle eines neuen Bots ganz nach unten. Das ist der häufigste Grund, warum eine eigentlich funktionierende Integration unbemerkt scheitert.

Der Bot muss nicht im Gateway von Discord online sein, um Rollen zu ändern. Sein Token funktioniert mit der REST-API von Discord, aufgerufen aus deinem Webhook-Handler.

Schritt 3: Die Bezahlung erstellen

Eine Stripe Checkout Session im Modus subscription, mit dem Preis für die Rolle und der Discord-Benutzer-ID aus Schritt 1. Stripe hostet die Seite, also sind Karten, Apple Pay und Google Pay dabei.

Schalte das Kundenportal von Stripe zum Kündigen und Ändern von Karten ein. Sonst landet jede Kündigung als Support-Anfrage bei dir.

Schritt 4: Auf die Events von Stripe hören

Ein Webhook-Endpunkt auf einem ständig laufenden HTTPS-Server. Zwei Regeln vor jeder Logik:

  • Prüfe die Signatur bei jeder Anfrage, mit dem Signing Secret deines Endpunkts und dem unveränderten Request-Body.
  • Verarbeite jedes Event einmal. Stripe wiederholt Zustellungen bis zu drei Tage lang und garantiert keine Reihenfolge. Speichere die IDs der Events, die du verarbeitet hast, und lies den aktuellen Status des Abos, statt der Reihenfolge zu trauen, in der Events ankommen.

Dann ordne jedem Event zu, was mit der Rolle passiert:

Stripe-EventDie Rolle
checkout.​session.​completedDie Rolle vergeben und das Mitglied bei Bedarf zum Server hinzufügen.
customer.​subscription.​updatedDie Rolle behalten, solange der Status active, trialing oder past_due ist; bei unpaid, canceled oder paused entfernen.
customer.​subscription.​deletedDie Rolle entfernen.
charge.​refundedDeine Entscheidung: Die meisten entfernen bei einer vollständigen Rückerstattung die Rolle und kündigen das Abo.
charge.​dispute.​createdDeine Entscheidung: Die meisten entfernen die Rolle, bis über die Anfechtung entschieden ist.

Die Rolle bei past_due zu behalten ist wichtig: Stripe versucht eine fehlgeschlagene Verlängerung tagelang erneut, und die Rolle bei der ersten fehlgeschlagenen Abbuchung zu entfernen bestraft jemanden, dessen Karte einfach abgelaufen ist.

Schritt 5: Die Rolle in Discord ändern

Drei Aufrufe, mit deinem Bot-Token:

Rolle vergebenPUT /guilds/{guild}/members/{user}/roles/{role}

Rolle entfernenDELETE /guilds/{guild}/members/{user}/roles/{role}

Zum Server hinzufügenPUT /guilds/{guild}/members/{user}

Um jemanden zum Server hinzuzufügen, brauchst du das OAuth2-Access-Token aus Schritt 1, und die Rolle kannst du im selben Aufruf gleich mitgeben. Dann verarbeite, was Discord zurückschickt: 50013 heißt, die Rolle steht über der des Bots, also hilft ein neuer Versuch nicht; 10007 heißt, die Person ist nicht im Server; 429 heißt, warte retry_after ab und versuch es erneut.

Die Sonderfälle: wo die Zeit draufgeht

Die fünf Schritte ergeben eine erste funktionierende Version. Mit diesen hier kannst du sie unbeaufsichtigt laufen lassen.

Kündigung zum Ende des Zeitraums

Ein Mitglied, das kündigt, hat bis zum Ende des Zeitraums bezahlt. Entferne die Rolle, wenn das Abo tatsächlich endet, nicht wenn es auf „Kündigen“ klickt.

Verlassen und wieder beitreten

Discord entfernt die Rollen eines Mitglieds, wenn es geht. Kommt es zurück, während es noch zahlt, gibt ihm nichts die Rolle zurück, außer du hörst auf Beitritte (der privilegierte Server Members Intent) oder gibst ihm eine Möglichkeit, danach zu fragen.

Die Reihenfolge der Rollen ändert sich

Jemand zieht die Rolle, die du verkaufst, über die des Bots, und ab dann schlägt jede Vergabe fehl. Du musst das bemerken und den Mitgliedern, die in der Zwischenzeit bezahlt haben, die Rolle erneut geben.

Verpasste Events

Dein Server war länger nicht erreichbar, als Stripe die Zustellung wiederholt. Ohne einen regelmäßigen Abgleich von Stripe mit Discord bekommen diese Mitglieder ihre Rolle nie oder verlieren sie nie.

Mehrere Pläne

Ordne jedem Preis eine Rolle zu und tausche Rollen, wenn ein Mitglied zwischen Plänen wechselt.

Deine eigenen Aufzeichnungen

Welches Mitglied welches Abo hat, damit du „Ich habe bezahlt und keine Rolle“ beantworten kannst, ohne zwei Dashboards zu öffnen.

Was das Selbstbauen kostet

Deine Zeit, für die erste Version und für die Sonderfälle. Einen ständig laufenden HTTPS-Server für den Webhook. Pflege, wenn sich die APIs von Stripe und Discord ändern. Und keine Plattformgebühr: nur die Kartenabwicklung von Stripe. Wenn du volle Kontrolle oder eigene Logik willst, ist das ein gutes Projekt.

Oder nutze einen Bot, der das schon kann

flatpass ist genau dieser Aufbau, schon fertig, und läuft auf deinem eigenen Stripe-Konto.

  • Den Discord-Account verknüpfen. Über dein Plan-Panel ganz ohne Anmeldung: Der Bezahllink ist schon mit dem Discord-Account des Mitglieds verknüpft. Auf deiner Einladungsseite melden sich Mitglieder mit Discord an oder lassen sich vom Bot einen Link per DM schicken; die Anmeldung nutzt guilds.join, also wird ein Käufer, der nicht in deinem Server ist, hinzugefügt.

  • Der Bot. Zwei Berechtigungen, „Rollen verwalten“ und „Einladung erstellen“. Nie „Administrator“.

  • Die Bezahlung. Stripe Checkout auf deinem eigenen Stripe-Konto, mit Karten, Apple Pay und Google Pay.

  • Sichere Webhooks. Jedes Stripe-Event wird auf seine Signatur geprüft und einmal verarbeitet.

  • Fehlgeschlagene Verlängerungen. Die Rolle bleibt, während Stripe die Abbuchung erneut versucht.

  • Kündigungen. Die Rolle bleibt bis zum Ende des bezahlten Zeitraums. Mitglieder kündigen im Kundenportal von Stripe, über /membership.

  • Rückerstattungen. Eine vollständige Rückerstattung entfernt die Rolle und beendet das Abo; eine teilweise ändert nichts.

  • Rückbuchungen. Die Rolle wird entfernt, wenn eine Zahlungsanfechtung eröffnet wird. Sie kommt zurück, wenn du gewinnst, und das Abo endet, wenn du verlierst.

  • Die Reihenfolge der Rollen. Dein Dashboard warnt dich, und Mitglieder, die in der Zwischenzeit bezahlt haben, bekommen ihre Rolle, sobald du es behebst.

  • Verlassen und wieder beitreten. /membership oder der Button „… öffnen“ auf deiner Einladungsseite gibt die Rolle zurück.

  • Deine Aufzeichnungen. Eine Mitgliederliste mit Plan, Status und Verlängerungsdatum jedes Mitglieds und ob die Rolle vergeben ist.

Noch nicht gebaut: ein Mitglied zwischen Plänen wechseln lassen, und Einmalzahlungen. Bis 15 Abonnenten kostenlos, dann eine feste Monatsgebühr ab 29 $, und 0 % Umsatzprovision; die Kartengebühr von Stripe ist in beiden Fällen gleich. So funktioniert es für deine Mitglieder.

Lieber einen fertigen Bot, als selbst zu bauen? flatpass, LaunchPass und PayBot auf deinem eigenen Stripe im Vergleich (auf Englisch).

Häufige Fragen

Wie verbinde ich Stripe mit Discord-Rollen?

Um eine Discord-Rolle zu vergeben, wenn jemand mit Stripe zahlt, brauchst du drei Teile: einen Weg, den Kauf einem Discord-Account zuzuordnen, einen Webhook, der auf die Abo-Events von Stripe hört, und einen Bot, der die Rolle über die Discord-API vergibt oder entfernt. Du kannst alle drei selbst bauen oder einen Bot wie flatpass nutzen, der dasselbe auf deinem eigenen Stripe-Konto erledigt.

Hat Stripe eine Discord-Integration?

Keine eingebaute. Stripe nimmt die Zahlung entgegen, und etwas anderes muss die Discord-Rolle ändern: dein eigener Webhook und Bot oder eine App, die das für dich erledigt.

Kann ich das mit n8n oder Zapier bauen?

Ja. Es gelten dieselben Teile: die Verknüpfung des Discord-Accounts vor dem Bezahlen, die Stripe-Events, die du verarbeiten musst, und die Aufrufe an Discord. Die Sonderfälle verschwinden nicht.

Brauche ich einen Server?

Ja, für den Webhook. Stripe muss ihn jederzeit über HTTPS erreichen können.

Muss der Bot ständig online sein?

Nicht, um Rollen zu ändern: Die API-Aufrufe funktionieren allein mit dem Token des Bots. Nur, um auf Dinge in Discord zu reagieren, etwa wenn ein Mitglied wieder beitritt.

Spar dir den Aufwand, behalte dein Stripe

Bis 15 Abonnenten kostenlos · 0 % Umsatzprovision · Dein eigenes Stripe-Konto