Хорошо, я знаю, что воскрешаю эту тему, но 1) проблема до сих пор не решена, и 2) у меня наконец-то нашлось время снова в этом разобраться… Оказалось, я был идиотом, который не мог следовать инструкциям. Вот как я понял, что я дилетант, и почему теперь готов решить эту проблему (с некоторой помощью).
В итоге я экспортировал из Stripe CSV-файл со всеми отмененными аккаунтами. Я сосредоточился на том самом пользователе Discourse, упомянутом выше в этой теме: он был подписчиком, отменил подписку, но не мог оформить новую, потому что страница подписки показывала статус «куплено», хотя на странице активных подписок ничего не отображалось. В данных CSV его запись имела статус «canceled» со следующими данными:
- id (sub_JNWejdDo4qhLG5)
- customer_id (cus_JmiMoqZNTzUNxt)
- user_id (id пользователя Discourse 4981)
Затем я подключился к контейнеру приложения, зашел в консоль Ruby и начал копаться. Сначала я поискал его customer_id в DiscourseSubscriptions::Customer и нашел его.
[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 и плагином подписок… Я просто не знаю где и как.
-
Во-первых: как безопасно удалить данные записи о подписке для конкретного пользователя? Объясните мне, как пятилетнему… Я нахожусь в приглашении консоли Ruby… Как убедиться, что удаляются только данные подписки целевого пользователя, а не всех пользователей?
-
Во-вторых: как устранить неполадки в механизме вебхука отмены подписки?
Ваша помощь очень ценна!
ОБНОВЛЕНИЕ:
Хорошо, я продвинулся немного дальше… Мне удалось разобраться, как использовать .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>]
Это означает, что они все еще видят зеленую галочку и не могут оформить подписку заново… Поэтому я применил «destroy_all» к объекту Customer… и это сработало! Но, конечно, только для этого пользователя..
[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 для отмененных подписок не работает.