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.
Fünf Schritte bis zur ersten funktionierenden Version.
Stripe kennt eine E-Mail-Adresse, keinen Discord-Account, und die beiden passen oft nicht zusammen. Verknüpfe sie also vor dem Bezahlen:
identify. Du bekommst seine Discord-Benutzer-ID.guilds.join hinzu, wenn Käufer vielleicht noch nicht in deinem Server sind. Damit kann dein Bot sie hinzufügen.client_reference_id auf die Checkout Session und in die Metadaten des Abos, damit jedes spätere Event sie findet.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.
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.
Ein Webhook-Endpunkt auf einem ständig laufenden HTTPS-Server. Zwei Regeln vor jeder Logik:
Dann ordne jedem Event zu, was mit der Rolle passiert:
| Stripe-Event | Die Rolle |
|---|---|
| checkout.session.completed | Die Rolle vergeben und das Mitglied bei Bedarf zum Server hinzufügen. |
| customer.subscription.updated | Die Rolle behalten, solange der Status active, trialing oder past_due ist; bei unpaid, canceled oder paused entfernen. |
| customer.subscription.deleted | Die Rolle entfernen. |
| charge.refunded | Deine Entscheidung: Die meisten entfernen bei einer vollständigen Rückerstattung die Rolle und kündigen das Abo. |
| charge.dispute.created | Deine 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.
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 fünf Schritte ergeben eine erste funktionierende Version. Mit diesen hier kannst du sie unbeaufsichtigt laufen lassen.
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.
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.
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.
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.
Ordne jedem Preis eine Rolle zu und tausche Rollen, wenn ein Mitglied zwischen Plänen wechselt.
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.
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).
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.
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.
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.
Ja, für den Webhook. Stripe muss ihn jederzeit über HTTPS erreichen können.
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.
Bis 15 Abonnenten kostenlos · 0 % Umsatzprovision · Dein eigenes Stripe-Konto