Перейти к содержимому
supastack
Обзор документации
MobileExpo

For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /ru/docs/web/stripe-payments.md (or send Accept: text/markdown).

Добавьте платежи Stripe

Создайте бесплатный аккаунт Stripe, продукт с периодической ценой, секретный ключ и подписанный webhook, выдающий entitlement после оформления заказа.

Задать вопрос об этом руководстве
Открыть в

Прохождение для начинающих

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

Кратко о терминах: тестовый режим — это песочница Stripe — переключатель Test mode на дашборде держит каждый ключ, продукт и платёж фиктивными, пока вы его не выключите. Секретный ключ (sk_test_…) — пароль вашего сервера к Stripe. Продукт с ценой — то, что покупают клиенты; price id (price_…) называет его в коде. Webhook — это вызов Stripe к вашему серверу, когда платёж успешен или подписка меняется, а секрет подписи (whsec_…) доказывает, что вызов действительно идёт от Stripe.

Что вы создаёте: аккаунт Stripe, один продукт с периодической ценой, секретный API-ключ и endpoint webhook — около двадцати минут. Stripe сам хостит страницу оформления заказа; комплект создаёт сессию на стороне сервера и перенаправляет, поэтому публичный браузерный ключ не нужен.

Держите в уме рамки: это руководство продаёт только веб-подписки. Покупки внутри iOS/Android-приложения должны идти через биллинг Apple и Google — никогда через Stripe Checkout — вот почему мобильные используют RevenueCat.

Создание аккаунта Stripe

1. Откройте stripe.com → Start now и зарегистрируйтесь со своей почтой.

2. Онбординг спрашивает о вашем бизнесе — в тестовом режиме можно пропустить каждый вопрос и всё равно пользоваться полной песочницей; завершайте активацию только перед приёмом реальных платежей.

Ожидается: вы попадаете на дашборд с видимым переключателем Test mode в шапке. Держите его включённым для всего ниже — живые ключи позже попадут в ваше продакшен-хранилище секретов, никогда в env-файл ноутбука.

Копирование API-ключей

1. На дашборде откройте Developers → API keys.

2. Вы видите два тестовых ключа: Publishable key pk_test_… и замаскированный Secret key. Нажмите Reveal test key рядом с секретным и скопируйте значение sk_test_….

Комплекту нужен только секретный ключ: сессии оформления заказа создаются на сервере, а пользователь перенаправляется на хостинг-страницу Stripe, поэтому публичный ключ не попадает в env-переменные. Если продукт, который вы построите позже, добавит Stripe.js, вы использовали бы публичный ключ на клиенте; биллинг-поток комплекта этого не делает.

Ключ sk_test_… — полный креденшел для песочного аккаунта: он живёт в apps/web/.env.local или хранилище секретов, никогда в переменных NEXT_PUBLIC_/EXPO_PUBLIC_ и никогда в Git.

Создание продукта и цены

1. Откройте Product catalog → Add product.

2. Назовите его в честь вашего плана — Pro совпадает с поставляемым планом комплекта — дайте ему цену и выберите Recurring (например, ежемесячно): оформление заказа комплекта создаёт сессии в режиме подписки, которым нужна периодическая цена, а не разовая.

3. Сохраните, откройте продукт и скопируйте price id — он начинается с price_… (не prod_…, это id продукта).

Поставляемый план pro уже показывает переключатель Monthly/Yearly: месячный оформляется с STRIPE_PRICE_ID, а годовой опции нужна вторая периодическая цена в STRIPE_PRICE_ID_PRO_YEARLY — без неё годовое оформление падает с price-unconfigured. Меняйте названия планов, суммы и то, что даёт покупка, в apps/web/src/product-plans.ts — Stripe хранит денежную сторону, файл планов хранит сторону entitlement.

Добавление endpoint webhook

Webhook — это то, что реально выдаёт доступ: комплект переворачивает entitlement только после прибытия подписанного события Stripe, поэтому одно перенаправление оформления ничего не доказывает.

1. Откройте Developers → Webhooks → Add endpoint.

2. Endpoint URL: ваш публичный URL плюс /api/billing/webhook — например, https://yourdomain.com/api/billing/webhook. Другие биллинг-провайдеры получают собственный путь внутри этой директории; приёмник Stripe живёт в корне.

3. В Select events выберите события, которые обрабатывает комплект: checkout.session.completed, checkout.session.async_payment_succeeded, checkout.session.async_payment_failed, invoice.paid, invoice.payment_failed, customer.subscription.created, customer.subscription.updated и customer.subscription.deleted.

4. Создайте endpoint, откройте его страницу, нажмите Reveal под Signing secret и скопируйте значение whsec_… — у каждого endpoint свой секрет.

Локальная разработка не может принимать серверы Stripe, поэтому используйте вместо этого Stripe CLI: один раз stripe login, затем stripe listen --forward-to localhost:3000/api/billing/webhook во втором терминале. Он печатает временный whsec_… — именно это значение, а не дашбордовское, попадает в .env.local, пока работает stripe listen.

Добавьте значения в приложение

Установите строки ниже в apps/web/.env.local. BILLING_PROVIDER=stripe выбирает адаптер; остальные три — ключ, цена и секрет подписи. Включение провайдера с любым из них отсутствующим роняет запуск и называет переменную.

Все три значения STRIPE_* — только для сервера — никогда NEXT_PUBLIC_/EXPO_PUBLIC_, никогда в коммитах; продакшен получает их через менеджер секретов хоста (руководство по развёртыванию описывает Secret Manager). Перезапустите dev-сервер после редактирования.

# apps/web/.env.local
BILLING_PROVIDER=stripe
STRIPE_SECRET_KEY=sk_test_…
STRIPE_PRICE_ID=price_…
STRIPE_WEBHOOK_SECRET=whsec_…   # `stripe listen` value locally; endpoint signing secret in production
# STRIPE_PRICE_ID_PRO_YEARLY=price_…   # required for the shipped Yearly toggle

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

Запустите stripe listen --forward-to localhost:3000/api/billing/webhook и оставьте работать, перезапустите dev-сервер, затем откройте /billing, выберите план Pro и завершите хостинг-оформление Stripe тестовой картой 4242 4242 4242 4242, любой будущей датой и любым CVC.

Ожидается: приложение возвращается на /billing?checkout=success, и entitlement воркспейса переворачивается в активный — терминал listen логирует доставленные события, а Developers → Webhooks → ваш endpoint на дашборде показывает зелёные доставки.

Чтобы проверить приёмник без кликов по оформлению, stripe trigger checkout.session.completed отправляет синтетическое событие через форвардер listen.

Частые сбои: 400 на каждую доставку означает, что секрет подписи не соответствует этому endpoint — перекопируйте whsec_… для правильного endpoint и обновите env; тихие пустышки означают, что BILLING_PROVIDER всё ещё local; а ключи sk_live_, затесавшиеся в тестовую установку, означают, что вы скопировали ключи не того режима — держите тест и продакшен строго раздельными.

Комплект поставляет тот же одноконтрактный адаптер для Lemon Squeezy, Creem, Polar, Whop, Paddle, Dodo и PayPal — тот же поток, другая консоль и имена env — а мобильные покупки остаются на RevenueCat, не Stripe.

Часто задаваемые вопросы

14 вопросов

Что такое supastack?

supastack — модульная основа для создания SaaS-продуктов с AI. Она объединяет общую инфраструктуру, чтобы вы могли сосредоточиться на продуктовых функциях.

Поддерживает ли он web и mobile?

Да. supastack включает приложения Next.js и Expo как отправные точки для web- и мобильных интерфейсов.

Какая аутентификация включена?

Better Auth покрывает e-mail/пароль, OTP и социальный вход. Личные воркспейсы провижинируются вместе с аккаунтом, чтобы продуктовые записи были ограничены с первого дня.

Как он поддерживает AI?

supastack включает настраиваемый мультипровайдерный AI, учёт использования, бюджеты и зашифрованную поддержку bring-your-own-key.

Как обрабатываются подписки?

Для продуктов на ките Stripe-биллинг, подписки и права доступа образуют основу платного доступа. Секреты провайдеров остаются только на сервере.

Где живёт мой продуктовый код?

Продуктовые функции остаются в отдельном коде, а продукт настраивает и интегрирует модули основы supastack.

Как устроены цены supastack?

Кит — разовая покупка с пожизненными обновлениями: один фреймворк за $249 (временная стартовая цена — скидка $100 от стандартной цены $349) или все фреймворки (Next.js, iOS, Android) за $499 (временная стартовая цена — скидка $100 от стандартной цены $599), плюс $75 за каждое дополнительное место разработчика. Без подписки на кит. Оплата на этом сайте доставляет лицензионный ключ по e-mail, доступ к репозиторию — через приглашение GitHub.

Как воркспейсы ограничивают мои данные?

Записи пользователей ограничены по workspaceId. Идентичность, права доступа, AI-использование, события биллинга и записи аудита остаются внутри границы личного воркспейса.

Как работают фоновые задачи?

Trigger.dev — явный рантайм задач. Контракт JobRunner обещает только enqueue, status и cancel — семантика workflow остаётся специфичной для Trigger.dev и явной.

Чем почта отличается от рассылок?

Транзакционная почта покрывает продуктовые сценарии вроде уведомлений о завершении. Холодные рассылки и кампании — забота продукта, вне почтового модуля этого кита.

Как работают покупки в мобильном приложении?

Мобильное приложение поддерживает нативные покупки и восстановление через RevenueCat, а сервер проверяет доступ. Настройте аккаунты магазинов и завершите тестирование на устройствах перед публикацией. Веб-оплата остается отдельной.

Где хранятся ключи AI-провайдеров?

Bring-your-own-key креденшелы зашифрованы и остаются только на сервере. Ключи удаляются из логов; использование и бюджеты видны на уровне воркспейса.

Какие способы оплаты принимает оформление заказа?

Оформление заказа на Stripe принимает карты, а после включения кошельков в аккаунте Stripe может также предлагать Alipay и WeChat Pay — удобно для покупателей из Китая. Авторизации кошельков подтверждаются асинхронно, поэтому страница лицензии обновляется, как только платёж завершается.

Могу ли я получить возврат средств?

После получения доступа к репозиторию supastack остается вашим навсегда, поэтому возврат средств невозможен. Но будьте уверены: вы получаете полный исходный код с пожизненными обновлениями для создания и запуска неограниченного числа продуктов для себя или клиентов. Вы лишь не можете перепродавать код или распространять репозиторий как стартовый набор или шаблон.

RU
Тема