Guider

Slik legger du til betalinger i appen: kasse, abonnement og webhooks

Den enkleste måten å legge til betalinger i appen din på er Stripe. Bruk en Payment Link hvis du bare trenger en «Kjøp»-knapp og kan håndtere bestillinger manuelt. Bruk Stripe Checkout hvis appen din må vite hvem som har betalt og reagere automatisk. Bruk Checkout i abonnementsmodus pluss Stripes kundeportal for løpende fakturering. I alle tilfeller unntatt det aller enkleste trenger du også en webhook, et serverendepunkt som Stripe kaller når en betaling lykkes. Test alt med Stripes testnøkler og testkort før du bytter til live-nøkler.

Denne guiden forklarer hvert alternativ, webhook-delen som de fleste veiledninger hopper over, og hva du bør sjekke før du tar imot ekte penger. Stripe-detaljene er hentet fra Stripes egen dokumentasjon per september 2026.

Hvorfor bruke en betalingsleverandør i det hele tatt

Samle aldri inn kortnumre i egne skjemaer. Å håndtere rå kortdata gjør at du kommer inn under PCI DSS (kortbransjens sikkerhetsstandard), og det er et alvorlig ansvar. En betalingsleverandør som Stripe hoster betalingsskjemaet, lagrer kortet, håndterer bankens autentisering og forteller appen din resultatet. Appen din ser bare «kunde X betalte for Y».

Denne guiden bruker Stripe fordi det er mye brukt, godt dokumentert og støttet av de fleste KI-app-byggere. Det finnes andre leverandører, og noen fungerer som «merchant of record» og tar hånd om salgsskatt for deg. Hvis skatteetterlevelse bekymrer deg, er den modellen verdt å sammenligne.

De tre måtene å ta betalinger med Stripe på

AlternativKrever kodeVet appen din hvem som betalte?Best for
Payment LinksIngenBare hvis du legger til en webhookSalg av noen få faste produkter, donasjoner, teste etterspørsel
Checkout (engangs)Serverkode for å opprette en øktJa, via webhookButikker, digitale nedlastinger, enkeltkjøp
Checkout (abonnement)Serverkode pluss håndtering av webhookJa, via webhookSaaS, medlemskap, alt som er løpende

Payment Links

En Payment Link er en betalingsside som Stripe hoster, og som du lager i Stripe-dashbordet uten kode. Du får en URL du kan legge bak en knapp i appen din, dele i en e-post eller vise som QR-kode. Stripes dokumentasjon sier at Payment Links kan selge et produkt, et abonnement eller ta imot en donasjon, og at du kan la kundene velge hva de vil betale, eller begrense antall kjøp.

Haken er at appen din ikke automatisk vet at en bestemt innlogget bruker har betalt. For en donasjonsside eller en liten butikk der du oppfyller ordrer for hånd fra e-postvarslene fra Stripe, går det fint. For «betal for å låse opp Pro-funksjonene» går det ikke.

Stripe Checkout

Checkout er en betalingsside som serveren din oppretter på forespørsel for et bestemt kjøp. Serveren din forteller Stripe hva som kjøpes (og eventuelt hvilken kunde som kjøper), Stripe returnerer en URL, og du sender kunden dit. Stripes dokumentasjon beskriver det som støtte for både engangs- og abonnementsbetalinger, som en side hostet av Stripe, en side innebygd på nettstedet ditt eller et innebygd skjema.

Flyten:

  1. Kunden klikker Kjøp i appen din.
  2. Serveren din oppretter en Checkout-økt med din hemmelige nøkkel, og inkluderer en ID som knytter økten til brukeren eller bestillingen.
  3. Kunden sendes videre til Stripe og betaler.
  4. Stripe sender kunden tilbake til suksesssiden din.
  5. Stripe sender en hendelse checkout.session.completed til webhooken din, og serveren din markerer bestillingen som betalt eller låser opp tilgang.

Steg 2 må skje på serveren, fordi det bruker din hemmelige nøkkel. Det er hovedgrunnen til at Checkout trenger en backend.

Abonnementer

Abonnementer bruker Checkout i abonnementsmodus med en gjentakende pris som du har satt opp i Stripe. Den første betalingen fungerer som flyten over. Etter det skjer fornyelser, mislykkede kort, oppgraderinger og kanselleringer over tid, ofte når kunden ikke er i appen din i det hele tatt. Appen din får derfor vite om dem bare gjennom webhooks.

For at kunder skal kunne administrere sitt eget abonnement, tilbyr Stripe en hostet kundeportal. Ifølge Stripes dokumentasjon kan kunder oppdatere betalingsmetoder og faktureringsopplysninger, endre eller kansellere abonnementer, og se og laste ned fakturaer der. Du konfigurerer den i Stripe-dashbordet og legger til en knapp «Administrer fakturering» som sender kunden dit. Da slipper du å bygge disse skjermene selv.

Webhooks: den delen du ikke kan hoppe over

En webhook er en HTTP-forespørsel som Stripe sender til serveren din når noe skjer. (Se hva en webhook er for den generelle ideen.) Stripes veiledning for oppfyllelse er tydelig: du kan ikke stole på suksessiden alene for å oppfylle bestillinger, fordi en kunde kan betale og miste forbindelsen før siden lastes. For abonnementer og forsinkede betalingsmetoder kreves webhooks.

Hendelser som er verdt å håndtere

HendelseHva den betyrHva appen din gjør
checkout.session.completedCheckout er fullførtMarker bestillingen som betalt, eller start tilgang
checkout.session.async_payment_succeededEn forsinket metode (for eksempel en bankbelastning) gikk gjennom senereOppfyll nå
checkout.session.async_payment_failedDen forsinkede betalingen feiletSi fra til kunden; ikke oppfyll
invoice.paidEn abonnementsbetaling lyktes, inkludert fornyelserForleng tilgangen
invoice.payment_failedEn fornyelse feiletVarsle brukeren; Stripe kan prøve på nytt
customer.subscription.updatedPlan er endret, eller kansellering er planlagtOppdater brukerens plan
customer.subscription.deletedAbonnementet er avsluttetFjern betalt tilgang

Regler for en korrekt webhook-håndterer

Disse kommer rett fra Stripes webhook-dokumentasjon, og KI-genererte håndterere glemmer av og til noen av dem:

  • Verifiser signaturen. Hver hendelse har en Stripe-Signature-header. Håndtereren din sjekker den med endepunktets signeringshemmelighet (den starter med whsec_). Uten dette kan hvem som helst sende en falsk «betaling lyktes» til serveren din.
  • Bruk den rå forespørselskroppen. Signaturkontroller feiler hvis rammeverket ditt parser eller endrer kroppen først.
  • Returner et 2xx-svar raskt, og gjør tyngre arbeid etterpå. Tidsavbrudd regnes som feil.
  • Håndter duplikater. Stripe kan levere den samme hendelsen mer enn én gang. Registrer behandlede hendelses-ID-er, eller gjør oppfyllelsen trygg å kjøre to ganger.
  • Ikke anta rekkefølge. Stripe garanterer ikke at hendelser kommer i den rekkefølgen de skjedde.
  • Regn med nye forsøk. I live-modus prøver Stripe på nytt i opptil tre dager, så en kort nedetid fører ikke til tapte betalinger. Men håndtereren din må takle sene hendelser.

Webhooks krever en offentlig HTTPS-adresse, så de fungerer vanligvis bare når appen din er publisert. Stripes CLI kan videresende hendelser til en lokal maskin for utviklere.

En ledetekst som dekker hele flyten

Legg til et engangskjøp med Stripe Checkout for «Pro-pakken» (pris-ID i STRIPE_PRICE_ID). Opprett Checkout-økten på serveren med STRIPE_SECRET_KEY fra hemmelighetene, og ta med den innloggede brukerens ID i økten. Legg til et endepunkt POST /api/stripe/webhook som verifiserer Stripe-signaturen med STRIPE_WEBHOOK_SECRET, med den rå forespørselskroppen, håndterer checkout.session.completed og markerer at brukeren har Pro-pakken. Gjør det trygt hvis samme hendelse kommer to ganger. Suksess- og avbruddssider. Eksponer aldri den hemmelige nøkkelen i nettleseren.

For abonnementer, legg til: «Bruk abonnementsmodus med STRIPE_PRICE_ID. Håndter invoice.paid, invoice.payment_failed, customer.subscription.updated og customer.subscription.deleted. Legg til en knapp Administrer fakturering som åpner Stripes kundeportal.»

Testmodus

Stripe har separate miljøer for sandkasse (test) og live, med egne nøkler. Sandkassenøkler starter med pk_test_, sk_test_ eller rk_test_. Live-nøkler starter med pk_live_, sk_live_ eller rk_live_. Testtransaksjoner flytter ikke penger.

Nyttige testkort fra Stripes testdokumentasjon (en fremtidig utløpsdato og en tresifret CVC):

KortnummerResultat
4242 4242 4242 4242Betalingen lykkes
4000 0000 0000 0002Kortet blir avvist
4000 0000 0000 3220Krever 3D Secure-autentisering, og lykkes deretter

Test minst dette:

  • En vellykket betaling låser opp riktig ting for riktig bruker
  • Et avvist kort viser en tydelig melding og låser opp ingenting
  • At nettleserfanen lukkes rett etter betaling gir fortsatt tilgang (dette beviser at webhooken fungerer, ikke bare suksessiden)
  • Avbryt på Stripe-siden sender brukeren tilbake til appen uten belastning
  • For abonnementer: kanseller i kundeportalen og kontroller at tilgangen opphører når den skal

Gå live

  1. Aktiver Stripe-kontoen med virksomhets- og bankopplysninger.
  2. Bytt til live-nøkler i hemmelighetene for appen din. Stripe anbefaler begrensede nøkler med bare de tillatelsene integrasjonen trenger, i stedet for en ubegrenset hemmelig nøkkel.
  3. Opprett et live-webhook-endepunkt som peker mot den publiserte appen din. Det har sin egen signeringshemmelighet, forskjellig fra test-hemmeligheten. Oppdater den.
  4. Opprett produkter og priser på nytt i live-modus. Test-modusens ID-er finnes ikke der.
  5. Gjør ett ekte, lite kjøp og refunder det.

Hold alle nøkler i prosjektets hemmeligheter, aldri i kode eller chat. Vår sikkerhetssjekkliste dekker nøkler og verifisering av webhook i mer detalj.

Skatt, refusjoner og papirarbeid

Betalinger medfører plikter som kode ikke løser. Dette er ikke skatterådgivning. Snakk med en regnskapsfører.

  • Salgsskatt, MVA og GST. Avhengig av hvor du og kundene dine er, kan du måtte registrere deg, beregne og levere avgift. Stripe Tax kan beregne og innkreve skatt i kassen, overvåke hvor salget ditt kan utløse en plikt, og hjelpe med registrering og innrapportering. Ansvaret er likevel ditt. Merchant-of-record-leverandører er et alternativ som tar på seg mer av dette.
  • Refusjoner og tvister. Bestem refusjonspolicyen din før lansering, og legg den ut på nettstedet ditt. Tvister (chargebacks) skjer. Ta vare på oversikt over hva som ble kjøpt og levert.
  • Kvitteringer og fakturaer. Stripe kan sende kvitteringer på e-post. Virksomheter kan trenge ordentlige fakturaer.
  • Gebyrer. Alle leverandører tar gebyr per transaksjon. Sjekk leverandørens gjeldende prisside i stedet for å stole på tall i artikler.

Hvilket oppsett passer appen din

  • Donasjoner eller noen få produkter: Payment Links. Se slik bygger du en donasjonsside for en ideell organisasjon.
  • En butikk med handlekurv: Checkout med varelinjer og en webhook. Se slik bygger du en nettbutikk.
  • SaaS eller medlemskap: Checkout i abonnementsmodus, webhooks og kundeportalen. Se slik bygger du en SaaS-MVP og slik prisetter du et SaaS-produkt.
  • Et markedsplass som betaler ut til selgere: et annet og mer regulert oppsett (Stripe Connect eller lignende). Planlegg det separat.

Legge til betalinger i Mythex

Betalinger i apper du bygger på Mythex bruker din egen Stripe-konto og dine egne nøkler. Det finnes ingen «Koble til Stripe»-knapp for appen din. Vanlig flyt:

  1. Hent Stripe-testnøkler.
  2. Legg til STRIPE_SECRET_KEY (og webhook-hemmeligheten senere) i prosjektets hemmeligheter. Det gjør du via /secrets, prosjektinnstillingene, eller hemmelighetskortet agenten viser når den trenger en nøkkel.
  3. Be agenten om Checkout med en ledetekst som den over.
  4. Test i forhåndsvisningen med testkort. Publiser før du registrerer webhooken, fordi den krever den offentlige URL-en din.
  5. Etter bytte til live-nøkler publiserer du på nytt, slik at den live appen henter dem.

Se Ta betalinger med Stripe og Håndter webhooks i backenden din i dokumentasjonen.

Spørsmål

Hva er den enkleste måten å ta betalinger i en app på?

En Stripe Payment Link krever ingen kode: du lager den i Stripe-dashbordet og lenker til den fra appen din. Hvis appen din må vite hvem som har betalt og låse opp noe automatisk, bruk Stripe Checkout med en webhook i stedet.

Trenger jeg en webhook for å ta betalinger?

Hvis appen din må reagere på en betaling, for eksempel låse opp en konto, merke en bestilling som betalt eller håndtere en fornyelse, så ja. Stripes dokumentasjon sier at du ikke kan stole på suksessiden alene, fordi en kunde kan betale og aldri nå den. Webhooks kreves også for abonnementer.

Hvordan tester jeg betalinger uten ekte penger?

Bruk Stripes sandkasse-API-nøkler (test) og testkortnumrene, for eksempel 4242 4242 4242 4242 med en fremtidig utløpsdato og en tresifret CVC. Testtransaksjoner flytter ikke ekte penger.

Håndterer Stripe merverdiavgift og salgsskatt for meg?

Stripe Tax kan beregne og innkreve skatt i kassen og overvåke hvor du kan ha plikt til å registrere deg. Likevel har du selv ansvaret for skatteplikten din. Snakk med en regnskapsfører om din situasjon.

Mythex · Pricing · Bygg hva som helst med KI · Maler for nettsider og apper · Mythex sammenlignet · Ordliste for app-bygging med KI · Gratis verktøy for app-bygging med KI · English

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