Schienen, Streifen und Abonnements - Modell

8

In meiner Site funktioniert die gesamte Stripe-Integration, aber ich versuche immer noch, herauszufinden, ob ein Abonnement aktiv ist. Ich dachte daran, alles in der lokalen DB zu behalten, aber dann hätte ich doppelte Daten von Stripe. Wenn Stripe jedoch der Master-Datensatz ist, was passiert, wenn sie inaktiv sind und ich nicht feststellen kann, ob ein Benutzer ein aktives Abonnement hat? Es scheint mir, als sollte es einen Weg geben, alles zusammen zu synchronisieren. Sollte ich ein bestimmtes Datum des aktuellen Abonnementablaufs mit dem Konto / Benutzer speichern?

Welche Subskriptionsinformationen sollten mit dem Modell gespeichert werden? Sollte dies ein Teil des Benutzermodells oder Teil eines separaten "Subscription" -Modells sein?

    
Steve Wright 17.04.2012, 03:58
quelle

3 Antworten

28

Speichern Sie einfach ein Flag, das angibt, ob das Abonnement aktiv ist oder nicht, das beim Abonnieren standardmäßig auf true gesetzt ist.

Richten Sie dann Stripe-Callback-Hooks ein, um Ihre App zu benachrichtigen, wenn das Abonnement abgelaufen ist / abgebrochen wurde / was auch immer. Höre auf customer.subscription.updated und sieh dir das Statusfeld an, das entweder aktiv, pass_due, abgebrochen oder unbezahlt sein kann.

Sie werden sofort von stripe benachrichtigt, so dass es keinen zusätzlichen Aufwand für die ständige Überprüfung gibt. Wenn stripe aus irgendeinem Grund den Callback nicht ausführen kann, wird es mehrmals mit exponentiellem Backoff versuchen, so dass es sehr robust ist.

Implementieren Sie keine Abonnements selbst und führen Sie in regelmäßigen Abständen keinen Job zur Synchronisierung mit stripe aus. Mit Stripes Callback Hooks sind beide Strategien völlig überflüssig.

    
eagspoo 07.07.2012, 04:00
quelle
1
  

"Welche Abonnementinformationen sollten mit dem Modell gespeichert werden?   Dies ist ein Teil des Benutzermodells oder Teil eines separaten Modells   "Abonnement" -Modell? "

Speichern Sie alle Informationen im Abonnementmodell und ordnen Sie dieses Modell dem Benutzer zu. Da Subskriptionen ihre eigenen Metadaten haben und sie wirklich eine andere Entität sind, ist es sinnvoll, sie separat zu speichern.

  

"Wenn Stripe jedoch der Master-Datensatz ist, was ist, wenn sie inaktiv sind und ich?   kann nicht feststellen, ob ein Benutzer ein aktives Abonnement hat? Scheint mir wie   Es sollte eine Möglichkeit geben, alles zusammen zu synchronisieren. Sollte ich etwas behalten?   Art des Datums des aktuellen Abonnementablaufs mit dem   Konto / Benutzer? "

Wenn Sie das Abonnement bei jeder Anfrage oder Anmeldung überprüfen, macht es wahrscheinlich keinen Sinn, die stripe-API jedes Mal zu drücken ... das ist viel Overhead. Es hängt wirklich von Ihrem Anwendungsfall ab, aber es kann sinnvoll sein, einen täglichen (oder stündlichen) Cron-Job auszuführen, der die Stripe-API trifft, um nach Ablauf des Abonnements zu suchen und dann den lokalen Subscription-Store zu aktualisieren.

    
johnmcaliley 17.04.2012 04:57
quelle
1

Die Art und Weise, wie ich es mit dem SaaS-Rails-Kit anwende, besteht darin, die Informationen im Subscription-Modell beizubehalten, einschließlich eines Feldes next_renewal_at und nicht , damit Stripe die Abrechnung vornehmen kann. Stattdessen habe ich einen täglichen Cron-Job, der alle Subskriptionen abrechnet, die heute ein new_renewal_at = haben, so dass Sie sofort wissen, ob eine Gebühr fehlgeschlagen ist.

    
Benjamin Curtis 17.04.2012 19:45
quelle