サブスクリプション:Stripeでデータが削除され、プラグインエラーが発生

こんにちは、

将来のインスタンスでの使用を想定して、現在このプラグインを試しており、問題が発生しました。

私の Stripe アカウントは新規で未検証のため、テストデータを使用しており、Stripe ダッシュボードの「Developers」からデータを消去できます。
問題点は、Stripe 側でデータを消去しても、フォーラムインスタンス側の同じデータが削除されないことです。これにより、ユーザーの「請求 > 支払い」ページがクラッシュする可能性があります。

再現手順

  1. 課金プランを作成する
  2. ユーザーをそのプランに加入させる。Stripe は cus_abcd1234567890 のような customer_id を発行する
  3. Stripe ダッシュボードでデータを消去する
  4. ユーザーの請求ページを再度開くと、/s/user/payment の読み込み中にクラッシュし、ウェブブラウザのコンソールに以下のレスポンステキストが表示される:
    {\\\"errors\\\":[\\\"No such customer: 'cus_abcd1234567890'\\\"]}

インスタンスのデータベースを調査したところ、私が以前に行った複数のデータ消去に関連するデータが、以下のテーブルに残っていることが確認できました:

  • discourse_subscriptions_customers:ユーザーの請求ページでクラッシュを引き起こす
  • discourse_subscriptions_products
  • discourse_subscriptions_subscriptions

後者の 2 つのテーブルはクラッシュを引き起こしていないようですが、期限切れのデータがまだ含まれています。

discourse_subscriptions_customers 内の問題のある行を手動で削除すれば、ユーザーのクラッシュは解決します。しかし、SQL クエリを通じて行うのは複雑で危険であり、特に経験の浅いユーザーにとっては困難です。

なお、Stripe ダッシュボードからユーザー情報を手動で削除した場合は、この問題は発生しません。Stripe はユーザーに関する情報をアーカイブとして保持し、「完全に削除済み」としてマークします。

提案される解決策

可能であれば、Stripe がテストデータが消去されたことを Discourse に通知し、それらのテーブル内のデータを削除する仕組みを実装してください。

あるいは、

プラグインオプションに「テストデータを消去」ボタンを追加し、大きな赤い警告ラベルを表示して、管理者が何をしているか理解していることを確認できるようにしてください。

これはやや特殊なケースであり、現時点ではプラグイン内で対応する予定はありません。表示されているエラーを修正するには、コンテナ内部で以下の操作を行ってください。

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

これにより、Stripe と比較するために使用されるローカルモデルがすべてリセットされます。

今後の推奨事項:Stripe ではなく Discourse からデータを削除してください。Discourse にモデルレコードが存在しない場合、Stripe からデータが取得されなくなります。

「いいね!」 4

新しいトピックに投稿が分割されました: Issue with /s/user/payments

ご提案ありがとうございます。試してみたところ、小さなタイプミスを除いて正常に動作しました。::Product::Subscription の末尾に s がありません。それがないと、それらを検出できません。

修正後のコマンド:

rails c
DiscourseSubscriptions::Customer.destroy_all
DiscourseSubscriptions::Product.destroy_all
DiscourseSubscriptions::Subscription.destroy_all
「いいね!」 3

その通りです、私のミスでした!

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