Paano Magdagdag ng Subscriptions sa Stripe: Plans, Trials, Webhooks at Pumalyang Bayad
Para magdagdag ng subscriptions gamit ang Stripe, gumawa ng produkto na may recurring price sa Stripe Dashboard, ipadala ang mga customer sa Stripe Checkout sa subscription mode mula sa server mo, at hayaang sabihin ng webhook sa app mo kapag nagtagumpay, pumalya, nagbago o nagtapos ang bawat bayad. Itago ang status ng subscription laban sa user at ibatay ang access doon, hindi sa success page. Magdagdag ng Manage billing button na nagbubukas ng hosted customer portal ng Stripe para makapagpalit ng card, makalipat ng plan at makapagkansela ang mga tao nang hindi ka gumagawa ng mga screen na iyon.
Nakabatay ang gabay na ito sa paano magdagdag ng payments sa app mo, na sumasakop sa one-time na Checkout, test mode at pag-go live. Dito, tinututukan natin ang pagkakaiba ng recurring billing. Ang mga detalye ng Stripe ay ayon sa dokumentasyon ng Stripe noong Setyembre 2026.
Bakit mas mahirap ang subscriptions kaysa one-time na bayad
Nangyayari ang one-time na bayad habang nasa app ang customer. Nagpapatuloy ang subscription kahit umalis na sila: mga renewal kada buwan, mga card na nag-expire, mga upgrade sa gitna ng cycle, mga pagkanselang nagkakabisa sa dulo ng period. Nalalaman lang ito ng app mo sa pamamagitan ng webhooks. Karamihan ng bug sa subscription ay nagmumula sa pagturing sa unang bayad bilang buong kuwento.
Mga opsyon mo
| Paraan | Ano ang ginagawa mo | Pinakaangkop para sa |
|---|---|---|
| Payment Link na may recurring price | Link lang | Pagsubok ng demand; manu-manong paghawak ng access |
| Checkout (subscription mode) + customer portal | Server route, webhook, billing button | Karamihan ng SaaS app at membership |
| Subscriptions API na may sarili mong payment form | Mas marami: payment UI, authentication, retry | Mga app na may kakaibang billing flow |
| Merchant-of-record na provider | Katulad ng Checkout | Mga nagbebenta na gustong sila ang humawak ng sales tax |
Para sa karamihan ng app, ang Checkout kasama ang portal ang tamang trade-off. Ikumpara ang mga provider sa Stripe vs Paddle vs Lemon Squeezy kung nakakabahala sa iyo ang paghawak ng buwis.
Planuhin muna ang pagpepresyo mo sa Stripe
Sa Stripe, ang produkto ang ibinebenta mo ("Pro plan") at ang price ang paraan ng pagsingil ("$20 kada buwan", "$200 kada taon"). Maaaring may ilang price ang iisang produkto. Pagpasyahan:
- Anong mga tier ang iaalok mo at ano ang ina-unlock ng bawat isa sa app mo
- Buwanan, taunan, o pareho
- Kung may trial ka, at kung kailangan nito ng card nang maaga
Gumawa ng mga produkto at price sa test mode, at itago ang mga price ID; tinutukoy sila ng app mo. Kung hindi mo pa napagpapasyahan ang presyo, basahin ang paano magpresyo ng SaaS product at ang freemium vs free trial.
Ang lifecycle ng subscription na dapat mong hawakan
Nakalista sa subscriptions overview ng Stripe ang mga status na maaaring magkaroon ng subscription. Ang pinakamahalaga para sa access:
| Status | Ano ang ibig sabihin | Bigyan ng access? |
|---|---|---|
trialing | Nasa trial period | Oo |
active | Maayos ang standing | Oo |
incomplete | Hindi pa natatapos ang unang bayad; binibigyan ng Stripe ang customer ng 23 oras | Hindi |
incomplete_expired | Hindi nagtagumpay ang unang bayad | Hindi |
past_due | Pumalya ang pinakabagong bayad o hindi naisagawa; maaaring may sumunod na retry | Ikaw ang pipili; maraming app ang nagbibigay ng maikling grace period |
unpaid | Natapos na ang retry, nananatiling bukas ang mga invoice, walang susunod na pagsubok | Hindi; sinasabi ng docs ng Stripe na bawiin ang access |
canceled | Natapos; hindi na maibabalik | Hindi |
paused | Natapos ang trial nang walang payment method at naka-set na mag-pause | Hindi |
I-store ang status sa user o account record mo at ibatay ang access doon. I-update ito tuwing dumarating ang kaugnay na webhook.
Ang mga webhook event na dapat hawakan
| Event | Ano ang ginagawa ng app mo |
|---|---|
checkout.session.completed | Iugnay ang bagong Stripe customer at subscription ID sa user mo |
invoice.paid | Markahan ang subscription bilang active at itala ang bagong period end |
invoice.payment_failed | Sabihin sa user na pumalya ang card nila at i-link ang portal |
invoice.payment_action_required | Hilingin sa user na kumpletuhin ang card authentication |
customer.subscription.updated | I-update ang plan, status, at anumang nakatakdang pagkansela |
customer.subscription.deleted | Alisin ang bayad na access |
customer.subscription.trial_will_end | Paalalahanan ang user bago matapos ang trial; tatlong araw bago ito ipinapadala ng Stripe |
Nalalapat pa rin ang mga tuntunin ng handler mula sa webhook docs ng Stripe: i-verify ang signature gamit ang raw body, magbalik ng 2xx nang mabilis, hawakan ang mga duplicate at wala sa pagkakasunod na event, at asahan ang mga retry. Ipinapaliwanag ng gabay na ano ang webhook ang ideya, at inilista ng gabay sa payments ang mga tuntunin nang detalyado.
Hakbang-hakbang
- Gumawa ng mga produkto at price sa Stripe test mode.
- Magdagdag ng secrets: ang secret key, ang mga price ID, at mamaya ang webhook signing secret. Huwag kailanman ilagay ang mga ito sa frontend code.
- Pricing page: tumatawag ang button ng bawat plan sa server mo, na gumagawa ng Checkout Session sa subscription mode para sa naka-log in na user. Ipasa ang user ID mo para maiugnay ng webhook ang bayad sa account.
- Webhook endpoint: i-verify ang mga signature at hawakan ang mga event sa itaas, na ina-update ang isang subscription record kada user.
- I-gate ang mga feature batay sa naka-store na status at plan, na chine-check sa server para sa bawat protektadong aksyon, hindi lang sa mga button na nakatago.
- Customer portal: i-configure ito sa Stripe Dashboard (aling mga plan ang puwedeng lipatan ng mga tao, kung puwede silang magkansela), tapos magdagdag ng Manage billing button na gumagawa ng portal session sa server at nagre-redirect dito.
- Mga pumalyang bayad: sa billing settings ng Stripe, piliin ang behaviour ng retry at kung ano ang mangyayari pagkatapos ng huling retry. Magpakita ng banner sa app habang
past_due. - Subukan ang buong lifecycle, tapos i-publish at irehistro ang live webhook.
Mga prompt na ibibigay sa AI builder mo
Magdagdag ng subscription billing gamit ang Stripe. Mga plan: Starter (price ID sa STRIPE_PRICE_STARTER) at Pro (STRIPE_PRICE_PRO). Ang pricing page ay gumagawa ng Checkout Session sa subscription mode sa server gamit ang STRIPE_SECRET_KEY, na may ID ng naka-log in na user na nakakabit. I-save ang Stripe customer ID, subscription ID, plan at status sa user. Huwag kailanman ilantad ang secret key sa browser.
Magdagdag ng POST /api/stripe/webhook. I-verify ang signature gamit ang STRIPE_WEBHOOK_SECRET gamit ang raw request body. Hawakan ang checkout.session.completed, invoice.paid, invoice.payment_failed, customer.subscription.updated, customer.subscription.deleted at customer.subscription.trial_will_end. Itala ang mga naprosesong event ID para balewalain ang mga duplicate. I-update ang status ng user mula sa subscription object, hindi mula sa pagkakasunod ng pagdating ng mga event.
I-gate ang mga Pro feature sa server: payagan lang kapag active o trialing ang status at Pro ang plan. Magpakita ng banner na "pumalya ang bayad, i-update ang card mo" kapag past_due ang status. Magdagdag ng Manage billing button na nagbubukas ng Stripe customer portal para sa user na ito.
Upgrade, downgrade at proration
Kapag lumipat ng plan ang customer, sinasabi ng docs ng Stripe na kadalasang lumilikha ito ng proration: ang bagong price ay ina-apply sa natitirang bahagi ng kasalukuyang billing period. Maaari mong i-preview ang mga proration o i-off ang mga ito. Kung pareho ang interval ng mga plan, nananatili ang mga petsa ng billing; kapag lumipat mula buwanan patungong taunan, nagbabago ang petsa ng billing sa araw ng paglipat. Hinahayaan ng pagpapalipat ng plan ng customer sa portal na hindi mo na isulat ang lohikang ito, pero magpasya sa settings ng portal kung aling mga paglipat ang pinapayagan.
Checklist sa pagsubok
Gamitin ang Stripe test mode at mga test card, at dumaan sa bawat estado:
- Ang bagong subscription ay nagbibigay ng tamang plan sa tamang user
- Ang pagsasara ng tab kaagad pagkatapos magbayad ay nagbibigay pa rin ng access (pinatutunayan nitong gumagana ang webhook)
- Ang tinanggihang card sa signup ay walang ibinibigay
- Ang pumalyang renewal ay naglalagay sa account sa past_due at nagpapakita ng banner
- Ang pag-update ng card sa portal ay nagbabalik ng active na status
- Tama ang pagbabago ng features kapag nag-upgrade at nag-downgrade
- Ang pagkansela sa dulo ng period ay nagpapanatili ng access hanggang sa end date, tapos inaalis ito
- Nakakakuha ng access ang mga trial user, nakakatanggap ng paalala, at tama ang pag-convert o pagkawala ng access
- Ang pagpapadala ng parehong webhook event nang dalawang beses ay walang binabago
Pinapayagan ka ng test clocks ng Stripe na gayahin ang paglipas ng panahon, para masubukan ang mga renewal nang hindi naghihintay ng isang buwan. Tingnan ang kasalukuyang testing docs ng Stripe para sa kung paano ito gamitin.
Mga karaniwang pagkakamali
- Pagbibigay ng access sa success page. Maaaring magbayad ang customer at hindi na makarating doon. Gumamit ng webhook.
- Pagha-handle lang ng unang bayad. Dumarating ang mga renewal, pagkabigo at pagkansela nang huli, bilang mga event.
- Pag-check ng plan status sa frontend lang. Sinuman ay puwedeng tumawag nang direkta sa API mo.
- Isang user, maraming subscription nang hindi sinasadya. Tingnan kung may umiiral nang subscription bago gumawa ng bagong Checkout Session, o ipadala na lang ang mga umiiral na customer sa portal.
- Pagbawi ng access sa unang pumalyang renewal. Pumapalya ang mga card dahil sa mga karaniwang dahilan. Ang maikling grace period na may malinaw na banner ay nagpapanatili ng mga customer.
- Nakakalimutan ang live webhook. Magkaiba ang signing secret ng test at live na endpoint.
- Hindi pinapansin ang buwis at refund. Magpasya sa refund policy mo at kumonsulta sa accountant tungkol sa obligasyon sa buwis bago mag-launch.
Subscriptions sa Mythex
Gumagamit ang mga app na ginawa mo sa Mythex ng sarili mong Stripe account at keys; walang one-click na Stripe connection para sa app mo. Idagdag ang iyong test keys at price ID bilang project secrets, gamitin ang mga prompt na tulad ng nasa itaas, at subukan gamit ang test card ng Stripe sa Preview. Kailangan ng webhooks ang pampublikong URL ng app mo, kaya i-publish muna bago irehistro ang endpoint sa Stripe, at i-publish ulit pagkatapos lumipat sa live keys para makuha ito ng live na app. Tingnan ang Tumanggap ng bayad gamit ang Stripe at Pangasiwaan ang webhooks sa backend. Para sa mas malawak na produkto, sinasaklaw ng paano gumawa ng SaaS MVP ang mga dapat itayo sa paligid ng billing.
Mga tanong
Ano ang pinakasimpleng paraan para magdagdag ng subscriptions gamit ang Stripe?
Gumawa ng produkto na may recurring price sa Stripe Dashboard, ipadala ang mga customer sa Stripe Checkout sa subscription mode, hawakan ang mga subscription event gamit ang webhook, at i-link ang isang Manage billing button sa hosted customer portal ng Stripe. Iniiwasan nito ang pagbuo mo ng card form at mga screen ng pagbabago ng plan.
Aling mga Stripe webhook event ang kailangan ko para sa subscriptions?
Hindi bababa sa checkout.session.completed para iugnay ang bagong subscription sa user mo, invoice.paid para kumpirmahin ang bawat matagumpay na bayad, invoice.payment_failed para bigyan ng babala ang mga pumalyang renewal, at customer.subscription.updated at customer.subscription.deleted para subaybayan ang pagbabago ng plan at mga pagkansela.
Ano ang mangyayari kapag pumalya ang bayad sa subscription?
Ayon sa dokumentasyon ng Stripe noong Setyembre 2026, karaniwang nagiging past_due ang subscription at maaaring mag-retry ang Stripe ng bayad ayon sa settings mo. Pagkatapos ng huling retry, ang mga setting ng Dashboard mo ang nagpapasya kung ito ay kakanselahin, mamarkahang unpaid, o iiwang past_due.
Maaari ba akong mag-alok ng libreng trial nang hindi humihingi ng card?
Oo. Sinusuportahan ng Stripe ang libreng trial, at sinasabi ng docs nito na may paused na status para sa mga trial na natatapos nang walang payment method, kapag ganoon ang pagkaka-configure. Ang pangongolekta ng card nang maaga ay karaniwang nangangahulugang mas kaunting sign-up pero mas maraming nagbabayad na customer; subukan kung ano ang bagay sa produkto mo.