Discourse Abonnement-Plugin

[Anleitung] So richten Sie Discourse-Abonnements mit Stripe-Preistabellen ein (und häufige Fallstricke)

Hallo zusammen,

Nach einem langwierigen Fehlerbehebungsprozess möchte ich eine definitive Anleitung zum Einrichten des offiziellen discourse-subscriptions-Plugins mit der modernen Stripe Pricing Table-Methode teilen. Dieser Ansatz ist leistungsstark, hat aber einige kritische Schritte, die nicht sofort ersichtlich sind und zu Fehlern wie fehlgeschlagenen Webhooks (404 Not Found) oder Benutzern, die nach einer erfolgreichen Zahlung nicht zu Gruppen hinzugefügt werden, führen können.

Hier ist der Schritt-für-Schritt-Prozess, der nachweislich funktioniert.


Teil 1: Stripe-Konfiguration

Dieser Prozess verwendet Stripe als „Single Source of Truth“ für alle Produkte und Preise.

1. Erstellen Sie Ihre Produkte und Preise

  • Stellen Sie in Ihrem Stripe Dashboard sicher, dass Sie sich im Live-Modus befinden.
  • Gehen Sie zu Produkte > Produktkatalog.
  • Erstellen Sie zuerst Ihre Hauptprodukte (z. B. „Premium-Mitgliedschaft“, „VIP-Zugang“).
  • Erstellen Sie unter jedem Produkt alle zugehörigen Preise (z. B. XX / Monat, XXX / Jahr).

2. Der ENTSCHEIDENDE Metadaten-Schritt Damit das Plugin Benutzer automatisch zu einer Gruppe hinzufügt, müssen Sie jedem einzelnen Preisobjekt bestimmte Metadaten hinzufügen. Die Benutzeroberfläche des Stripe Dashboards kann dies schwer auffindbar machen.

  • Wenn Sie einen neuen Preis erstellen (oder wenn Sie die Option „Preis bearbeiten“ finden können), müssen Sie Metadaten hinzufügen. Möglicherweise müssen Sie während der Preiserstellung auf „Zusätzliche Optionen“ klicken, um die Metadatenfelder anzuzeigen.
  • Klicken Sie auf + Metadaten hinzufügen und geben Sie Folgendes ein:
    • SCHLÜSSEL: group_name
    • WERT: Der eindeutige, URL-sichere Slug/Handle der Gruppe aus Discourse, nicht ihr vollständiger Name.

Beispiel:

  • Wenn der vollständige Name Ihrer Discourse-Gruppe „Enclave Plus“ lautet, ist ihr Slug wahrscheinlich EnclavePlus.
  • Sie müssen EnclavePlus als Wert verwenden. Die Verwendung von „Enclave Plus“ mit einem Leerzeichen schlägt fehl.
  • Sie müssen dies für jeden Preisplan wiederholen, den Sie mit einer Gruppe verknüpfen möchten.

3. Erstellen Sie Ihre Stripe-Preistabelle

  • Gehen Sie zu Produkte > Preistabellen.
  • Erstellen Sie eine neue Tabelle und fügen Sie die gerade konfigurierten Preise hinzu.
  • Klicken Sie nach der Veröffentlichung der Tabelle auf die Schaltfläche „Code kopieren“, um Ihre Preistabellen-ID zu erhalten (sie beginnt mit prctbl_...).

4. Konfigurieren Sie den Webhook-Endpunkt (Die 404-Fehlerbehebung) Dies ist der häufigste Fehlerpunkt.

  • Gehen Sie zu Entwickler > Webhooks und klicken Sie auf + Endpunkt hinzufügen.
  • Die Endpunkt-URL muss dem folgenden Format entsprechen: https://your-discourse-site.com/s/hooks
    Hinweis: Der richtige Pfad ist /s/hooks, nicht /s/stripe/webhook.
  • Fügen Sie für Zu sendende Ereignisse mindestens Folgendes hinzu:
    • checkout.session.completed
    • customer.subscription.deleted
  • Erstellen Sie den Endpunkt und kopieren Sie das Signaturgeheimnis (es beginnt mit whsec_...).

Teil 2: Discourse-Konfiguration

Nun konfigurieren wir das Plugin, um alles zu verwenden, was Sie in Stripe eingerichtet haben.

1. Geben Sie API-Schlüssel und Preistabellen-ID ein

  • Gehen Sie zu Admin > Einstellungen und suchen Sie nach discourse subscriptions.
  • Geben Sie Ihre Live-Stripe-Schlüssel ein:
    • discourse subscriptions public key (pk_live_...)
    • discourse subscriptions secret key (sk_live_...)
    • discourse subscriptions webhook secret (whsec_...)
  • Aktivieren Sie den Preistabellen-Modus:
    • Aktivieren Sie das Kontrollkästchen für discourse subscriptions pricing table enabled.
    • Fügen Sie Ihre prctbl_...-ID in das Feld discourse subscriptions pricing table id ein.

2. Verknüpfen Sie Stripe-Produkte mit Discourse-Gruppen Auch mit einer Preistabelle müssen Sie Discourse mitteilen, welche Gruppe zu welchem Produkt gehört.

  • Gehen Sie zu Admin > Plugins > Subscriptions und klicken Sie auf den Tab Produkte.
  • Klicken Sie auf Neues Produkt erstellen.
  • Geben Sie einen Produktnamen ein, der exakt mit dem Produktnamen in Stripe übereinstimmt (z. B. Enclave Plus).
  • Speichern Sie das Produkt. Scrollen Sie auf der Produktseite nach unten und klicken Sie auf Neuen Plan hinzufügen.
  • Dieser Plan ist nur eine „Brücke“. Das einzige kritische Feld ist Benutzergruppe.
    • Plan-Nickname: Enclave Plus Group Link (oder etwas für Ihre Referenz).
    • Benutzergruppe: Wählen Sie die richtige Discourse-Gruppe aus dem Dropdown-Menü aus.
    • Die anderen Felder (Betrag, Intervall) können als Standard belassen werden, da sie ignoriert werden.
  • Speichern Sie den Plan. Wiederholen Sie dies für alle Ihre verschiedenen Produkte.

Zusammenfassung der Fehlerbehebung

  • Problem: Webhooks schlagen mit einem 404 Not Found-Fehler fehl.
    • Lösung: Ihre Endpunkt-URL in Stripe ist falsch. Sie muss https://your-discourse-site.com/s/hooks lauten.
  • Problem: Der Webhook ist erfolgreich (200 OK) und die Zahlung wird im Abrechnungsprofil des Benutzers angezeigt, aber er wird nicht zur Gruppe hinzugefügt.
    • Lösung: Ihre Metadaten sind falsch. Überprüfen Sie drei Dinge:
      1. Die Metadaten müssen sich auf dem Stripe Price-Objekt befinden, nicht auf dem Produktobjekt.
      2. Der Metadaten-SCHLÜSSEL muss exakt group_name lauten.
      3. Der Metadaten-WERT muss der eindeutige Slug/Handle der Gruppe sein (z. B. EnclavePlus), nicht sein vollständiger Name mit Leerzeichen.

Ich hoffe, diese Anleitung erspart anderen die Zeit und Frustration dieser komplexen, aber sehr leistungsfähigen Einrichtung.

5 „Gefällt mir“