8

私のサイトでは、すべてのStripe統合が機能していますが、サブスクリプションがアクティブかどうかを判断する方法に頭を悩ませています。すべてをローカルDBに保持することを考えましたが、Stripeからのデータが重複していました。ただし、Stripeがマスターレコードである場合、それらがダウンしていて、ユーザーがアクティブなサブスクリプションを持っているかどうかを判断できない場合はどうなりますか?すべてを一緒に同期する方法があるはずだと私には思えます。アカウント/ユーザーとの現在のサブスクリプションの有効期限のある種の日付を保持する必要がありますか?

モデルとともにどのサブスクリプション情報を保存する必要がありますか?これはユーザーモデルの一部にする必要がありますか、それとも別の「サブスクリプション」モデルの一部にする必要がありますか?

4

3 に答える 3

28

サブスクリプションがアクティブかどうかを示すフラグを保存するだけで、サブスクリプション時にデフォルトでtrueに設定されます。

次に、ストライプコールバックフックを設定して、サブスクリプションの有効期限が切れた/キャンセルされたなどの場合にアプリに通知します。customer.subscription.updatedをリッスンし、アクティブ、past_due、キャンセル、または未払いのいずれかであるステータスフィールドを確認します。

ストライプですぐに通知されるので、定期的にチェックするオーバーヘッドが発生する必要はありません。何らかの理由でストライプがコールバックを作成できない場合、指数バックオフで数回再試行するため、非常に堅牢です。

サブスクリプションを自分で実装したり、ストライプと同期するために定期的にジョブを実行したりしないでください。ストライプコールバックフックを使用すると、両方の戦略は完全に不要です。

于 2012-07-07T04:00:29.420 に答える
1

「モデルとともに保存する必要があるサブスクリプション情報は何ですか?これはユーザーモデルの一部にする必要がありますか、それとも別の「サブスクリプション」モデルの一部として含める必要がありますか?」

すべての情報をサブスクリプションモデルに保存し、そのモデルをユーザーに関連付けます。サブスクリプションには独自のメタデータがあり、実際には異なるエンティティであるため、サブスクリプションを個別に保存することは理にかなっています。

「ただし、Stripeがマスターレコードである場合、それらがダウンしていて、ユーザーがアクティブなサブスクリプションを持っているかどうかを判断できない場合はどうなりますか?すべてを同期する方法があるはずです。ある種の日付を保持する必要があります。アカウント/ユーザーの現在のサブスクリプションの有効期限は?」

すべてのリクエストまたはログインでサブスクリプションをチェックしている場合、毎回ストライプAPIをヒットすることはおそらく意味がありません...これは多くのオーバーヘッドです。すべては実際にはユースケースによって異なりますが、ストライプAPIにヒットする毎日(または1時間ごと)のcronジョブを実行してサブスクリプションの有効期限を確認してから、ローカルのサブスクリプションストアを更新することは理にかなっています。

于 2012-04-17T04:57:45.027 に答える
1

SaaS Rails Kitを使用してアプローチする方法は、next_renewal_atフィールドを含むサブスクリプションモデルの情報を保持し、請求を行うためにStripeに任せないことです。代わりに、new_renewal_at = todayを持つすべてのサブスクリプションに請求する毎日のcronジョブがあるので、請求が失敗したかどうかがすぐにわかります。

于 2012-04-17T19:45:03.407 に答える