[Гайд] Настройка подписок 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.completedcustomer.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) можно оставить по умолчанию, так как они будут игнорироваться.
- Plan Nickname (Название плана):
- Сохраните план. Повторите это для всех ваших различных продуктов.
Сводка по устранению неполадок
- Проблема: Вебхуки завершаются ошибкой
404 Not Found.- Решение: URL вашей конечной точки в Stripe указан неверно. Он должен быть
https://your-discourse-site.com/s/hooks.
- Решение: URL вашей конечной точки в Stripe указан неверно. Он должен быть
- Проблема: Вебхук успешен (
200 OK), и оплата отображается в профиле биллинга пользователя, но он не добавлен в группу.- Решение: Ваши метаданные указаны неверно. Проверьте три вещи:
- Метаданные должны быть на объекте Stripe Price (Цена), а не на объекте Product (Продукт).
- КЛЮЧ метаданных должен быть точно
group_name. - ЗНАЧЕНИЕ метаданных должно быть уникальным слагом/обработчиком (slug/handle) группы (например,
EnclavePlus), а не её полным именем с пробелами.
- Решение: Ваши метаданные указаны неверно. Проверьте три вещи:
Надеюсь, это руководство сэкономит время и нервы другим пользователям при настройке этого сложного, но очень мощного решения.}
