Kako dodati pretplate sa Stripeom: planovi, probni periodi, webhookovi i neuspjela plaćanja
Da biste dodali pretplate sa Stripeom, kreirajte proizvod s ponavljajućom cijenom u Stripe kontrolnoj tabli, pošaljite kupce sa svog servera na Stripe Checkout u načinu pretplate, i neka vam webhook javi kad se svako plaćanje uspješno izvrši, ne uspije, promijeni ili završi. Status pretplate čuvajte uz korisnika i na osnovu njega dajte pristup, a ne na osnovu stranice za uspjeh. Dodajte dugme Upravljaj naplatom koje otvara Stripeov hostovani portal za kupce, pa ljudi mogu mijenjati kartice, prebacivati planove i otkazivati bez da vi pravite te ekrane.
Ovaj vodič se nadovezuje na kako dodati plaćanja u aplikaciju, koji pokriva jednokratni Checkout, test način rada i puštanje u rad. Ovdje se fokusiramo na to šta je drugačije kod ponavljajuće naplate. Podaci o Stripeu su iz njegove 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 kad on ode: obnavljanja svakog mjeseca, kartice koje isteknu, nadogradnje usred perioda, otkazivanja koja stupaju na snagu na kraju perioda. Vaša aplikacija za sve to saznaje samo preko webhookova. Većina grešaka s pretplatama dolazi od toga što se prvo plaćanje tretira kao cijela priča.
Vaše opcije
| Pristup | Šta pravite | Najbolje za |
|---|---|---|
| Payment Link s ponavljajućom cijenom | Ništa osim linka | Provjeru potražnje; ručno upravljanje pristupom |
| Checkout (način pretplate) + portal za kupce | Serversku rutu, webhook, dugme za naplatu | Većinu SaaS aplikacija i članarina |
| API za pretplate s vlastitim obrascem za plaćanje | Mnogo više: UI za plaćanje, autentifikacija, ponovni pokušaji | Aplikacije s neobičnim tokovima naplate |
| Pružalac merchant-of-record | Slično Checkoutu | Prodavce koji žele da pružalac obrađuje porez na promet |
Za većinu aplikacija Checkout plus portal je pravi kompromis. Uporedite pružaoce u Stripe vs Paddle vs Lemon Squeezy ako vas brine obrada poreza.
Prvo isplanirajte cijene u Stripeu
U Stripeu je proizvod ono što prodajete („Pro plan“), a cijena je način na koji naplaćujete („20 $ mjesečno“, „200 $ godišnje“). Jedan proizvod može imati nekoliko cijena. Odlučite:
- Koje nivoe nudite i šta svaki otključava u vašoj aplikaciji
- Mjesečno, godišnje ili oboje
- Da li nudite probni period i treba li kartica unaprijed
Kreirajte proizvode i cijene u test načinu rada i sačuvajte njihove ID-jeve cijena; vaša aplikacija se na njih poziva. Ako cijene još niste riješili, pročitajte kako odrediti cijenu SaaS proizvoda i freemium ili besplatni probni period.
Životni ciklus pretplate koji morate obraditi
Stripeov pregled pretplata navodi statuse koje pretplata može imati. Oni koji su najvažniji za pristup:
| Status | Šta znači | Daje pristup? |
|---|---|---|
trialing | U probnom periodu | Da |
active | U dobrom stanju | Da |
incomplete | Prvo plaćanje još nije završeno; Stripe kupcu daje 23 sata | Ne |
incomplete_expired | Prvo plaćanje nikad nije uspjelo | Ne |
past_due | Posljednje plaćanje nije uspjelo ili nije pokušano; mogu uslijediti ponovni pokušaji | Vaš izbor; mnoge aplikacije daju kratak rok milosti |
unpaid | Ponovni pokušaji su završeni, računi ostaju otvoreni, nema daljih pokušaja | Ne; Stripeova 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 na zapisu korisnika ili naloga i na njemu zasnujte pristup. Ažurirajte ga svaki put kad stigne relevantan webhook.
Događaji webhookova koje treba obraditi
| Događaj | Šta radi vaša aplikacija |
|---|---|
checkout.session.completed | Povezuje novi Stripe ID kupca i pretplate s vašim korisnikom |
invoice.paid | Označava pretplatu aktivnom i bilježi novi kraj perioda |
invoice.payment_failed | Obavještava korisnika da mu kartica nije prošla i daje link na portal |
invoice.payment_action_required | Traži od korisnika da završi autentifikaciju kartice |
customer.subscription.updated | Ažurira plan, status i eventualno zakazano otkazivanje |
customer.subscription.deleted | Uklanja pristup za plaćene funkcije |
customer.subscription.trial_will_end | Podsjeća korisnika prije kraja probnog perioda; Stripe šalje tri dana ranije |
Pravila za handler iz Stripeove dokumentacije za webhookove i dalje važe: provjerite potpis koristeći sirovo tijelo, brzo vratite 2xx, obradite duplikate i događaje koji stižu van reda i očekujte ponovne pokušaje. Vodič šta je webhook objašnjava ideju, a vodič o plaćanjima navodi pravila detaljno.
Korak po korak
- Kreirajte proizvode i cijene u Stripe test načinu rada.
- Dodajte tajne: tajni ključ, ID-jeve cijena i kasnije tajni ključ za potpisivanje webhooka. Nikad ih ne stavljajte u kod frontenda.
- Stranica s cijenama: dugme svakog plana poziva vaš server, koji kreira Checkout sesiju u načinu pretplate za prijavljenog korisnika. Proslijedite ID korisnika da webhook može povezati plaćanje s nalogom.
- Krajnja tačka webhooka: provjerite potpise i obradite gore navedene događaje, ažurirajući jedan zapis pretplate po korisniku.
- Ograničite funkcije na sačuvani status i plan, provjeravano na serveru za svaku zaštićenu radnju, a ne samo sakrivenim dugmadima.
- Portal za kupce: podesite ga u Stripe kontrolnoj tabli (na koje planove ljudi mogu prelaziti, da li mogu otkazati), zatim dodajte dugme Upravljaj naplatom koje na serveru kreira sesiju portala i preusmjerava na nju.
- Neuspjela plaćanja: u Stripeovim postavkama naplate izaberite ponašanje ponovnih pokušaja i šta se dešava nakon posljednjeg. Prikazujte baner u aplikaciji dok je stanje
past_due. - Testirajte cijeli životni ciklus, zatim objavite i registrujte live webhook.
Upiti za vaš AI alat za izradu
Dodaj naplatu pretplata sa Stripeom. Planovi: Starter (ID cijene u STRIPE_PRICE_STARTER) i Pro (STRIPE_PRICE_PRO). Stranica s cijenama kreira Checkout sesiju u načinu pretplate na serveru koristeći STRIPE_SECRET_KEY, uz ID prijavljenog korisnika. Sačuvaj Stripe ID kupca, ID pretplate, plan i status na korisniku. Nikad ne izlažite tajni ključ pregledniku.
Dodaj POST /api/stripe/webhook. Provjeri potpis pomoću STRIPE_WEBHOOK_SECRET koristeći sirovo tijelo zahtjeva. Obradi checkout.session.completed, invoice.paid, invoice.payment_failed, customer.subscription.updated, customer.subscription.deleted i customer.subscription.trial_will_end. Bilježi ID-jeve obrađenih događaja da se duplikati ignorišu. Ažuriraj korisnikov status iz objekta pretplate, a ne iz redoslijeda kojim događaji stižu.
Ograniči Pro funkcije na serveru: dozvoli ih samo kad je status active ili trialing i plan Pro. Prikaži baner „plaćanje nije uspjelo, ažuriraj karticu“ kad je status past_due. Dodaj dugme Upravljaj naplatom koje otvara Stripe portal za kupce za ovog korisnika.
Nadogradnje, smanjenja i proporcionalna naplata
Kad kupac promijeni plan, Stripeova dokumentacija kaže da promjena često stvara proporcionalnu naplatu: nova cijena se primjenjuje na ostatak tekućeg perioda naplate. Proporcionalni iznosi se mogu pregledati unaprijed ili isključiti. Ako planovi imaju isti interval, datumi naplate ostaju isti; prelazak s mjesečnog na godišnji pomjera datum naplate na dan promjene. Dozvoljavanje kupcima da mijenjaju plan u portalu štedi vam pisanje te logike, ali u postavkama portala odlučite koje promjene su dozvoljene.
Lista za testiranje
Koristite Stripe test način rada i test kartice, i prođite kroz svako stanje:
- Nova pretplata daje pravi plan pravom korisniku
- Zatvaranje taba odmah nakon plaćanja i dalje daje pristup (dokazuje da webhook radi)
- Odbijena kartica pri prijavi ne daje ništa
- Neuspjelo obnavljanje stavlja nalog u past_due i prikazuje baner
- Ažuriranje kartice u portalu vraća status active
- Nadogradnja i smanjenje ispravno mijenjaju funkcije
- Otkazivanje na kraju perioda zadržava pristup do kraja, pa ga uklanja
- Korisnici u probnom periodu dobijaju pristup, dobijaju podsjetnik i ispravno prelaze na plaćanje ili gube pristup
- Slanje istog događaja webhooka dvaput ne mijenja ništa
Stripeovi test satovi omogućavaju simulaciju prolaska vremena, pa možete testirati obnavljanja bez čekanja mjesec dana. Provjerite trenutnu Stripeovu dokumentaciju za testiranje da vidite kako ih koristiti.
Česte greške
- Davanje pristupa na stranici za uspjeh. Kupci mogu platiti i nikad je ne vidjeti. Koristite webhook.
- Obrada samo prvog plaćanja. Obnavljanja, neuspjeha i otkazivanja stižu kasnije, kao događaji.
- Provjera statusa plana samo na frontendu. Svako može direktno pozvati vaš API.
- Jedan korisnik, više pretplata slučajno. Provjerite postojeću pretplatu prije kreiranja nove Checkout sesije, ili postojeće kupce pošaljite na portal.
- Ukidanje pristupa pri prvom neuspjelom obnavljanju. Kartice ne uspijevaju iz dosadnih razloga. Kratak rok milosti uz jasan baner zadržava kupce.
- Zaboravljen live webhook. Test i live krajnje tačke imaju različite tajne ključeve za potpisivanje.
- Ignorisanje poreza i povrata. Odlučite politiku povrata i provjerite poreske obaveze kod računovođe prije puštanja u rad.
Pretplate na Mythexu
Aplikacije koje pravite na Mythexu koriste vaš sopstveni Stripe račun i ključeve; za vašu aplikaciju ne postoji povezivanje sa Stripeom u jednom kliku. Dodajte test ključeve i ID-jeve cijena kao tajne projekta, koristite upite slične gornjima i testirajte Stripe test karticama u pregledu. Webhookovima treba javna URL adresa vaše aplikacije, pa objavite prije registracije krajnje tačke u Stripeu, i ponovo objavite nakon prelaska na live ključeve da živa aplikacija preuzme ključeve. Pogledajte Prihvatanje plaćanja sa Stripeom i Obrada webhookova u backendu. Za širi proizvod, kako napraviti SaaS MVP pokriva šta graditi oko naplate.
Pitanja
Koji je najjednostavniji način za dodavanje pretplata sa Stripeom?
Kreirajte proizvod s ponavljajućom cijenom u Stripe kontrolnoj tabli, pošaljite kupce na Stripe Checkout u načinu pretplate, obradite događaje pretplate preko webhooka i povežite dugme Upravljaj naplatom s hostovanim portalom za kupce kod Stripea. Tako ne morate sami praviti obrasce za karticu i ekrane za promjenu plana.
Koji događaji webhooka su mi potrebni za pretplate?
Najmanje checkout.session.completed da povežete novu pretplatu s korisnikom, invoice.paid da potvrdite svako uspješno plaćanje, invoice.payment_failed da upozorite na neuspjela obnavljanja, te customer.subscription.updated i customer.subscription.deleted da pratite promjene plana i otkazivanja.
Šta se dešava kad plaćanje pretplate ne uspije?
Prema Stripeovoj dokumentaciji od septembra 2026, pretplata obično pređe u past_due, a Stripe može ponoviti plaćanje u skladu s vašim postavkama. Nakon posljednjeg pokušaja, postavke vaše kontrolne table određuju hoće li biti otkazana, označena kao neplaćena ili ostavljena u past_due.
Mogu li ponuditi 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 unaprijed obično znači manje prijava, ali više plaćajućih kupaca; testirajte šta odgovara vašem proizvodu.