Guides

Sådan tilføjer du abonnementer med Stripe: planer, prøveperioder, webhooks og mislykkede betalinger

For at tilføje abonnementer med Stripe skal du oprette et produkt med en tilbagevendende pris i Stripe Dashboard, sende kunderne til Stripe Checkout i abonnementstilstand fra din server, og lade en webhook fortælle din app, når hver betaling lykkes, fejler, ændrer sig eller ophører. Gem abonnementsstatus på brugeren, og giv adgang ud fra den — ikke ud fra succes-siden. Tilføj en knap Administrér fakturering, der åbner Stripes hostede kundeportal, så folk kan skifte kort, skifte plan og opsige uden at du bygger de skærme selv.

Denne guide bygger videre på sådan tilføjer du betalinger til din app, som dækker engangs-Checkout, testtilstand og going live. Her fokuserer vi på det, der er anderledes ved tilbagevendende fakturering. Stripe-detaljerne stammer fra Stripes dokumentation pr. september 2026.

Hvorfor abonnementer er sværere end engangsbetalinger

En engangsbetaling sker, mens kunden er i din app. Et abonnement fortsætter, efter de er gået: fornyelser hver måned, kort der udløber, opgraderinger midt i en periode, opsigelser der træder i kraft ved periodens udløb. Din app hører kun om disse gennem webhooks. De fleste abonnementsfejl skyldes, at man behandler den første betaling som hele historien.

Dine muligheder

TilgangHvad du byggerBedst til
Payment Link med en tilbagevendende prisIntet andet end et linkTest af efterspørgsel; håndtering af adgang i hånden
Checkout (abonnementstilstand) + kundeportalEn serverrute, en webhook, en faktureringsknapDe fleste SaaS-apps og medlemskaber
Subscriptions API med din egen betalingsformularMeget mere: betalings-UI, autentificering, genforsøgApps med usædvanlige faktureringsflows
Merchant-of-record-udbyderSvarer til CheckoutSælgere, der vil have udbyderen til at håndtere salgsmoms

Til de fleste apps er Checkout plus portalen den rigtige afvejning. Sammenlign udbydere i Stripe vs. Paddle vs. Lemon Squeezy, hvis moms-håndtering bekymrer dig.

Planlæg din prissætning i Stripe først

I Stripe er et produkt det, du sælger ("Pro-plan"), og en pris er, hvordan du opkræver for det ("199 kr. pr. måned", "1.990 kr. pr. år"). Ét produkt kan have flere priser. Beslut:

  • Hvilke niveauer du tilbyder, og hvad hvert niveau låser op i din app
  • Månedligt, årligt eller begge
  • Om du tilbyder en prøveperiode, og om den kræver et kort på forhånd

Opret produkter og priser i testtilstand, og behold deres pris-ID'er; din app henviser til dem. Hvis du ikke har fastlagt prissætningen endnu, så læs sådan prissætter du et SaaS-produkt og freemium vs. gratis prøveperiode.

Abonnements-livscyklussen du skal håndtere

Stripes oversigt over abonnementer viser de statusser, et abonnement kan have. De vigtigste for adgang:

StatusHvad den betyderGiv adgang?
trialingI en prøveperiodeJa
activeI god standJa
incompleteFørste betaling er ikke gennemført endnu; Stripe giver kunden 23 timerNej
incomplete_expiredFørste betaling lykkedes aldrigNej
past_dueSeneste betaling fejlede eller blev ikke forsøgt; genforsøg kan følgeDit valg; mange apps tillader en kort karensperiode
unpaidGenforsøgene er slut, fakturaer forbliver åbne, ingen flere forsøgNej; Stripes dokumentation siger, at adgang skal tilbagekaldes
canceledAfsluttet; kan ikke genstartesNej
pausedEn prøveperiode sluttede uden betalingsmetode og blev sat på pauseNej

Gem status på din bruger- eller kontopost, og base adgangen på den. Opdatér den, hver gang en relevant webhook ankommer.

Webhook-hændelserne du skal håndtere

HændelseHvad din app gør
checkout.session.completedKnyt de nye Stripe-kunde- og abonnements-ID'er til din bruger
invoice.paidMarkér abonnementet som aktivt og gem den nye periodes slutdato
invoice.payment_failedFortæl brugeren, at kortet fejlede, og link til portalen
invoice.payment_action_requiredBed brugeren fuldføre kortgodkendelse
customer.subscription.updatedOpdatér plan, status og eventuel planlagt opsigelse
customer.subscription.deletedFjern betalt adgang
customer.subscription.trial_will_endPåmind brugeren før prøveperioden slutter; Stripe sender den tre dage før

Reglerne fra Stripes webhook-dokumentation gælder stadig: verificér signaturen med den rå body, returnér et 2xx hurtigt, håndtér dubletter og hændelser i uorden, og forvent gentagelser. Guiden hvad er en webhook forklarer ideen, og betalingsguiden lister reglerne i detaljer.

Trin for trin

  1. Opret produkter og priser i Stripes testtilstand.
  2. Tilføj hemmeligheder: den hemmelige nøgle, pris-ID'erne og senere webhook-signeringshemmeligheden. Læg dem aldrig i frontend-kode.
  3. Prissiden: hver plans knap kalder din server, som opretter en Checkout Session i abonnementstilstand for den indloggede bruger. Send dit bruger-ID med, så webhooken kan matche betalingen til kontoen.
  4. Webhook-endpoint: verificér signaturer og håndtér hændelserne ovenfor, og opdatér én abonnementspost pr. bruger.
  5. Lås funktioner bag den gemte status og plan, tjekket på serveren for hver beskyttet handling, ikke blot skjulte knapper.
  6. Kundeportal: konfigurér den i Stripe Dashboard (hvilke planer folk kan skifte til, og om de kan opsige), og tilføj derefter en knap Administrér fakturering, der opretter en portal-session på serveren og sender brugeren videre dertil.
  7. Mislykkede betalinger: vælg i Stripes faktureringsindstillinger, hvordan genforsøg fungerer, og hvad der sker efter det sidste forsøg. Vis et banner i appen, mens status er past_due.
  8. Test hele livscyklussen, udgiv derefter og registrér den live webhook.

Prompts til din AI-builder

Tilføj abonnementsbetaling med Stripe. Planer: Starter (pris-ID i STRIPE_PRICE_STARTER) og Pro (STRIPE_PRICE_PRO). Prissiden opretter en Checkout Session i abonnementstilstand på serveren med STRIPE_SECRET_KEY, med den indloggede brugers ID vedhæftet. Gem Stripe-kunde-ID, abonnements-ID, plan og status på brugeren. Eksponér aldrig den hemmelige nøgle over for browseren.

Tilføj POST /api/stripe/webhook. Verificér signaturen med STRIPE_WEBHOOK_SECRET ved hjælp af den rå request-body. Håndtér checkout.session.completed, invoice.paid, invoice.payment_failed, customer.subscription.updated, customer.subscription.deleted og customer.subscription.trial_will_end. Registrér behandlede hændelses-ID'er, så dubletter ignoreres. Opdatér brugerens status ud fra abonnementsobjektet, ikke ud fra den rækkefølge hændelserne ankommer i.

Lås Pro-funktioner på serveren: tillad dem kun, når status er active eller trialing, og planen er Pro. Vis et banner "betaling fejlede, opdatér dit kort", når status er past_due. Tilføj en knap Administrér fakturering, der åbner Stripes kundeportal for denne bruger.

Opgraderinger, nedgraderinger og proration

Når en kunde skifter plan, siger Stripes dokumentation, at ændringen ofte skaber en proration: den nye pris anvendes på resten af den aktuelle faktureringsperiode. Du kan forhåndsvise prorationer eller slå dem fra. Hvis planerne har samme interval, forbliver faktureringsdatoerne de samme; at skifte fra månedlig til årlig flytter faktureringsdatoen til dagen for skiftet. At lade kunderne skifte plan i portalen sparer dig for at skrive denne logik, men beslut i portalindstillingerne, hvilke skift der er tilladt.

Testtjekliste

Brug Stripes testtilstand og testkort, og gennemgå hver tilstand:

  • Et nyt abonnement giver den rigtige plan til den rigtige bruger
  • At lukke fanen lige efter betaling giver stadig adgang (beviser at webhooken virker)
  • Et afvist kort ved tilmelding giver ingen adgang
  • En mislykket fornyelse sætter kontoen i past_due og viser banneret
  • At opdatere kortet i portalen genopretter status active
  • Opgradering og nedgradering ændrer funktionerne korrekt
  • Opsigelse ved periodens udløb beholder adgangen indtil slutdatoen og fjerner den derefter
  • Prøvebrugere får adgang, får påmindelsen, og konverterer eller mister adgang korrekt
  • At sende den samme webhook-hændelse to gange ændrer intet

Stripes testure lader dig simulere, at tiden går, så du kan teste fornyelser uden at vente en måned. Tjek Stripes aktuelle testdokumentation for, hvordan de bruges.

Almindelige fejl

  • At give adgang på succes-siden. Kunder kan betale og aldrig nå den. Brug webhooken.
  • Kun at håndtere den første betaling. Fornyelser, fejl og opsigelser kommer senere, som hændelser.
  • At tjekke planstatus kun i frontenden. Alle kan kalde din API direkte.
  • Én bruger, mange abonnementer ved en fejl. Tjek for et eksisterende abonnement, før du opretter en ny Checkout Session, eller send eksisterende kunder til portalen i stedet.
  • At tilbagekalde adgang ved første mislykkede fornyelse. Kort fejler af kedelige grunde. En kort karensperiode med et tydeligt banner beholder kunderne.
  • At glemme den live webhook. Test- og live-endpoints har forskellige signeringshemmeligheder.
  • At ignorere moms og refusioner. Beslut din refusionspolitik og tjek dine skatteforpligtelser med en revisor før lancering.

Abonnementer på Mythex

Apps du bygger på Mythex bruger din egen Stripe-konto og dine egne nøgler; der findes ingen Stripe-forbindelse med ét klik til din app. Tilføj dine test-nøgler og pris-ID'er som projekthemmeligheder, brug prompts som ovenfor, og test med Stripes testkort i Preview. Webhooks kræver din apps offentlige URL, så udgiv, før du registrerer endpointet i Stripe, og udgiv igen, efter du har skiftet til live-nøgler, så den live app henter dem. Se Accepter betalinger med Stripe og Håndtér webhooks i din backend. For det bredere produkt dækker sådan bygger du en SaaS MVP, hvad der skal bygges omkring faktureringen.

Spørgsmål

Hvad er den enkleste måde at tilføje abonnementer med Stripe?

Opret et produkt med en tilbagevendende pris i Stripe Dashboard, send kunderne til Stripe Checkout i abonnementstilstand, håndtér abonnementshændelser med en webhook, og knyt en knap Administrér fakturering til Stripes hostede kundeportal. Så slipper du for selv at bygge kortformularer og skærme til planskift.

Hvilke Stripe-webhook-hændelser har jeg brug for til abonnementer?

Mindst checkout.session.completed for at knytte det nye abonnement til din bruger, invoice.paid for at bekræfte hver succesfuld betaling, invoice.payment_failed for at advare om mislykkede fornyelser, og customer.subscription.updated og customer.subscription.deleted for at følge planskift og opsigelser.

Hvad sker der, når en abonnementsbetaling fejler?

Ifølge Stripes dokumentation pr. september 2026 bliver abonnementet typisk past_due, og Stripe kan forsøge betalingen igen ud fra dine indstillinger. Efter det sidste forsøg afgør dine indstillinger i Dashboard, om det annulleres, markeres som unpaid, eller forbliver past_due.

Kan jeg tilbyde en gratis prøveperiode uden at bede om et kort?

Ja. Stripe understøtter gratis prøveperioder, og dokumentationen beskriver en paused-status for prøveperioder, der slutter uden betalingsmetode, når det er sat op sådan. At indsamle et kort på forhånd giver normalt færre tilmeldinger, men flere betalende kunder; test hvad der passer til dit produkt.

Mythex · Pricing · Byg hvad som helst med AI · Skabeloner til websites og apps · Mythex sammenlignet · Ordliste for app-bygning med AI · Gratis værktøjer til app-bygning med AI · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština 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 简体中文 繁體中文(香港) 繁體中文(台灣)