Jak přidat předplatné přes Stripe: tarify, zkušební období, webhooky a neúspěšné platby
Pro přidání předplatného přes Stripe vytvořte ve Stripe Dashboardu produkt s opakovanou cenou, pošlete zákazníky ze serveru na Stripe Checkout v režimu předplatného a nechte webhook informovat vaši aplikaci, kdy každá platba proběhne, selže, změní se nebo skončí. Stav předplatného uložte u uživatele a přístup podle něj udělujte, ne podle stránky po úspěšné platbě. Přidejte tlačítko Spravovat fakturaci, které otevře hostovaný zákaznický portál Stripe, kde lidé mohou změnit kartu, přepnout tarif nebo zrušit předplatné, aniž byste tyto obrazovky museli stavět sami.
Tento průvodce navazuje na jak přidat platby do aplikace, který popisuje jednorázový Checkout, testovací režim a spuštění naostro. Zde se zaměřujeme na to, v čem se opakované platby liší. Údaje o Stripe jsou z jeho dokumentace k září 2026.
Proč jsou předplatné těžší než jednorázové platby
Jednorázová platba proběhne, zatímco je zákazník ve vaší aplikaci. Předplatné běží dál i poté, co odejde: měsíční obnovení, karty, které vyprší, upgrady uprostřed období, zrušení, která se projeví ke konci období. Vaše aplikace se o tom dozví jen přes webhooky. Většina chyb u předplatného vzniká tím, že se první platba bere jako celý příběh.
Vaše možnosti
| Přístup | Co stavíte | Nejvhodnější pro |
|---|---|---|
| Payment Link s opakovanou cenou | Jen odkaz | Ověřování poptávky; přístup řešíte ručně |
| Checkout (režim předplatného) + zákaznický portál | Serverovou trasu, webhook a tlačítko fakturace | Většinu SaaS aplikací a členství |
| API předplatných s vlastním platebním formulářem | Mnohem víc: platební rozhraní, autentizace, opakování | Aplikace s neobvyklými fakturačními toky |
| Poskytovatel typu merchant of record | Podobné jako Checkout | Prodejce, kteří chtějí, aby poskytovatel řešil daň z prodeje |
Pro většinu aplikací je Checkout plus portál správný kompromis. Pokud vás zajímá daň, porovnejte poskytovatele v Stripe vs Paddle vs Lemon Squeezy.
Nejdřív naplánujte ceny ve Stripe
Ve Stripe je produkt to, co prodáváte („Pro tarif“), a cena je to, jak to účtujete („600 Kč měsíčně“, „6 000 Kč ročně“). Jeden produkt může mít několik cen. Rozhodněte:
- Které tarify nabízíte a co každý odemyká ve vaší aplikaci
- Měsíční, roční, nebo obojí
- Zda nabízíte zkušební období a zda vyžaduje kartu předem
Produkty a ceny vytvořte v testovacím režimu a uložte si jejich ID cen; vaše aplikace na ně odkazuje. Pokud ceny ještě nemáte vyladěné, přečtěte si jak nastavit cenu SaaS produktu a freemium vs zkušební verze.
Životní cyklus předplatného, který musíte zvládnout
Dokumentace Stripe k předplatnému uvádí stavy, ve kterých může být. Pro přístup jsou nejdůležitější tyto:
| Stav | Co znamená | Udělit přístup? |
|---|---|---|
trialing | Je ve zkušebním období | Ano |
active | V pořádku | Ano |
incomplete | První platba ještě neproběhla; Stripe zákazníkovi dává 23 hodin | Ne |
incomplete_expired | První platba nikdy neproběhla | Ne |
past_due | Poslední platba selhala nebo nebyla provedena; mohou následovat pokusy | Podle vašeho rozhodnutí; mnoho aplikací povoluje krátkou lhůtu |
unpaid | Opakované pokusy skončily, faktury zůstávají otevřené, žádné další pokusy | Ne, podle dokumentace Stripe má být přístup odebrán |
canceled | Ukončeno; nelze obnovit | Ne |
paused | Zkušební období skončilo bez platební metody a bylo nastaveno na pozastavení | Ne |
Uložte stav na záznam uživatele nebo účtu a přístup zakládejte na něm. Aktualizujte ho pokaždé, když přijde relevantní webhook.
Události webhooků, které musíte obsloužit
| Událost | Co dělá vaše aplikace |
|---|---|
checkout.session.completed | Propojí nové ID zákazníka a předplatného Stripe s vaším uživatelem |
invoice.paid | Označí předplatné jako aktivní a zaznamená nový konec období |
invoice.payment_failed | Řekne uživateli, že karta selhala, a odkáže do portálu |
invoice.payment_action_required | Požádá uživatele o dokončení ověření karty |
customer.subscription.updated | Aktualizuje tarif, stav a případné naplánované zrušení |
customer.subscription.deleted | Odebere placený přístup |
customer.subscription.trial_will_end | Připomene uživateli konec zkušebního období; Stripe to posílá tři dny předem |
Pravidla pro obsluhu z webhookové dokumentace Stripe stále platí: ověřujte podpis pomocí surového těla požadavku, rychle vracejte kód 2xx, zvládejte duplicitní a nepořadové události a počítejte s opakováním. Princip webhooku vysvětluje průvodce co je webhook a pravidla podrobně popisuje průvodce platbami.
Krok za krokem
- Vytvořte produkty a ceny v testovacím režimu Stripe.
- Přidejte tajné údaje: tajný klíč, ID cen a později podepisovací tajemství webhooku. Nikdy je nedávejte do kódu na frontendu.
- Stránka s cenami: tlačítko každého tarifu volá váš server, který vytvoří Checkout Session v režimu předplatného pro přihlášeného uživatele. Předejte ID svého uživatele, aby webhook mohl platbu spárovat s účtem.
- Koncový bod webhooku: ověřte podpisy, obsluhujte události výše a aktualizujte jeden záznam předplatného na uživatele.
- Omezte funkce podle uloženého stavu a tarifu, kontrolovaného na serveru u každé chráněné akce, ne jen podle skrytých tlačítek.
- Zákaznický portál: nastavte ho v Stripe Dashboardu (na které tarify lze přejít a zda lze zrušit), potom přidejte tlačítko Spravovat fakturaci, které na serveru vytvoří relaci portálu a přesměruje na něj.
- Neúspěšné platby: v nastavení fakturace Stripe zvolte chování při opakování a co se stane po posledním pokusu. Zobrazujte v aplikaci upozornění, když je stav
past_due. - Otestujte celý životní cyklus, pak publikujte a zaregistrujte ostrý webhook.
Prompty pro váš nástroj s AI
Přidej fakturaci předplatného přes Stripe. Tarify: Starter (ID ceny v STRIPE_PRICE_STARTER) a Pro (STRIPE_PRICE_PRO). Stránka s cenami vytváří na serveru Checkout Session v režimu předplatného pomocí STRIPE_SECRET_KEY a přidává ID přihlášeného uživatele. Ulož na uživatele ID zákazníka Stripe, ID předplatného, tarif a stav. Tajný klíč nikdy neposílej do prohlížeče.
Přidej POST /api/stripe/webhook. Ověř podpis pomocí STRIPE_WEBHOOK_SECRET nad surovým tělem požadavku. Obsluhuj checkout.session.completed, invoice.paid, invoice.payment_failed, customer.subscription.updated, customer.subscription.deleted a customer.subscription.trial_will_end. Zaznamenávej ID zpracovaných událostí, aby se duplicity ignorovaly. Stav uživatele aktualizuj z objektu předplatného, ne podle pořadí, v jakém události přijdou.
Omez funkce Pro na serveru: povol je jen tehdy, když je stav active nebo trialing a tarif je Pro. Když je stav past_due, zobraz upozornění „Platba selhala, aktualizujte kartu“. Přidej tlačítko Spravovat fakturaci, které otevře zákaznický portál Stripe pro tohoto uživatele.
Upgrady, downgrady a proporcionální vyúčtování
Když zákazník přepne tarif, dokumentace Stripe uvádí, že změna často vytvoří proration (proporcionální vyúčtování): nová cena se uplatní na zbytek aktuálního fakturačního období. Proration si můžete zobrazit nebo je vypnout. Pokud mají tarify stejný interval, data účtování zůstanou stejná; přechod z měsíčního na roční posune datum účtování na den přepnutí. Nechat zákazníky měnit tarif v portálu vám ušetří psaní této logiky, ale v nastavení portálu rozhodněte, které přechody jsou povolené.
Kontrolní seznam testů
Použijte testovací režim Stripe a testovací karty a projděte každý stav:
- Nové předplatné udělí správný tarif správnému uživateli
- Zavření karty hned po platbě stále udělí přístup (dokazuje, že webhook funguje)
- Zamítnutá karta při registraci nic neudělí
- Neúspěšné obnovení přepne účet do stavu past_due a zobrazí upozornění
- Aktualizace karty v portálu obnoví aktivní stav
- Upgrade a downgrade správně změní funkce
- Zrušení ke konci období ponechá přístup do konce období, pak ho odebere
- Uživatelé ve zkušebním období mají přístup, dostanou připomínku a správně přejdou na placený tarif nebo přístup ztratí
- Odeslání stejné události webhooku dvakrát nic nezmění
Testovací hodiny Stripe umožňují simulovat plynutí času, takže můžete testovat obnovení bez čekání měsíc. Jak je používat, zjistěte v aktuální dokumentaci Stripe k testování.
Časté chyby
- Udělování přístupu na stránce po úspěchu. Zákazníci mohou zaplatit a na stránku se nikdy nedostat. Použijte webhook.
- Obsluha jen první platby. Obnovení, selhání a zrušení přicházejí později jako události.
- Kontrola stavu tarifu jen ve frontendu. Kdokoli může volat vaše API přímo.
- Náhodně víc předplatných na jednoho uživatele. Před vytvořením nové Checkout Session zkontrolujte existující předplatné, nebo pošlete stávající zákazníky do portálu.
- Odebrání přístupu hned při prvním neúspěšném obnovení. Karty selhávají z nudných důvodů. Krátká doba na vyrovnání s jasným upozorněním zákazníky udrží.
- Zapomenutý ostrý webhook. Testovací a ostrý koncový bod mají různá podepisovací tajemství.
- Ignorování daně a vratek. Rozhodněte o zásadách vracení peněz a daňových povinnostech se účetní ještě před spuštěním.
Předplatné v Mythexu
Aplikace, které stavíte na Mythexu, používají váš vlastní účet a klíče Stripe; pro vaši aplikaci neexistuje připojení Stripe jedním kliknutím. Přidejte své testovací klíče a ID cen jako tajné údaje projektu, používejte prompty podobné výše uvedeným a testujte testovacími kartami Stripe v Preview. Webhooky potřebují veřejnou adresu vaší aplikace, takže publikujte dřív, než koncový bod zaregistrujete ve Stripe, a po přepnutí na ostré klíče publikujte znovu, aby je ostrá aplikace převzala. Viz Přijímání plateb přes Stripe a Obsluha webhooků v backendu. Pro širší pohled na produkt, jak postavit MVP SaaS popisuje, co stavět kolem fakturace.
Otázky
Jaký je nejjednodušší způsob, jak přidat předplatné přes Stripe?
V Stripe Dashboardu vytvořte produkt s opakovanou cenou, pošlete zákazníky na Stripe Checkout v režimu předplatného, zpracovávejte události předplatného pomocí webhooku a tlačítko Spravovat fakturaci propojte s hostovaným zákaznickým portálem Stripe. Vyhnete se tak vlastním formulářům pro karty a obrazovkám pro změnu tarifu.
Které webhooky Stripe potřebuji pro předplatné?
Minimálně checkout.session.completed, které propojí nové předplatné s vaším uživatelem, invoice.paid pro potvrzení každé úspěšné platby, invoice.payment_failed pro upozornění na neúspěšná obnovení a customer.subscription.updated a customer.subscription.deleted pro sledování změn tarifu a zrušení.
Co se stane, když platba předplatného selže?
Podle dokumentace Stripe ke stavu k září 2026 se předplatné obvykle přepne do stavu past_due a Stripe může platbu podle vašeho nastavení zkusit znovu. Po posledním opakování rozhodne nastavení v Dashboardu, zda bude předplatné zrušeno, označeno jako unpaid, nebo zůstane past_due.
Mohu nabídnout bezplatné zkušební období bez žádání o kartu?
Ano. Stripe podporuje bezplatná zkušební období a v dokumentaci popisuje stav paused pro zkušební období, která skončí bez platební metody, pokud je tak nastavíte. Získání karty předem obvykle znamená méně registrací, ale více platících zákazníků; vyzkoušejte, co hodí vašemu produktu.