Vibe Coding · Lektion

Verifiera betalningar säkert

Lita på servern, inte klienten.

Lektion 4 av 413 steg

Verifiera betalningar säkert är en gratis lektion i Vibe Coding på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Vibe Coding, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Vibe Coding innehåller totalt 4 lektioner.

Lita inte på något från klienten

Den gyllene regeln för betalningssäkerhet är att klienten kan ljuga. En sida för lyckad betalning, en frågeparameter eller en JavaScript-callback — allt kan förfalskas eller spelas upp igen av en målmedveten användare.

Åtkomst och leverans måste avgöras av signaler som Ni kan lita på kryptografiskt och som kommer från leverantörens servrar, aldrig från användarens webbläsare.

Verifiera webhooksignaturer

Webhookar kommer till en offentlig URL, så vem som helst kan skicka falska händelser till den med POST. Leverantörer signerar varje webhook med en hemlighet som bara Ni och leverantören känner till.

Verifiera alltid signaturen innan Ni litar på nyttolasten. En osignerad eller felaktigt signerad begäran ska avvisas direkt — denna enda kontroll blockerar det vanligaste betalningsangreppet.

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.

Verifiera belopp och valuta

Även en äkta, signerad händelse måste kontrolleras mot Era förväntningar. Bekräfta att beloppet och valutan stämmer med vad beställningen skulle ha kostat.

Om en beställning på 9 USD rapporterar en betalning på 0,50 USD ska Ni avvisa den. Signaturen visar att meddelandet kommer från leverantören; beloppskontrollen visar att kunden betalade det som hen är skyldig.

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 webhookhantering

Leverantörer levererar webhookar minst en gång, vilket innebär att dubbletter är normala. Om Er hanterare tilldelar krediter eller förlänger en prenumeration kan två behandlingar av samma händelse orsaka verklig skada.

Registrera varje händelse-ID som Ni har behandlat och hoppa över upprepningar. Gör hanteraren säker att köra hur många gånger som helst för samma 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.

Stäm av, anta inte

Verifiering innebär att leverantörens post jämförs med Er egen. Hämta det auktoritativa objektet — betalningsavsikten eller prenumerationen — och jämför dess status med vad Ni förväntar Er innan Ni agerar.

Genom att hämta objektet på nytt från leverantörens API inuti hanteraren minskar Ni gapet mellan en eventuellt inaktuell händelse och den aktuella verkligheten.

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.

Svara snabbt, behandla säkert

Leverantörer förväntar sig ett snabbt 2xx-svar, annars försöker de igen och orsakar dubbla leveranser. Bekräfta mottagandet omedelbart och utför sedan det tunga arbetet asynkront.

Mönstret är: verifiera signaturen, lägg händelsen i en kö och returnera 200. En bakgrundsprocess utför leveransen. Detta håller slutpunkten tillförlitlig under hög belastning och vid långsamma 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.

Håll hemligheter borta från koden

API-nycklar, webhook-hemligheter och signeringsnycklar är autentiseringsuppgifter. Att hårdkoda dem i källkoden eller skicka dem till klienten är ett säkerhetsintrång som bara väntar på att inträffa.

Förvara dem i miljövariabler eller en secrets manager. Den hemliga nyckeln får endast finnas på servern; klienten får den publicerbara nyckeln, som det är säkert att exponera.

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.

Hantera återbetalningar och tvister

Pengar kan också flöda tillbaka. En återbetalning eller en kortreklamation bör återkalla åtkomst eller justera åtkomsterna, styrt av webhookhändelser som charge.refunded och charge.dispute.created.

Om Ni bara hanterar betalningen och ignorerar återföringen kan en kund som fått pengarna tillbaka fortsätta använda betalda funktioner gratis. Koppla in de bakåtriktade händelserna lika noggrant som de framåtriktade.

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.

Loggning och granskning

När pengar är inblandade behöver Ni ett oföränderligt spår. Logga varje mottagen webhook, varje leveransbeslut och varje ändring av åtkomster med tidsstämplar och ID:n.

Denna granskningslogg är Ert försvar vid en tvist och Ert snabbaste felsökningsverktyg när en kund säger "Jag betalade men har ingen åtkomst". Logga aldrig rå kortdata, utan endast referenser.

Misslyckas på ett säkert sätt

När verifieringen misslyckas — felaktig signatur, avvikande belopp eller okänd beställning — är det säkra standardvalet att neka åtkomst och meddela Er själva, inte att fria hellre än fälla.

Ett betalningssystem ska misslyckas stängt. Ett falskt negativt resultat irriterar en kund som Ni kan hjälpa manuellt; ett falskt positivt resultat ger bort produkten eller möjliggör bedrägeri.

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 verifieringschecklista

Bekräfta följande kedja innan Ni går live: signaturen är verifierad, belopp och valuta stämmer, händelsen har behandlats idempotent, leverantörsobjektet har stämts av, hemligheter finns i miljövariabler, återbetalningar hanteras och fel leder till stängd åtkomst.

Be Er AI-assistent granska integrationen mot denna lista. Varje punkt som saknas är en dörr som en angripare eller ett fel kan ta sig igenom.

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.

Snabb kontroll

Bekräfta det första som varje webhookhanterare måste göra.

Sammanfattning

Säker verifiering innebär att endast lita på leverantörens signerade signaler från serversidan. Verifiera signaturen för varje webhook, kontrollera sedan belopp och valuta, behandla händelser idempotent och stäm av mot det aktuella leverantörsobjektet innan Ni beviljar åtkomst.

Förvara hemligheter i miljövariabler, svara snabbt och behandla asynkront, hantera återbetalningar och tvister genom att återkalla åtkomst, logga ett granskningsspår och misslyckas alltid stängt. Kör hela checklistan innan Ni går live.

Gratis att börja

Lär dig JavaScript med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
25
Lektioner
100

Vanliga frågor

Är lektionen ”Verifiera betalningar säkert” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Vibe Coding, inklusive ”Verifiera betalningar säkert”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Vibe Coding innehåller totalt 4 lektioner.

Vad lär jag mig i ”Verifiera betalningar säkert”?

Lita på servern, inte klienten. Ni övar på Vibe Coding med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Vibe Coding?

Du behöver inga förkunskaper. Utbildningen i Vibe Coding på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Verifiera betalningar säkert”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Vibe Coding-lektionen?

Ja. Varje Vibe Coding-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Betalningsbegrepp
  2. Konfigurera en checkout
  3. Hantera prenumerationer
  4. Verifiera betalningar säkert
← Tillbaka till Vibe Coding