Historisk: Paynet-integrasjon i Billig

Se Billig PayEx for nåværende betalingsløsning. Resten av dette dokumentet er å betrakte som historisk informasjon. (Merk at vi nå ønsker å ta imot VISA-kortnummer selv. (-: )

www.samfundet.no (se Billig dave) bruker Paynet for å behandle kortdata; vi ønsker rett og slett ikke å ta imot VISA-kortnummer selv, da dette ville stille helt andre krav til sertifisering rundt sikkerhet i database o.l.. (De færreste ITKere ville vel stå ansvarlig for å ha mistet noen titalls tusen VISA-kortnummer.)

Generelt overblikk

Når en kjøper skal betale ordren sin på www.samfundet.no, blir den først opprettet i databasen via create_purchase() (se Billig database) av LIMs PHP-script der. Deretter blir brukeren sendt videre (med en redirect) til Paynet, hvor det også kommer med parametre som total pris o.l.. (Dette betyr at brukeren i prinsippet kan endre på prisen for sin egen ordre, men det blir sjekket seinere mot dataene i databasen, så det er ikke noe problem for vår del.) Det sendes også med et parameter kalt PMD (Paynet Merchant Data) som er vår referanse i systemet; dette inneholder alle referansenumrene og litt annet, og hjelper oss å tracke billettene når brukeren kommer tilbake fra Paynet.

Paynet tar så imot kortdata fra brukeren, verifserer at det er nok penger på kortet o.l., og sender så transaksjonen videre til Nordea, som henter penger og flytter dem over på vår konto (minus gebyrer fra begge parter). Deretter sendes brukeren tilbake til en «OK»-side (igjen på www.samfundet.no), samtidig som en bakgrunnsjobb begynner å sende en kvittering til Billig (på billig.samfundet.no/receipt). Idet kvitteringen (som er signert med en HMAC-lignende funksjon) når oss, blir den verifisert, og om alt stemmer blir ordren satt til betalt i databasen, og billettene er i praksis gyldige. (Scriptet lagrer også IRRN, som er Paynets interne referanse til transaksjonen.) Brukerens nettleser vil på sin side spinne på OK-siden (via litt AJAX) til dette har skjedd, slik at brukeren faktisk kan være sikker på at handelen er OK før brukeren får beskjed om det (se delen om timeout under).

OK-siden til LIM gir brukeren mulighet til å laste ned PDFer av billettene sine der og da (basert på PMD-parameteren som er blitt sendt gjennom systemet). Dersom en bruker mot formodning skulle f.eks. jukse med AJAXen, kan vedkommende med andre ord få ut billetter, men disse er ikke markert som betalt i databasen, og følgelig temmelig ubrukelige for innslipp.

Dersom det er noe som helst rart med kvitteringen fra Paynet, blir den ikke godkjent, og det sendes ut en varselepost til en administrator. Merk også at dersom Paynet ikke klarer å få levert en kvittering, prøver de igjen med lengre og lengre delay til det enten har gått over et fast antall forsøk, eller den er blitt levert med en 200-returkode.

Epost

Det er kvitteringsscriptet som sender epost til den aktuelle brukeren; dette er ikke den eneste muligheten, men det er et rimelig logisk sted å ha det hele, og sikrer at vi alltid sender ut epost hvis og bare hvis transaksjonen er OK.

Timeout

For å unngå at folk kan kjøpe en billett og så aldri gå gjennom Paynet-delen (f.eks. bare lukke nettleseren sin), slik at den blir låst for evig, har vi en timeout-dæmon som kjører fra brukeren «mdb2»s cron hvert femte minutt. Denne finner ordre som er eldre enn ti minutter og fortsatt ubetalt, og setter den til timet ut (samt alle billettene på den som refundert, og uten tilknytning til noe kort). Dersom OK-siden til LIM får beskjed om at ordren har timet ut, vil den gi brukeren beskjed om dette og evt. muligheten til å prøve igjen (dersom ikke da billettene har gått ut i mellomtiden).

Dersom Paynet-kvitterings-scriptet mot formodning skulle motta betalingskvittering på en utgått ordre (fordi brukeren f.eks. har brukt veldig veldig lang tid på å komplettere ordren sin), kansellerer den transaksjonen der og da (se avsnittet under).

Refusjon o.l.

Paynet har et enkelt HTTP-grensesnitt (begrenset på IP) som tillater «followup» på enkelttransaksjoner. Vi bruker ikke dette per i dag (unntatt for å kansellere utgåtte kjøp; se over), men dersom man har IRRN for en transaksjon, kan man f.eks. refundere den (nyttig for masserefusjon o.l.).

Lenker: Start, billig, billig dave, billig generelt, billig payex

Mail: itk@samfundet.no | Telefon: 992 15 925 | Sist endret: 2012-02-14 00:34 | Revisjon: 4 (historie, blame) | Totalt: 1468 kB | Rediger