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å
| Alternativ | Krever kode | Vet appen din hvem som betalte? | Best for |
|---|---|---|---|
| Payment Links | Ingen | Bare hvis du legger til en webhook | Salg av noen få faste produkter, donasjoner, teste etterspørsel |
| Checkout (engangs) | Serverkode for å opprette en økt | Ja, via webhook | Butikker, digitale nedlastinger, enkeltkjøp |
| Checkout (abonnement) | Serverkode pluss håndtering av webhook | Ja, via webhook | SaaS, 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:
- Kunden klikker Kjøp i appen din.
- Serveren din oppretter en Checkout-økt med din hemmelige nøkkel, og inkluderer en ID som knytter økten til brukeren eller bestillingen.
- Kunden sendes videre til Stripe og betaler.
- Stripe sender kunden tilbake til suksesssiden din.
- Stripe sender en hendelse
checkout.session.completedtil 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
| Hendelse | Hva den betyr | Hva appen din gjør |
|---|---|---|
checkout.session.completed | Checkout er fullført | Marker bestillingen som betalt, eller start tilgang |
checkout.session.async_payment_succeeded | En forsinket metode (for eksempel en bankbelastning) gikk gjennom senere | Oppfyll nå |
checkout.session.async_payment_failed | Den forsinkede betalingen feilet | Si fra til kunden; ikke oppfyll |
invoice.paid | En abonnementsbetaling lyktes, inkludert fornyelser | Forleng tilgangen |
invoice.payment_failed | En fornyelse feilet | Varsle brukeren; Stripe kan prøve på nytt |
customer.subscription.updated | Plan er endret, eller kansellering er planlagt | Oppdater brukerens plan |
customer.subscription.deleted | Abonnementet er avsluttet | Fjern 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 medwhsec_). 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):
| Kortnummer | Resultat |
|---|---|
4242 4242 4242 4242 | Betalingen lykkes |
4000 0000 0000 0002 | Kortet blir avvist |
4000 0000 0000 3220 | Krever 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
- Aktiver Stripe-kontoen med virksomhets- og bankopplysninger.
- 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.
- Opprett et live-webhook-endepunkt som peker mot den publiserte appen din. Det har sin egen signeringshemmelighet, forskjellig fra test-hemmeligheten. Oppdater den.
- Opprett produkter og priser på nytt i live-modus. Test-modusens ID-er finnes ikke der.
- 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:
- Hent Stripe-testnøkler.
- 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. - Be agenten om Checkout med en ledetekst som den over.
- Test i forhåndsvisningen med testkort. Publiser før du registrerer webhooken, fordi den krever den offentlige URL-en din.
- 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.