Kako dodati pretplate pomoću Stripe-a: planovi, probni periodi, webhook-ovi i neuspela plaćanja
Da biste dodali pretplate pomoću Stripe-a, u Stripe kontrolnoj tabli napravite proizvod sa ponavljajućom cenom, pošaljite kupce sa svog servera na Stripe Checkout u režimu pretplate, i neka vam webhook javlja kada svako plaćanje uspe, ne uspe, promeni se ili se završi. Status pretplate čuvajte uz korisnika i na osnovu njega dodeljujte pristup, a ne na osnovu stranice za uspeh. Dodajte dugme Upravljaj naplatom koje otvara Stripe-ov hostovani portal za kupce, da ljudi mogu da menjaju kartice, prebacuju planove i otkazuju bez da vi pravite te ekrane.
Ovaj vodič se nastavlja na kako dodati plaćanja u aplikaciju, koji pokriva jednokratni Checkout, test režim i puštanje u rad. Ovde se fokusiramo na to šta je drugačije kod ponavljajuće naplate. Podaci o Stripe-u su iz Stripe dokumentacije od septembra 2026.
Zašto su pretplate teže od jednokratnih plaćanja
Jednokratno plaćanje se dešava dok je kupac u vašoj aplikaciji. Pretplata se nastavlja i kada on ode: obnavljanja svakog meseca, kartice kojima ističe rok, nadogradnje usred perioda, otkazivanja koja stupaju na snagu na kraju perioda. Vaša aplikacija za to saznaje samo preko webhook-ova. Većina grešaka sa pretplatama nastaje kada se prvo plaćanje tretira kao cela priča.
Vaše opcije
| Pristup | Šta pravite | Najbolje za |
|---|---|---|
| Payment Link sa ponavljajućom cenom | Ništa osim linka | Testiranje potražnje; ručno upravljanje pristupom |
| Checkout (režim pretplate) + portal za kupce | Serversku rutu, webhook, dugme za naplatu | Većinu SaaS aplikacija i članstva |
| Subscriptions API sa sopstvenom formom za plaćanje | Mnogo više: UI za plaćanje, autentifikaciju, ponovne pokušaje | Aplikacije sa neobičnim tokovima naplate |
| Provajder merchant of record | Slično Checkout-u | Prodavce koji žele da provajder obrađuje porez na promet |
Za većinu aplikacija, Checkout plus portal je pravi kompromis. Uporedite provajdere u Stripe vs Paddle vs Lemon Squeezy ako vas brine obrada poreza.
Prvo isplanirajte cene u Stripe-u
U Stripe-u je proizvod ono što prodajete („Pro plan”), a cena je kako to naplaćujete („20 USD mesečno”, „200 USD godišnje”). Jedan proizvod može imati nekoliko cena. Odlučite:
- Koje nivoe nudite i šta svaki otključava u vašoj aplikaciji
- Mesečno, godišnje ili oboje
- Da li nudite probni period i da li on zahteva karticu unapred
Napravite proizvode i cene u test režimu i sačuvajte njihove ID-jeve cena; vaša aplikacija se na njih poziva. Ako cene još nisu dogovorene, pročitajte kako odrediti cenu SaaS proizvoda i freemium vs besplatni probni period.
Životni ciklus pretplate koji morate obraditi
Stripe pregled pretplata navodi statuse koje pretplata može imati. Oni koji su najvažniji za pristup:
| Status | Šta znači | Dati pristup? |
|---|---|---|
trialing | U probnom periodu | Da |
active | U redu sa plaćanjem | Da |
incomplete | Prvo plaćanje još nije završeno; Stripe daje kupcu 23 sata | Ne |
incomplete_expired | Prvo plaćanje nikada nije uspelo | Ne |
past_due | Poslednje plaćanje nije uspelo ili nije pokušano; mogu uslediti ponovni pokušaji | Vaš izbor; mnoge aplikacije dozvoljavaju kratak rok milosti |
unpaid | Ponovni pokušaji su završeni, fakture ostaju otvorene, nema daljih pokušaja | Ne; Stripe dokumentacija kaže da treba ukinuti pristup |
canceled | Završena; ne može se ponovo pokrenuti | Ne |
paused | Probni period se završio bez načina plaćanja i bio je podešen da se pauzira | Ne |
Sačuvajte status u zapisu korisnika ili naloga i zasnujte pristup na njemu. Ažurirajte ga svaki put kada stigne relevantan webhook.
Webhook događaji koje treba obraditi
| Događaj | Šta radi vaša aplikacija |
|---|---|
checkout.session.completed | Povezuje nove Stripe ID-jeve kupca i pretplate sa vašim korisnikom |
invoice.paid | Označava pretplatu aktivnom i beleži kraj novog perioda |
invoice.payment_failed | Javlja korisniku da mu kartica nije prošla i vodi ga do portala |
invoice.payment_action_required | Traži od korisnika da završi autentifikaciju kartice |
customer.subscription.updated | Ažurira plan, status i svako zakazano otkazivanje |
customer.subscription.deleted | Uklanja plaćeni pristup |
customer.subscription.trial_will_end | Podseća korisnika pre kraja probnog perioda; Stripe šalje tri dana pre |
Pravila za handler iz Stripe webhook dokumentacije i dalje važe: proverite potpis koristeći sirovo telo, brzo vratite 2xx, obrađujte duplikate i događaje van redosleda i očekujte ponovne pokušaje. Vodič šta je webhook objašnjava pojam, a vodič o plaćanjima navodi pravila detaljno.
Korak po korak
- Napravite proizvode i cene u Stripe test režimu.
- Dodajte tajne: tajni ključ, ID-jeve cena i kasnije tajnu za potpisivanje webhook-a. Nikada ih ne stavljajte u kod front enda.
- Stranica sa cenama: dugme svakog plana poziva vaš server, koji kreira Checkout sesiju u režimu pretplate za prijavljenog korisnika. Prosledite ID korisnika da webhook može da poveže plaćanje sa nalogom.
- Krajnja tačka webhook-a: proverite potpise i obradite događaje iznad, ažurirajući jedan zapis pretplate po korisniku.
- Ograničite funkcije na sačuvani status i plan, proveravajući na serveru za svaku zaštićenu radnju, ne samo sakrivena dugmad.
- Portal za kupce: podesite ga u Stripe kontrolnoj tabli (na koje planove mogu da prebace i da li mogu da otkažu), zatim dodajte dugme Upravljaj naplatom koje na serveru kreira portal sesiju i preusmerava na nju.
- Neuspela plaćanja: u podešavanjima naplate u Stripe-u izaberite ponašanje ponovnih pokušaja i šta se dešava posle poslednjeg pokušaja. Prikažite banner u aplikaciji dok je status
past_due. - Testirajte ceo životni ciklus, zatim objavite aplikaciju i registrujte živi webhook.
Prompt-ovi za vaš AI alat
Dodajte naplatu pretplata pomoću Stripe-a. Planovi: Starter (ID cene u STRIPE_PRICE_STARTER) i Pro (STRIPE_PRICE_PRO). Stranica sa cenama kreira Checkout sesiju u režimu pretplate na serveru koristeći STRIPE_SECRET_KEY, sa ID-jem prijavljenog korisnika. Sačuvajte Stripe ID kupca, ID pretplate, plan i status na korisniku. Nikada ne izlažite tajni ključ pregledaču.
Dodajte POST /api/stripe/webhook. Proverite potpis pomoću STRIPE_WEBHOOK_SECRET koristeći sirovo telo zahteva. Obrađujte checkout.session.completed, invoice.paid, invoice.payment_failed, customer.subscription.updated, customer.subscription.deleted i customer.subscription.trial_will_end. Beležite ID-jeve obrađenih događaja da duplikati budu ignorisani. Ažurirajte status korisnika iz objekta pretplate, a ne iz redosleda kojim događaji stižu.
Ograničite Pro funkcije na serveru: dozvolite ih samo kada je status active ili trialing i plan Pro. Prikažite banner „plaćanje nije uspelo, ažurirajte karticu” kada je status past_due. Dodajte dugme Upravljaj naplatom koje za ovog korisnika otvara Stripe portal za kupce.
Nadogradnje, smanjenja i proporcionalna naplata
Kada kupac prebacuje planove, Stripe dokumentacija kaže da promena često pravi proporcionalnu naplatu (proration): nova cena se primenjuje na ostatak tekućeg perioda naplate. Možete pregledati proporcije ili ih isključiti. Ako planovi imaju isti interval, datumi naplate ostaju isti; prelazak sa mesečnog na godišnji pomera datum naplate na dan promene. Kada kupci menjaju planove u portalu, ne morate sami da pišete tu logiku, ali u podešavanjima portala odredite koje promene su dozvoljene.
Lista za testiranje
Koristite Stripe test režim i test kartice i prođite kroz svako stanje:
- Nova pretplata daje pravi plan pravom korisniku
- Zatvaranje taba odmah posle plaćanja i dalje daje pristup (dokazuje da webhook radi)
- Odbijena kartica pri prijavi ne daje ništa
- Neuspelo obnavljanje stavlja nalog u past_due i prikazuje banner
- Ažuriranje kartice u portalu vraća status active
- Nadogradnja i smanjenje pravilno menjaju funkcije
- Otkazivanje na kraju perioda zadržava pristup do kraja, pa ga uklanja
- Korisnici u probnom periodu dobijaju pristup, dobijaju podsetnik i pravilno se pretvaraju u plaćajuće ili gube pristup
- Slanje istog webhook događaja dvaput ništa ne menja
Stripe test satovi vam omogućavaju da simulirate protok vremena, pa možete testirati obnavljanja bez čekanja mesec dana. Proverite aktuelnu Stripe dokumentaciju za testiranje da vidite kako se koriste.
Česte greške
- Davanje pristupa na stranici za uspeh. Kupci mogu da plate i nikada je ne vide. Koristite webhook.
- Obrada samo prvog plaćanja. Obnavljanja, neuspesi i otkazivanja stižu kasnije, kao događaji.
- Provera statusa plana samo u front endu. Bilo ko može direktno da pozove vaš API.
- Jedan korisnik, slučajno više pretplata. Proverite postojeću pretplatu pre kreiranja nove Checkout sesije, ili pošaljite postojeće kupce na portal.
- Ukidanje pristupa pri prvom neuspelom obnavljanju. Kartice ne prolaze iz dosadnih razloga. Kratak rok milosti sa jasnim banerom zadržava kupce.
- Zaboravljen živi webhook. Test i živa krajnja tačka imaju različite tajne za potpisivanje.
- Ignorisanje poreza i povraćaja. Odlučite politiku povraćaja i proverite poreske obaveze sa računovođom pre lansiranja.
Pretplate na Mythexu
Aplikacije koje pravite na Mythexu koriste vaš sopstveni Stripe nalog i ključeve; ne postoji povezivanje Stripe-a za jedan klik za vašu aplikaciju. Dodajte test ključeve i ID-jeve cena kao tajne projekta, koristite prompt-ove kao gore i testirajte sa Stripe test karticama u Preview-u. Webhook-ovima treba javna URL adresa vaše aplikacije, pa objavite pre registrovanja krajnje tačke u Stripe-u, i ponovo objavite posle prelaska na žive ključeve da bi živa aplikacija preuzela ih. Pogledajte Prihvatanje plaćanja pomoću Stripe-a i Obrada webhook-ova u vašem backend-u. Za širi proizvod, kako napraviti SaaS MVP pokriva šta graditi oko naplate.
Pitanja
Koji je najjednostavniji način da dodate pretplate pomoću Stripe-a?
U Stripe kontrolnoj tabli napravite proizvod sa ponavljajućom cenom, pošaljite kupce na Stripe Checkout u režimu pretplate, obrađujte događaje pretplate pomoću webhook-a i povežite dugme Upravljaj naplatom sa Stripe-ovim hostovanim portalom za kupce. Tako ne morate sami da pravite forme za karticu i ekrane za promenu plana.
Koje Stripe webhook događaje su mi potrebni za pretplate?
Najmanje checkout.session.completed da biste novu pretplatu povezali sa korisnikom, invoice.paid da potvrdite svako uspešno plaćanje, invoice.payment_failed da upozorite na neuspela obnavljanja, i customer.subscription.updated i customer.subscription.deleted da pratite promene plana i otkazivanja.
Šta se dešava kada plaćanje pretplate ne uspe?
Prema Stripe dokumentaciji od septembra 2026, pretplata obično pređe u past_due, a Stripe može da ponovi naplatu u skladu sa vašim podešavanjima. Posle poslednjeg pokušaja, podešavanja vaše kontrolne table određuju da li se pretplata otkazuje, označava kao unpaid ili ostaje past_due.
Mogu li da ponudim besplatan probni period bez traženja kartice?
Da. Stripe podržava besplatne probne periode, a njegova dokumentacija opisuje status paused za probne periode koji se završe bez načina plaćanja, ako je tako podešeno. Traženje kartice unapred obično znači manje prijava, ali više plaćajućih kupaca; testirajte šta odgovara vašem proizvodu.