Vibe-programmering · Lektion

Bekræft betalinger sikkert

Stol på serveren, ikke klienten.

Lektion 4 af 413 trin

Bekræft betalinger sikkert er en gratis Vibe-programmering-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Vibe-programmering, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Vibe-programmering-kurset indeholder 4 lektioner i alt.

Stol ikke på noget fra klienten

Den gyldne regel for betalingssikkerhed er, at klienten kan lyve. En side for gennemført betaling, en forespørgselsparameter og et JavaScript-tilbagekald — alt kan forfalskes eller afspilles igen af en målrettet bruger.

Adgang og levering af produktet skal afgøres af signaler, du kan stole kryptografisk på, og som kommer fra udbyderens servere, aldrig fra brugerens browser.

Bekræftelse af webhook-signatur

Webhooks ankommer til en offentlig URL, så alle kan sende falske hændelser til den med POST. Udbydere underskriver hver webhook med en hemmelighed, som kun du og udbyderen kender.

Bekræft altid signaturen, før du stoler på nyttelasten. En anmodning uden signatur eller med forkert signatur skal afvises uden videre — denne ene kontrol blokerer det mest almindelige betalingsangreb.

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.

Bekræft beløb og valuta

Selv en ægte, signeret hændelse skal kontrolleres mod dine forventninger. Bekræft, at beløbet og valutaen svarer til det, ordren burde have kostet.

Hvis en ordre på 9 $ rapporterer en betaling på 0,50 $, skal du afvise den. Signaturen beviser, at beskeden kommer fra udbyderen; kontrol af beløbet beviser, at kunden har betalt 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 håndtering af webhooks

Udbydere leverer webhooks mindst én gang, hvilket betyder, at dubletter er normale. Hvis din handler tildeler kreditter eller forlænger et abonnement, kan behandling af den samme hændelse to gange gøre reel skade.

Gem ID'et for hver hændelse, du har behandlet, og spring gentagelser over. Gør din handler sikker at køre et vilkårligt antal gange for den samme hændelse.

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.

Afstem, antag ikke

Bekræftelse betyder, at du sammenholder udbyderens post med din egen. Hent det autoritative objekt — betalingsintentionen eller abonnementet — og sammenlign dets status med det, du forventer, før du handler.

Hvis du henter oplysningerne igen fra udbyderens API i handleren, lukker du forskellen mellem en muligvis forældet hændelse og den aktuelle virkelighed.

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 hurtigt, behandl sikkert

Udbydere forventer et hurtigt 2xx-svar, ellers prøver de igen, hvilket skaber dubletter. Kvitter hurtigt for modtagelsen, og udfør derefter det tunge arbejde asynkront.

Mønstret er: Bekræft signaturen, læg hændelsen i kø, og returnér 200. En baggrundsarbejder udfører leveringen af produktet. Det holder slutpunktet pålideligt under belastning og ved langsomme operationer.

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 hemmeligheder ude af koden

API-nøgler, webhook-hemmeligheder og signeringsnøgler er legitimationsoplysninger. Hvis du hardcoder dem i kildekoden eller sender dem til klienten, er det et sikkerhedsbrud, der bare venter på at ske.

Gem dem i miljøvariabler eller en hemmelighedshåndteringstjeneste. Den hemmelige nøgle må kun ligge på din server; klienten får den offentlige nøgle, som det er sikkert at 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åndtering af tilbagebetalinger og tvister

Penge kan også bevæge sig tilbage. En tilbagebetaling eller en tvist om en kortopkrævning bør tilbagekalde adgang eller justere adgangsrettighederne, udløst af webhook-hændelser som charge.refunded og charge.dispute.created.

Hvis du kun håndterer betalingen og ignorerer tilbageførslen, beholder en kunde, der har fået pengene tilbage, betalingsfunktionerne gratis. Forbind de bagudrettede hændelser lige så omhyggeligt som de fremadrettede.

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.

Logning og revision

Når penge er involveret, har du brug for et uforanderligt spor. Log hver modtaget webhook, hver beslutning om levering af produktet og hver ændring af adgangsrettigheder med tidsstempler og ID'er.

Denne revisionslog er dit forsvar i en tvist og dit hurtigste fejlfindingsværktøj, når en kunde siger "Jeg har betalt, men har ingen adgang". Log aldrig rå kortdata, kun referencer.

Sikker fejlhåndtering

Når en bekræftelse mislykkes — forkert signatur, uoverensstemmende beløb eller ukendt ordre — er den sikre standard at nægte adgang og gøre dig selv opmærksom på problemet, ikke at give nogen fordelen af tvivlen.

Et betalingssystem bør fejle lukket. Et falsk negativt resultat irriterer én kunde, som du kan hjælpe manuelt; et falsk positivt resultat giver dit produkt væk 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 tjekliste til bekræftelse

Bekræft kæden, før du går live: Signatur bekræftet, beløb og valuta stemmer, hændelse behandlet idempotent, udbyderens objekt afstemt, hemmeligheder i miljøvariabler, tilbagebetalinger håndteret, og fejl håndteres som lukket adgang.

Bed din AI-assistent om at gennemgå integrationen ud fra denne liste. Hvert manglende punkt er en dør, som en angriber eller en fejl kan gå igennem.

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.

Hurtigt tjek

Bekræft det første, som enhver webhook-handler skal gøre.

Opsummering

Sikker bekræftelse betyder, at du kun stoler på udbyderens signerede signaler fra serversiden. Bekræft signaturen på hver webhook, kontrollér derefter beløb og valuta, behandl hændelser idempotent, og afstem mod det aktuelle objekt hos udbyderen, før du giver adgang.

Opbevar hemmeligheder i miljøvariabler, svar hurtigt og behandl asynkront, håndtér tilbagebetalinger og tvister ved at tilbagekalde adgang, log et revisionsspor, og sørg altid for, at fejl lukker for adgangen. Kør hele tjeklisten, før du går live.

Gratis at komme i gang

Lær JavaScript med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
25
Lektioner
100

Ofte stillede spørgsmål

Er lektionen “Bekræft betalinger sikkert” gratis?

Ja — alle 3 lektioner i læringssporet Vibe-programmering, inklusive “Bekræft betalinger sikkert”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Vibe-programmering-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Bekræft betalinger sikkert”?

Stol på serveren, ikke klienten. Du øver dig i Vibe-programmering med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Vibe-programmering?

Der kræves ingen tidligere erfaring. Vibe-programmering på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Bekræft betalinger sikkert”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Vibe-programmering-lektion?

Ja. Alle Vibe-programmering-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Betalingskoncepter
  2. Opsæt en checkout
  3. Håndtér abonnementer
  4. Bekræft betalinger sikkert
← Tilbage til Vibe-programmering