# Пользователь не может повторно купить подписку после отмены

**URL:** <https://meta.discourse.org/t/user-cant-repurchase-a-subscription-product-after-canceling/199602>\
**Category:** Product Support\
**Tags:** subscriptions\
**Created:** [06.Август.2021 20:49:11 UTC](https://meta.discourse.org/t/user-cant-repurchase-a-subscription-product-after-canceling/199602 "2021-08-06T20:49:11Z")\
**Posts on this page:** 1\
**Showing post:** 13

<div class="post-metadata">

**Author:** ![amalg](https://avatars.discourse-cdn.com/v4/letter/a/ed655f/32.png) [@amalg](https://meta.discourse.org/u/amalg)\
**Post date:** [02.Февраль.2023 06:36:11 UTC](https://meta.discourse.org/t/user-cant-repurchase-a-subscription-product-after-canceling/199602/13 "2023-02-02T06:36:11Z")

</div>

Хорошо, я знаю, что воскрешаю эту тему, но 1) проблема до сих пор не решена, и 2) у меня наконец-то нашлось время снова в этом разобраться… Оказалось, я был идиотом, который не мог следовать инструкциям. Вот как я понял, что я дилетант, и почему теперь готов решить эту проблему (с некоторой помощью).

В итоге я экспортировал из Stripe CSV-файл со всеми отмененными аккаунтами. Я сосредоточился на том самом пользователе Discourse, упомянутом выше в этой теме: он был подписчиком, отменил подписку, но не мог оформить новую, потому что страница подписки показывала статус «куплено», хотя на странице активных подписок ничего не отображалось. В данных CSV его запись имела статус «canceled» со следующими данными:

- **id** _(sub\_JNWejdDo4qhLG5)_
- **customer\_id** _(cus\_JmiMoqZNTzUNxt)_
- **user\_id** _(id пользователя Discourse 4981)_

Затем я подключился к контейнеру приложения, зашел в консоль Ruby и начал копаться. Сначала я поискал его customer\_id в DiscourseSubscriptions::Customer и нашел его.

```plaintext
[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, есть ли у этого пользователя какие-либо подписки, и оказалось, что да, есть;

```plaintext
[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, чтобы удалить только данные подписки для целевого пользователя;

```plaintext
[1] pry(main)> DiscourseSubscriptions::Subscription.delete_by(external_id: 'sub_JNWejdDo4qhLG5')
[2] pry(main)> DiscourseSubscriptions::Subscription.where(external_id: 'sub_JNWejdDo4qhLG5')
=> []

```

Однако запись клиента все еще имеет связанный product\_id;

```plaintext
[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… и это сработало! Но, конечно, только для этого пользователя..

```plaintext
[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 для отмененных подписок не работает.

---

_[View the full topic](https://meta.discourse.org/t/user-cant-repurchase-a-subscription-product-after-canceling/199602)._
