I’ve got an odd problem cropped up here with a subscriber.
They have no active subscriptions in under the Billing section;
In Stripe it shows as cancelled;
![]()
yet they cannot resubscribe… says already purchased;

Have I set something up incorrectly?
I’ve got an odd problem cropped up here with a subscriber.
They have no active subscriptions in under the Billing section;
In Stripe it shows as cancelled;
![]()
yet they cannot resubscribe… says already purchased;

Have I set something up incorrectly?
That looks like you might have your webhook endpoint improperly configured. When the subscription period ends, Stripe sends a webhook which the plugin uses to remove group membership, and remove the user from being an existing customer on that product (which allows the user to purchase again).
You’ll need to make sure this is configured per the OP here: Discourse Subscriptions
One way you to confirm from your server:
./launcher enter app
rails c
u = User.find_by_username(<username>)
c = DiscourseSubscriptions::Customer.where(user_id: u.id)
subscription = DiscourseSubscriptions::Subscription.where(customer_id: c.customer_id)
Be sure to replace <username> with the actual username of the user.
If subscription returns [], there’s another issue going on. But if it returns a value, that likely confirms the missing webhook.
To delete the DiscourseSubscriptions::Subscription entry so the user can purchase the product again:
Make sure subscription has only one value by running subscription.count. If the value returned is greater than 1, you’ll have to do a bit more digging to make sure you’re deleting the correct subscription instance. If you delete the wrong one, your subscriptions data will be in an inconsistent state and likely yield weird behavior.
Once you’ve confirmed there’s only one subscription, then you can run:
subscription.destroy_all
Keep in mind that subscription is the value returned from the initial set of queries we ran in the Rails console.
Hope that helps!
Thanks @justin
• got to the last line subscription and ran it… returned this;
NoMethodError: undefined method
customer_id' for #<DiscourseSubscriptions::Customer::ActiveRecord_Relation:0x000055be473772f0> from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.3.2/lib/active_record/relation/delegation.rb:110:inmethod_missing’
• Checked Stripe webhooks and it’s pointed to https://./s/hooks
• Events sent to webhook;
subscription_schedule.updated
subscription_schedule.expiring
subscription_schedule.created
subscription_schedule.canceled
• Stripe webhook log has one entry from setup date which looks to be establishing the events supported.
• I have an event entry in Stripe that is a cancellation of a subscription, but… the line entry says (effectively) “[subscription was canceled]” however when I click into the event, it says the event type is customer.subscription.deleted … which I notice is not listed in my webhooks event list.
Could the above be the problem?
Looks like the line should be DiscourseSubscriptions::Subscription instead of ::Customer. Try that and see what you get!
[2] pry(main)> c = DiscourseSubscriptions::Subscription.where(user_id: u.id)
=> #DiscourseSubscriptions::Subscription::ActiveRecord_Relation:0x8020
[3] pry(main)> subscription = DiscourseSubscriptions::Subscription.where(customer_id: c.customer_id)
NoMethodError: undefined methodcustomer_id' for #<DiscourseSubscriptions::Subscription::ActiveRecord_Relation:0x000055ec51164ca0> from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.3.2/lib/active_record/relation/delegation.rb:110:inmethod_missing’
Sorry, I misunderstood where this was happening.
Try this instead:
./launcher enter app
rails c
u = User.find_by_username(<username>)
c = DiscourseSubscriptions::Customer.find_by(user_id: u.id)
subscription = DiscourseSubscriptions::Subscription.where(customer_id: c[:customer_id])
Ah…
[3] pry(main)> subscription = DiscourseSubscriptions::Subscription.where(customer_id: c[:customer_id])
=>
Do you think the lack of subscription data has anything to do with the customer.subscription.deleted event being missing?
Is there anything I should explore next at this point?
I’m particularly interested in focusing on why the subscription page shows “purchased” while the active subscriptions section shows no active subs… is there some other place in the database where sub info is stored which might be cleared / empty under the active subs section but somehow a “purchased” boolean is still set to true somewhere … or something like that?
Is there anything else to try here?
Make sure in Stripe the purchase is fully cancelled and not waiting to be cancelled at the end of the period. You can also look under the Admin → Plugins → Discourse Subscriptions → Subscriptions area and look for this user’s username. If they have a subscription listed there, you can cancel it immediately.
Without further looking into your Discourse instance, I’m not sure how much further I can help.
yeah it’s not active under subscriptions in the plugin area, and also not on stripe either… the only thing that indicates anything is still active is if the user goes to the subscription page, they see a little green “purchased” checkmark and “go to billing”.

If I go to billing as the user in question, nothing;

So my question is - what in the database triggers that green checkmark and can it be cleared?
If this list includes the Stripe product id as per here:
Then the front end will display it as purchased. You may need to dig around the console with these queries to find out where it’s located. I almost guarantee there’s a record hanging around there yet.
スレッドを掘り起こしていることは承知していますが、1) この問題は未解決のままであり、2) 再度調査する時間が取れたためです。結果として、指示に従えない間抜けだったことが判明しました。自分がどれほど愚かだったか、そして(助けを借りて)この問題を解決する準備ができた理由がわかりました。
ストライプからキャンセルされたアカウントのCSVをエクスポートしました。このスレッドで言及されている、購読者だったがキャンセル後に再購読できなくなったDiscourseユーザーに焦点を当てました。購読ページは「購入済み」と表示されていましたが、アクティブな購読ページにはサブスクリプションが表示されていませんでした。CSVデータでは、彼のレコードは「キャンセル済み」と表示され、以下のデータが含まれていました。
次に、アプリコンテナにアタッチし、Rubyコンソールに入り、調査を開始しました。まず、DiscourseSubscriptions::Customerで彼の顧客IDを検索し、見つけました。
[3] pry(main)> DiscourseSubscriptions::Customer.where(customer_id: 'cus_JNWeiIWTs6YOwQ')
=> [#<DiscourseSubscriptions::Customer:0x000055db2d48eb40
id: 16,
customer_id: "cus_JNWeiIWTs6YOwQ",
product_id: "prod_JJbwYnKz0T5Z9h",
user_id: 3256,
created_at: Tue, 27 Apr 2021 07:45:07.455275000 UTC +00:00,
updated_at: Tue, 27 Apr 2021 07:45:07.455275000 UTC +00:00>]
次に、DiscourseSubscriptions::Subscriptionを検索して、このユーザーにサブスクリプションがあるか確認しました。ありました。
[1] pry(main)> DiscourseSubscriptions::Subscription.where(external_id: 'sub_JNWejdDo4qhLG5')
=> [#<DiscourseSubscriptions::Subscription:0x000055854e1e1620
id: 16,
customer_id: 16,
external_id: "sub_JNWejdDo4qhLG5",
created_at: Tue, 27 Apr 2021 07:45:07.459681000 UTC +00:00,
updated_at: Tue, 27 Apr 2021 07:45:07.459681000 UTC +00:00>]
どうやら、このサブスクリプションレコードを削除すれば、このユーザーの問題は解決するようです。しかし、CSVエクスポートで確認したキャンセルされたユーザーはすべて、システム内にサブスクリプションが残っていました。明らかに、Stripe webhookとサブスクリプションプラグインの間で何らかの不整合があります。どこで、どのように発生しているのかは不明です。
まず、特定のユーザーのサブスクリプションレコードデータを安全に削除するにはどうすればよいですか?5歳児に説明するように教えてください。Rubyコンソールプロンプトにいます。ターゲットユーザーのサブスクリプションデータのみが削除され、全員のサブスクリプションデータが消去されないようにするにはどうすればよいですか?
次に、サブスクリプションキャンセルwebhookメカニズムのトラブルシューティング方法を教えてください。
皆様のご協力に心より感謝いたします!
更新:
少し進みました。ターゲットユーザーのサブスクリプションデータのみを削除するために.delete_byを使用する方法を理解しました。
[1] pry(main)> DiscourseSubscriptions::Subscription.delete_by(external_id: 'sub_JNWejdDo4qhLG5')
[2] pry(main)> DiscourseSubscriptions::Subscription.where(external_id: 'sub_JNWejdDo4qhLG5')
=> []
しかし、顧客レコードにはまだproduct_idが関連付けられています。
[3] pry(main)> DiscourseSubscriptions::Customer.where(customer_id: 'cus_JNWeiIWTs6YOwQ')
=> [#<DiscourseSubscriptions::Customer:0x0000560ec18e4948
id: 16,
customer_id: "cus_JNWeiIWTs6YOwQ",
product_id: "prod_JJbwYnKz0T5Z9h",
user_id: 3256,
created_at: Tue, 27 Apr 2021 07:45:07.455275000 UTC +00:00,
updated_at: Tue, 27 Apr 2021 07:45:07.455275000 UTC +00:00>]
これは、彼らがまだ緑色のチェックマークを表示しており、再購読できないことを意味します。そのため、Customerオブジェクトに「destroy_all」を適用しました。そしてそれは機能しました!もちろん、そのユーザーに対してのみですが。
[4] pry(main)> DiscourseSubscriptions::Customer.where(customer_id: 'cus_JNWeiIWTs6YOwQ').destroy_all
=> [#<DiscourseSubscriptions::Customer:0x0000560ec19770e0
id: 16,
customer_id: "cus_JNWeiIWTs6YOwQ",
product_id: "prod_JJbwYnKz0T5Z9h",
user_id: 3256,
created_at: Tue, 27 Apr 2021 07:45:07.455275000 UTC +00:00,
updated_at: Tue, 27 Apr 2021 07:45:07.455275000 UTC +00:00>]
これで、Stripe webhookでキャンセルされたサブスクリプションが機能しない理由を診断するだけになりました。