Bekreft betalinger på en sikker måte
Stol på serveren, ikke klienten.
Bekreft betalinger på en sikker måte er en gratis leksjon i Vibe-koding på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Vibe-koding, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Vibe-koding inneholder totalt 4 leksjoner.
Ikke stol på noe fra klienten
Gullregelen for betalingssikkerhet er at klienten kan lyve. En suksessside, en spørringsparameter eller en JavaScript-tilbakemelding — alt kan forfalskes eller spilles av på nytt av en målrettet bruker.
Tilgang og oppfyllelse må avgjøres av signaler De kan stole kryptografisk på, som kommer fra leverandørens servere, aldri fra brukerens nettleser.
Bekrefte webhook-signaturer
Webhooker kommer til en offentlig URL, så hvem som helst kan sende falske hendelser til den med POST. Leverandører signerer hver webhook med en hemmelighet som bare De og leverandøren kjenner.
Bekreft alltid signaturen før De stoler på innholdet. En usignert eller feil signert forespørsel må avvises umiddelbart — denne ene kontrollen blokkerer det vanligste betalingsangrepet.
Write a webhook endpoint that verifies the Stripe-Signature header using my webhook signing secret before processing the event. If verification fails, return 400 and do nothing. Explain exactly what attack this prevents.Bekreft beløp og valuta
Selv en ekte, signert hendelse må kontrolleres mot forventningene Deres. Bekreft at beløpet og valutaen samsvarer med det ordren skulle koste.
Hvis en ordre på $9 rapporterer en betaling på $0.50, må den avvises. Signaturen beviser at meldingen kommer fra leverandøren; kontroll av beløpet beviser at kunden betalte det vedkommende skylder.
In my checkout.session.completed handler, after verifying the signature, look up the expected price for the order from my database and confirm the paid amount and currency match before granting access. Show the rejection path if they differ.Idempotent behandling av webhooker
Leverandører leverer webhooker minst én gang, noe som betyr at duplikater er normalt. Hvis håndteringen Deres gir kreditter eller forlenger et abonnement, kan behandling av samme hendelse to ganger føre til reell skade.
Registrer hver hendelses-ID De har behandlet, og hopp over gjentakelser. Gjør håndteringen trygg å kjøre et hvilket som helst antall ganger for den samme hendelsen.
Make my webhook handler idempotent: store each processed event ID in a table, and at the start of the handler skip any event ID already seen. Show the race-safe insert so two simultaneous deliveries can't both process the event.Avstem, ikke anta
Bekreftelse betyr å sammenligne leverandørens oppføring med Deres egen. Hent det autoritative objektet — betalingsintensjonen eller abonnementet — og sammenlign statusen med det De forventer, før De utfører en handling.
Hvis De henter data på nytt fra leverandørens API inne i håndteringen, lukker De gapet mellom en mulig foreldet hendelse og den gjeldende virkeligheten.
After receiving a payment webhook, re-fetch the PaymentIntent from Stripe by ID and confirm its status is 'succeeded' before fulfilling, rather than trusting the event payload alone. Explain when the live object and the event can disagree.Svar raskt, behandle trygt
Leverandører forventer et raskt 2xx-svar, ellers prøver de på nytt og skaper dupliserte leveranser. Bekreft mottaket raskt, og utfør deretter tungt arbeid asynkront.
Mønsteret er: bekreft signaturen, legg hendelsen i en kø, og returner 200. En bakgrunnsarbeider utfører oppfyllelsen. Dette holder endepunktet pålitelig under belastning og ved langsomme operasjoner.
Refactor my webhook so it verifies the signature, pushes the event onto a job queue, and immediately returns 200. A separate worker does fulfilment. Explain why slow inline processing causes Stripe to retry and create duplicates.Hold hemmeligheter ute av koden
API-nøkler, webhook-hemmeligheter og signeringsnøkler er legitimasjon. Hvis De hardkoder dem i kildekoden eller sender dem til klienten, ligger et sikkerhetsbrudd og venter på å skje.
Oppbevar dem i miljøvariabler eller en hemmelighetstjeneste. Den hemmelige nøkkelen må bare finnes på serveren Deres; klienten får den publiserbare nøkkelen, som det er trygt å eksponere.
Audit my payment integration for leaked secrets: confirm the secret key and webhook signing secret are read from environment variables and never bundled into client code. Show the correct split between publishable and secret keys.Håndtere tilbakebetalinger og tvister
Penger kan også bevege seg bakover. En tilbakebetaling eller en kortreklamasjon bør tilbakekalle tilgang eller justere tilganger, utløst av webhook-hendelser som charge.refunded og charge.dispute.created.
Hvis De bare håndterer betalingen og ignorerer reverseringen, beholder en kunde som har fått tilbakebetaling betalte funksjoner gratis. Koble de bakoverrettede hendelsene til systemet med samme grundighet som de fremoverrettede.
Handle charge.refunded and charge.dispute.created webhooks: when a payment is reversed, revoke the matching entitlement and log it. Show how to find which user and order the refund corresponds to so I revoke the right access.Logging og revisjon
Når penger er involvert, trenger De et uforanderlig spor. Logg hver mottatte webhook, hver beslutning om oppfyllelse og hver endring i tilganger, med tidsstempler og ID-er.
Dette revisjonsloggen er Deres forsvar i en tvist og det raskeste feilsøkingsverktøyet når en kunde sier «Jeg betalte, men har ingen tilgang». Logg aldri rå kortdata, bare referanser.
Feil på en trygg måte
Når bekreftelsen mislykkes — feil signatur, avvikende beløp eller ukjent ordre — er det trygge standardvalget å nekte tilgang og varsle Dem selv, ikke å gi tvilen tiltalte.
Et betalingssystem bør feile lukket. Et falskt negativt resultat plager én kunde som De kan hjelpe manuelt; et falskt positivt resultat gir bort produktet eller inviterer til svindel.
Review my webhook handler's failure paths and make it fail closed: any verification or lookup failure denies access, logs the incident, and alerts me, rather than defaulting to granting access. List every branch that could accidentally grant access on error.En sjekkliste for bekreftelse
Bekreft kjeden før De går live: signaturen er bekreftet, beløp og valuta samsvarer, hendelsen er behandlet idempotent, leverandørobjektet er avstemt, hemmeligheter ligger i miljøvariabler, tilbakebetalinger håndteres, og feil fører til at systemet feiler lukket.
Be AI-assistenten Deres om å revidere integrasjonen mot denne listen. Hvert manglende punkt er en dør en angriper eller en feil kan gå gjennom.
Audit my entire payment integration against this checklist and report any gaps: webhook signature verified, amount and currency validated, idempotent event handling, provider-side reconciliation, secrets in environment variables, refund and dispute handling, and fail-closed on errors.Hurtigsjekk
Bekreft hva alle webhook-håndterere må gjøre først.
Oppsummering
Trygg bekreftelse innebærer å stole bare på leverandørens signerte signaler fra serversiden. Bekreft signaturen til hver webhook, kontroller deretter beløp og valuta, behandle hendelser idempotent, og avstem mot det gjeldende leverandørobjektet før De gir tilgang.
Oppbevar hemmeligheter i miljøvariabler, svar raskt og behandle asynkront, håndter tilbakebetalinger og tvister ved å tilbakekalle tilgang, logg et revisjonsspor, og la systemet alltid feile lukket. Kjør hele sjekklisten før De går live.
Lær deg JavaScript med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 25
- Leksjoner
- 100
Ofte stilte spørsmål
Er leksjonen «Bekreft betalinger på en sikker måte» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Vibe-koding, inkludert «Bekreft betalinger på en sikker måte», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Vibe-koding inneholder totalt 4 leksjoner.
Hva lærer jeg i «Bekreft betalinger på en sikker måte»?
Stol på serveren, ikke klienten. Du øver på Vibe-koding med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Vibe-koding?
Ingen tidligere erfaring er nødvendig. Vibe-koding på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Bekreft betalinger på en sikker måte»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Vibe-koding-leksjonen?
Ja. Alle Vibe-koding-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Betalingsbegreper
- Sett opp en utsjekking
- Administrer abonnementer
- Bekreft betalinger på en sikker måte