Принуждение к разовой оплате подписки на Discourse

Что касается плагина Discourse Subscriptions, что произойдет, если я изменю некоторые настройки непосредственно в Stripe? Например, в Discourse невозможно сделать план продукта разовой оплатой. Это должна быть подписка на день, неделю, месяц или год. Но если я перейду на stripe.com, я смогу изменить существующую подписку на разовую оплату. Могу ли я это сделать? Как это изменит работу этого плана в Discourse? Станет ли он тогда разовой оплатой?

Это вполне возможно! Если снять галочку «Повторяющийся» на экране создания плана, он будет разовым платежом.

Однако изменить уже созданные планы нельзя.

Вы правы! У меня была небольшая путаница. На самом деле я хотел спросить, возможно ли сделать разовый платеж, который истекает и не действует бесконечно. Например, что-то вроде «дневного пропуска», когда вы платите 5 долларов и добавляетесь в специальную группу, а затем, скажем, через день подписка истекает, и вы удаляетесь из группы до тех пор, пока не оплатите снова. Это возможно?

К сожалению, в настоящее время это невозможно.

Я делаю что-то подобное в плагине. Я (условно) добавляю к модели user_group действие: когда пользователь добавляется в группу подписки, выполняется какое-то действие, а затем пользователь удаляется из этой группы. В вашем случае нужно сделать так, чтобы при добавлении пользователя в группу one-off-weeklong подпиской:

  • пользователь добавлялся в группу weeklong, предоставляющую права на определённые категории;
  • создавалась задача, которая удалит его из группы weeklong по истечении недели;
  • добавлялось пользовательское поле с датой начала недели, чтобы можно было удалить его, если произойдёт какая-то катастрофа с Redis;
  • пользователь удалялся из группы one-off-weeklong.

Если вам это интересно, вы можете связаться со мной или написать в Marketplace.

Но это глупо. Вместо этого просто добавьте обратный вызов для подписки (если это подписка) или клиента (если это разовый платеж). Термин «клиент» немного неточен. В нём хранится идентификатор клиента Stripe и идентификатор продукта Stripe. Поэтому сделайте что-то вроде:

add_model_callback(DiscourseSubscriptions::Subscription, :after_save) do
      Rails.logger.warn("Теперь получена подписка #{self.external_id} для #{self.customer_id}")
      # выполняем действия
end

  add_model_callback(DiscourseSubscriptions::Customer, :after_save) do
    Rails.logger.warn("Клиент #{self.product_id} для #{self.user_id}")
    # выполняем дополнительные действия
end

Привет, ты решил эту проблему?

Можете дать более подробные рекомендации? Например, как реализовать эту функцию. Я не знаком с Rails… Спасибо!

Думаю, это мой лучший бесплатный ответ.

Я решил проблему, модифицировав плагин подписки Discourse. Спасибо.

Однако я обнаружил, что не могу удалять товары даже с помощью оригинального плагина подписки Discourse. У вас есть какие-либо идеи?

Вам не нужно их удалять. Они не вредят ничему. Они необходимы как запись о том, что вы продали. Вы должны иметь возможность удалить их из консоли Stripe.

Stripe также не позволяет удалять продукты, но их можно деактивировать/архивировать.

Они говорят:

Не знаю, всё ещё ли вы хотите этого добиться или уже нашли способ это реализовать? Похоже, что в Discourse нет встроенной автоматизации для такого сценария, но, возможно, есть другие способы. Это отдалённо напоминает ситуацию в кофейне, где нужно каждый день покупать новый напиток, чтобы иметь возможность сидеть за их столиками.