Посібники

Як додати підписки через Stripe: тарифи, пробні періоди, webhooks і невдалі платежі

Щоб додати підписки через Stripe, створіть у Stripe Dashboard продукт із періодичною ціною, з вашого сервера надсилайте клієнтів до Stripe Checkout у режимі підписки, а webhook нехай повідомляє вашому застосунку, коли кожен платіж успішний, невдалий, змінюється або завершується. Зберігайте статус підписки для користувача та відкривайте доступ на основі цього статусу, а не сторінки успіху. Додайте кнопку Керувати оплатою, яка відкриває розміщений Stripe портал клієнта, щоб люди могли змінювати картки, перемикати тарифи й скасовувати підписку без створення цих екранів вами.

Цей посібник спирається на як додати оплату до застосунку, де описано разовий Checkout, тестовий режим і запуск у роботу. Тут ми зосереджуємося на тому, що відрізняє регулярні платежі. Відомості про Stripe взято з документації Stripe станом на вересень 2026 року.

Чому підписки складніші за разові платежі

Разовий платіж відбувається, поки клієнт перебуває у вашому застосунку. Підписка триває й після того, як клієнт пішов: щомісячні продовження, картки, що спливають, оновлення тарифу посеред циклу, скасування, які набувають чинності наприкінці періоду. Ваш застосунок дізнається про це лише через webhooks. Більшість помилок із підписками виникає через те, що перший платіж вважають усією історією.

Ваші варіанти

ПідхідЩо ви створюєтеНайкраще для
Payment Link із періодичною ціноюЛише посиланняПеревірка попиту; керування доступом вручну
Checkout (режим підписки) + портал клієнтаСерверний маршрут, webhook, кнопку оплатиБільшість SaaS-застосунків і членств
API підписок із власною формою оплатиЗначно більше: інтерфейс оплати, автентифікація, повториЗастосунки з незвичними схемами оплати
Провайдер merchant of recordСхоже на CheckoutПродавці, які хочуть, щоб провайдер займався податком з продажів

Для більшості застосунків Checkout плюс портал — правильний компроміс. Порівняйте провайдерів у Stripe проти Paddle проти Lemon Squeezy, якщо вас турбує обробка податків.

Спершу сплануйте ціни в Stripe

У Stripe продукт — це те, що ви продаєте («Pro plan»), а ціна — це те, як ви за нього стягуєте («$20 на місяць», «$200 на рік»). В одного продукту може бути кілька цін. Визначте:

  • Які тарифи ви пропонуєте і що кожен відкриває у вашому застосунку
  • Помісячно, щорічно чи обидва варіанти
  • Чи пропонуєте ви пробний період і чи потрібна для нього картка наперед

Створіть продукти та ціни в тестовому режимі й збережіть їхні ID цін; ваш застосунок посилатиметься на них. Якщо ціни ще не визначено, прочитайте як визначити ціну SaaS-продукту і фриміум чи безкоштовний пробний період.

Життєвий цикл підписки, який треба обробляти

Огляд підписок Stripe перелічує статуси, які може мати підписка. Найважливіші для доступу:

СтатусЩо означаєНадавати доступ?
trialingУ пробному періодіТак
activeУ доброму станіТак
incompleteПерший платіж ще не завершено; Stripe дає клієнту 23 годиниНі
incomplete_expiredПерший платіж так і не пройшовНі
past_dueОстанній платіж не пройшов або не було спроби; можливі повториНа ваш вибір; багато застосунків дають короткий пільговий період
unpaidПовтори завершено, рахунки залишаються відкритими, нових спроб немаєНі; документація Stripe радить відкликати доступ
canceledЗавершено; не можна відновитиНі
pausedПробний період завершився без способу оплати і був переведений на паузуНі

Зберігайте статус у записі користувача або облікового запису й визначайте доступ на його основі. Оновлюйте його щоразу, коли надходить відповідний webhook.

Події webhook, які треба обробляти

ПодіяЩо робить ваш застосунок
checkout.session.completedПов'язує нові ID клієнта й підписки Stripe з вашим користувачем
invoice.paidПозначає підписку активною і записує нову дату завершення періоду
invoice.payment_failedПовідомляє користувачеві, що картка не пройшла, і дає посилання на портал
invoice.payment_action_requiredПросить користувача пройти автентифікацію картки
customer.subscription.updatedОновлює тариф, статус і будь-яке заплановане скасування
customer.subscription.deletedВидаляє платний доступ
customer.subscription.trial_will_endНагадує користувачеві перед завершенням пробного періоду; Stripe надсилає це за три дні до кінця

Правила для обробників із документації Stripe щодо webhooks діють і тут: перевіряйте підпис за сирим тілом запиту, швидко повертайте 2xx, обробляйте дублікати та події не в порядку надходження й очікуйте повторів. У посібнику що таке webhook пояснено саму ідею, а в посібнику про оплату детально перелічено правила.

Покроково

  1. Створіть продукти й ціни в тестовому режимі Stripe.
  2. Додайте секрети: секретний ключ, ID цін і пізніше секрет підпису webhook. Ніколи не розміщуйте їх у коді інтерфейсу.
  3. Сторінка тарифів: кнопка кожного плану викликає ваш сервер, який створює Checkout Session у режимі підписки для авторизованого користувача. Передайте ID користувача, щоб webhook міг пов'язати платіж з обліковим записом.
  4. Кінцева точка webhook: перевіряйте підписи й обробляйте наведені вище події, оновлюючи один запис підписки для кожного користувача.
  5. Обмежуйте функції залежно від збереженого статусу та тарифу, перевіряючи їх на сервері для кожної захищеної дії, а не лише приховані кнопки.
  6. Портал клієнта: налаштуйте його в Stripe Dashboard (на які тарифи можна переходити, чи можна скасовувати), а потім додайте кнопку Керувати оплатою, яка створює сесію порталу на сервері та перенаправляє до нього.
  7. Невдалі платежі: у налаштуваннях оплати Stripe оберіть поведінку повторів і те, що відбувається після останньої спроби. Показуйте банер у застосунку, поки статус past_due.
  8. Протестуйте весь життєвий цикл, потім опублікуйте й зареєструйте бойовий webhook.

Промпти для вашого AI-конструктора

Додай регулярну оплату підписки через Stripe. Тарифи: Starter (ID ціни в STRIPE_PRICE_STARTER) і Pro (STRIPE_PRICE_PRO). Сторінка тарифів створює на сервері Checkout Session у режимі підписки, використовуючи STRIPE_SECRET_KEY, і додає ID авторизованого користувача. Збережи в користувача ID клієнта Stripe, ID підписки, тариф і статус. Ніколи не передавай секретний ключ у браузер.

Додай POST /api/stripe/webhook. Перевіряй підпис через STRIPE_WEBHOOK_SECRET, використовуючи сире тіло запиту. Обробляй checkout.session.completed, invoice.paid, invoice.payment_failed, customer.subscription.updated, customer.subscription.deleted і customer.subscription.trial_will_end. Записуй оброблені ID подій, щоб ігнорувати дублікати. Оновлюй статус користувача з об'єкта підписки, а не з порядку, у якому надходять події.

Обмеж функції Pro на сервері: дозволяй їх лише тоді, коли статус active або trialing і тариф Pro. Показуй банер «Оплата не пройшла, оновіть картку», коли статус past_due. Додай кнопку Manage billing, яка відкриває портал клієнта Stripe для цього користувача.

Оновлення, зниження тарифу та перерахунок

Коли клієнт перемикає тариф, документація Stripe каже, що зміна часто створює перерахунок (proration): нова ціна застосовується до решти поточного періоду оплати. Можна переглянути перерахунки або вимкнути їх. Якщо тарифи мають однаковий інтервал, дати оплати залишаються тими самими; перехід із місячного на річний переносить дату оплати на день перемикання. Дозвіл клієнтам змінювати тариф у порталі позбавляє вас від написання цієї логіки, але в налаштуваннях порталу потрібно визначити, які перемикання дозволені.

Чек-лист тестування

Використовуйте тестовий режим Stripe і тестові картки та пройдіть кожен стан:

  • Нова підписка надає правильний тариф правильному користувачеві
  • Закриття вкладки одразу після оплати все одно відкриває доступ (це доводить, що webhook працює)
  • Відхилена картка під час реєстрації нічого не відкриває
  • Продовження, яке не пройшло, переводить обліковий запис у past_due і показує банер
  • Оновлення картки в порталі відновлює статус active
  • Підвищення й зниження тарифу коректно змінюють функції
  • Скасування наприкінці періоду зберігає доступ до кінцевої дати, а потім його видаляє
  • Користувачі пробного періоду отримують доступ, отримують нагадування і коректно переходять на платний тариф або втрачають доступ
  • Надсилання того самого події webhook двічі нічого не змінює

Тестові годинники Stripe дають змогу симулювати плин часу, тож можна тестувати продовження без очікування місяця. Перевірте поточну документацію Stripe щодо тестування, щоб дізнатися, як їх використовувати.

Типові помилки

  • Надання доступу на сторінці успіху. Клієнти можуть заплатити й ніколи її не побачити. Використовуйте webhook.
  • Обробка лише першого платежу. Продовження, невдачі та скасування надходять пізніше, як події.
  • Перевірка статусу тарифу лише в інтерфейсі. До вашого API може звертатися будь-хто.
  • Одна людина, випадково багато підписок. Перевіряйте наявну підписку перед створенням нової Checkout Session або відправляйте наявних клієнтів до порталу.
  • Відкликання доступу після першого невдалого продовження. Картки не проходять із банальних причин. Короткий пільговий період із чітким банером утримує клієнтів.
  • Забута бойова webhook-точка. У тестових і бойових кінцевих точок різні секрети підпису.
  • Ігнорування податків і повернень. Визначте політику повернень і перевірте податкові зобов'язання з бухгалтером до запуску.

Підписки на Mythex

Застосунки, які ви створюєте на Mythex, використовують ваш власний обліковий запис Stripe і ключі; для вашого застосунку немає підключення Stripe в один клік. Додайте тестові ключі й ID цін як секрети проєкту, використовуйте промпти, подібні до наведених вище, і тестуйте тестовими картками Stripe у Preview. Webhooks потребують публічної URL-адреси вашого застосунку, тож публікуйте застосунок до реєстрації кінцевої точки в Stripe, а після переходу на бойові ключі опублікуйте знову, щоб бойовий застосунок їх підхопив. Див. Прийом платежів через Stripe і Обробка webhooks у вашому бекенді. Для ширшого продукту як створити MVP SaaS пояснює, що будувати навколо оплати.

Запитання

Який найпростіший спосіб додати підписки через Stripe?

Створіть продукт із періодичною ціною в Stripe Dashboard, надсилайте клієнтів до Stripe Checkout у режимі підписки, обробляйте події підписки через webhook і прив'яжіть кнопку «Керувати оплатою» до розміщеного Stripe порталу клієнта. Так ви не створюєте самостійно форми карток і екрани зміни тарифу.

Які події webhook Stripe потрібні для підписок?

Мінімум: checkout.session.completed, щоб пов'язати нову підписку з вашим користувачем; invoice.paid, щоб підтверджувати кожен успішний платіж; invoice.payment_failed, щоб попереджати про невдалі продовження; а також customer.subscription.updated і customer.subscription.deleted, щоб відстежувати зміни тарифу та скасування.

Що відбувається, коли платіж за підписку не проходить?

За документацією Stripe станом на вересень 2026 року підписка зазвичай переходить у стан past_due, а Stripe може повторити платіж відповідно до ваших налаштувань. Після останньої спроби налаштування Dashboard визначають, чи підписку буде скасовано, позначено як неоплачену чи залишено в past_due.

Чи можна запропонувати безкоштовний пробний період без запиту картки?

Так. Stripe підтримує безкоштовні пробні періоди, а в документації описано статус paused для пробних періодів, які завершуються без способу оплати, якщо так налаштовано. Збір картки наперед зазвичай означає менше реєстрацій, але більше платних клієнтів; перевірте, що підходить вашому продукту.

Mythex · Pricing · Створюйте що завгодно з ШІ · Шаблони сайтів і застосунків · Порівняння Mythex · Глосарій створення застосунків за допомогою ШІ · Безкоштовні інструменти для створення застосунків за допомогою ШІ · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)