Denne siden er arkivert, og kan inneholde utdatert, gammel eller feil informasjon.

Billig + Stripe

Januar 2023 ble Billig skrevet om til å bruke Stripe Checkout, etter ny innløseravtale med Stripe. Stripe utdøver mye større kontroll på hvordan et kjøp behandles etter at kunden har startet kjøpet enn det tidligere innløsere har gjort. Dette var med på å forenkle logikken vår en god del.

Oversikt

Kjøpsflyten er omtrent slik:

  1. I frontenden får brukeren mulighet til å velge antall billetter for hver prisgruppe, samt skrive inn epostaddressen sin/medlemsnummeret sitt. Denne informasjonen POSTes til betalingsbackenden (som ligger på en egen maskin med svært begrenset tilgang), med mål /pay.
  2. Dette skriptet sjekker at det er ledige billetter, og initialiserer kjøpet i databasen vår. Dette reserverer i praksis billetten til dette kjøpet enten blir avbrutt eller fullført.
  3. Skriptet sender så epostaddressen til brukeren, samt prisen for kjøpet videre til Stripe. Dette oppretter en Checkout Session. Når denne er opprettet, sendes kunden videre til Checkout Sessionen.
  4. I Checkout Sessionen velger kunden betalingsmetode og fullfører kjøpet.
  5. Kunden sendes videre til frontenden med en beskjed om at kjøpet var vellykket, og en lenke til å vise billettene.
  6. Stripe gjør så en request til oss på /callback og gir oss beskjed om at kjøpet var vellykket. Her registrerer vi kjøpet i databasen og sender ut billettene på epost.

Et oversiktlig sekvensdiagram over denne prossesen kan hentes fra dokumentasjonen til Stripe.

Dersom det på noe tidspunkt oppstår en feil i prosessen (alt fra ugyldig epostadresse til manglende penger på konto) blir brukeren sendt til frontendens feilside, med et session-parameter. Session-parameteret peker til en spesiell tabell i Billig-databasen hvor feilmelding ligger, samt nok informasjon til å rekonstruere handlekurven (slik at brukeren ikke trenger å gjøre det selv, men heller kan korrigere kun det som er feil).

Det kan når som helst skje at denne prosessen stopper, enten fordi brukeren går lei, fordi strømmen eller nettet går, eller andre årsaker man ikke har tenkt på. Det går derfor jevnlig et timeout-script (process-purchases) som tar ansvar for å rydde opp gamle ordre, og kansellere dem. Mer om dette under.

Detaljert informasjon om APIet fra frontendens side finnes i Billig frontend-API. Dokumentasjonen på Stripe-APIet finnes her: https://stripe.com/docs/api

Lenker: Start

Epost: itk@samfundet.no | Telefon: 992 15 925 | Sist endret: 2023-02-20 22:20 | Revisjon: 4 (historie, blame) | Totalt: 1888 kB | Rediger