Плагин подписок Discourse

[Гайд] Настройка подписок Discourse с помощью таблиц цен Stripe (и типичные ошибки)

Всем привет,

После долгого процесса устранения неполадок я хочу поделиться исчерпывающим руководством по настройке официального плагина discourse-subscriptions с использованием современного метода таблиц цен Stripe. Этот подход очень мощный, но в нем есть несколько критических шагов, которые не очевидны с первого взгляда и могут привести к ошибкам, таким как сбои вебхуков (404 Not Found) или отсутствие добавления пользователей в группы после успешной оплаты.

Ниже представлен пошаговый процесс, который подтвержден как рабочий.


Часть 1: Настройка Stripe

Этот процесс использует Stripe в качестве «источника истины» для всех продуктов и цен.

1. Создание продуктов и цен

  • В панели управления Stripe убедитесь, что вы находитесь в режиме Live (Live Mode).
  • Перейдите в раздел Products (Продукты) > Product catalog (Каталог продуктов).
  • Сначала создайте основные продукты (например, «Premium Membership», «VIP Access»).
  • Для каждого продукта создайте все связанные цены (например, XX / месяц, XXX / год).

2. КРИТИЧЕСКИЙ ШАГ: Метаданные
Чтобы плагин автоматически добавлял пользователей в группы, вы должны добавить специальные метаданные в каждый объект Price (Цена), который вы создаете. Интерфейс панели управления Stripe может затруднить поиск этой опции.

  • При создании новой цены (или если вы нашли опцию «Edit price» / Изменить цену) вы должны добавить метаданные. Возможно, вам потребуется нажать на «Additional options» (Дополнительные опции) во время создания цены, чтобы открыть поля метаданных.
  • Нажмите + Add metadata (Добавить метаданные) и введите следующее:
    • КЛЮЧ: group_name
    • ЗНАЧЕНИЕ: Уникальный, безопасный для URL слаг/обработчик (slug/handle) группы из Discourse, не её полное имя.

Пример:

  • Если полное имя вашей группы в Discourse — «Enclave Plus», её слаг, скорее всего, EnclavePlus.
  • В качестве значения вы должны использовать EnclavePlus. Использование "Enclave Plus" с пробелом приведет к ошибке.
  • Вы должны повторить это для каждого тарифного плана, который вы хотите связать с группой.

3. Создание таблицы цен Stripe

  • Перейдите в раздел Products (Продукты) > Pricing tables (Таблицы цен).
  • Создайте новую таблицу и добавьте настроенные вами цены.
  • После публикации таблицы нажмите кнопку «Copy code» (Копировать код), чтобы получить ID таблицы цен (он начинается с prctbl_...).

4. Настройка конечной точки вебхука (Исправление ошибки 404)
Это самая частая точка отказа.

  • Перейдите в раздел Developers (Разработчики) > Webhooks и нажмите + Add endpoint (Добавить конечную точку).
  • URL конечной точки должен быть в следующем формате: https://your-discourse-site.com/s/hooks
  • Примечание: Правильный путь — /s/hooks, а не /s/stripe/webhook.
  • В разделе Events to send (События для отправки) добавьте как минимум:
    • checkout.session.completed
    • customer.subscription.deleted
  • Создайте конечную точку и скопируйте Signing secret (Секрет подписи) (он начинается с whsec_...).

Часть 2: Настройка Discourse

Теперь настроим плагин для использования всего, что вы создали в Stripe.

1. Ввод API-ключей и ID таблицы цен

  • Перейдите в Admin (Админ) > Settings (Настройки) и найдите discourse subscriptions.
  • Заполните ваши ключи Stripe в режиме Live:
    • discourse subscriptions public key (pk_live_...)
    • discourse subscriptions secret key (sk_live_...)
    • discourse subscriptions webhook secret (whsec_...)
  • Включите режим таблицы цен:
    • Установите флажок для discourse subscriptions pricing table enabled.
    • Вставьте ваш ID prctbl_... в поле discourse subscriptions pricing table id.

2. Связывание продуктов Stripe с группами Discourse
Даже при использовании таблицы цен вам нужно сообщить Discourse, какая группа относится к какому продукту.

  • Перейдите в Admin (Админ) > Plugins (Плагины) > Subscriptions (Подписки) и откройте вкладку Products (Продукты).
  • Нажмите Create New Product (Создать новый продукт).
  • Введите Название продукта, которое точно совпадает с названием продукта в Stripe (например, Enclave Plus).
  • Сохраните продукт. На странице продукта прокрутите вниз и нажмите Add New Plan (Добавить новый план).
  • Этот план является лишь «мостом». Единственное критическое поле — User Group (Группа пользователей).
    • Plan Nickname (Название плана): Enclave Plus Group Link (или любое другое для вашей справки).
    • User Group (Группа пользователей): Выберите нужную группу Discourse из выпадающего списка.
    • Остальные поля (Amount, Interval) можно оставить по умолчанию, так как они будут игнорироваться.
  • Сохраните план. Повторите это для всех ваших различных продуктов.

Сводка по устранению неполадок

  • Проблема: Вебхуки завершаются ошибкой 404 Not Found.
    • Решение: URL вашей конечной точки в Stripe указан неверно. Он должен быть https://your-discourse-site.com/s/hooks.
  • Проблема: Вебхук успешен (200 OK), и оплата отображается в профиле биллинга пользователя, но он не добавлен в группу.
    • Решение: Ваши метаданные указаны неверно. Проверьте три вещи:
      1. Метаданные должны быть на объекте Stripe Price (Цена), а не на объекте Product (Продукт).
      2. КЛЮЧ метаданных должен быть точно group_name.
      3. ЗНАЧЕНИЕ метаданных должно быть уникальным слагом/обработчиком (slug/handle) группы (например, EnclavePlus), а не её полным именем с пробелами.

Надеюсь, это руководство сэкономит время и нервы другим пользователям при настройке этого сложного, но очень мощного решения.}

5 лайков