Abos: Gelöschte Daten in Stripe, jetzt Plugin-Fehler

Hallo,

ich teste derzeit dieses Plugin für eine zukünftige Nutzung auf meiner Instanz und bin auf ein Problem gestoßen.

Mein Stripe-Konto ist neu und noch nicht verifiziert, weshalb es Testdaten verwendet, die ich im Stripe-Dashboard unter „Entwickler“ löschen kann. Das Problem besteht darin, dass das Löschen der Daten in Stripe nicht dieselben Daten auf der Forum-Instanz entfernt. Dies kann zu einem Absturz der Seite „Abrechnung > Zahlung“ eines Benutzers führen.

Schritte zur Reproduktion

  1. Einen Abonnement-Plan erstellen.
  2. Einen Benutzer für den Plan abonnieren. Stripe weist ihm eine customer_id zu, z. B. cus_abcd1234567890.
  3. Die Daten im Stripe-Dashboard löschen.
  4. Beim erneuten Öffnen der Abrechnungsseite des Benutzers kommt es beim Laden von /s/user/payment zu einem Absturz. In der Webbrowser-Konsole erscheint folgende Fehlermeldung:
    {\"errors\":[\"No such customer: 'cus_abcd1234567890'\"]}

Nach einer Untersuchung der Datenbank meiner Instanz habe ich in den folgenden Tabellen veraltete Daten aus mehreren Löschvorgängen gefunden:

  • discourse_subscriptions_customers: Verursacht einen Absturz der Benutzer-Abrechnungsseite.
  • discourse_subscriptions_products
  • discourse_subscriptions_subscriptions

Die letzten beiden Tabellen scheinen keinen Absturz auszulösen. Dennoch enthalten sie veraltete Daten.

Das manuelle Löschen der betroffenen Zeilen in discourse_subscriptions_customers behebt den Absturz. Allerdings ist das Durchführen einer SQL-Abfrage kompliziert und riskant, insbesondere für unerfahrene Benutzer.

Zu beachten ist zudem, dass dieses Problem nicht auftritt, wenn Benutzerinformationen manuell im Stripe-Dashboard gelöscht werden. Stripe behält archiviert Informationen über den Benutzer und markiert ihn als „dauerhaft gelöscht“.

Vorgeschlagene Lösungen

Falls möglich, eine Möglichkeit schaffen, damit Stripe Discourse mitteilt, dass Testdaten gelöscht wurden, und Discourse die entsprechenden Daten in diesen Tabellen entfernt.

Oder:

In den Plugin-Optionen einen Button zum „Löschen der Testdaten“ hinzufügen, versehen mit einer großen roten Warnbeschriftung, damit der Administrator genau weiß, was er tut.

Das scheint ein eher spezieller Fall zu sein, mit dem ich im Plugin derzeit nicht umgehen möchte. Um die von dir gesehenen Fehler zu beheben, musst du dies innerhalb des Containers ausführen:

rails c
DiscourseSubscriptions::Customer.destroy_all
DiscourseSubscriptions::Products.destroy_all
DiscourseSubscriptions::Subscriptions.destroy_all

Dadurch werden alle lokalen Modelle zurückgesetzt, die zum Vergleich mit Stripe verwendet werden.

Meine Empfehlung für die Zukunft: Lösche Daten aus Discourse und nicht aus Stripe. Wenn Modell-Einträge nicht in Discourse existieren, werden die Daten nicht aus Stripe importiert.

4 „Gefällt mir“

Ein Beitrag wurde in ein neues Thema aufgeteilt: Problem mit /s/user/payments

Danke für den Vorschlag. Ich habe es getestet, und es funktioniert, abgesehen von einem kleinen Tippfehler: Am Ende von ::Product und ::Subscription fehlt das s. Andernfalls kann sie nicht gefunden werden.

Korrigierte Befehle:

rails c
DiscourseSubscriptions::Customer.destroy_all
DiscourseSubscriptions::Product.destroy_all
DiscourseSubscriptions::Subscription.destroy_all
3 „Gefällt mir“

Du hast recht – mein Fehler!

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.