Avatar billede m_rasmussen Nybegynder
21. august 2007 - 22:57 Der er 12 kommentarer og
1 løsning

Kvittering efter POST til betalingsgateway

Hej jeg har sat en indkøbskurv op på en hjemmeside og systemet virker fint.
Systemet er baseret på brug af session hvor jeg til slut har en side som udskriver en kvittering, sender kvitteringen pr. e-mail og indsætter køberen i db.
Jeg har efterfølgende sat en betalingsside ind, inden kvittering udskrives, som poster til betalingsgateway. Efter betalingen ender køberen på kvitteringssiden, men problemet er nu ikke er nogen informationer er omkring købet.
Så vidt jeg forstår det er det fordi den igangværende session brydes af betalingsgatewayen som der postes til.
Derfor søger jeg en metode til at fikse dette problem, altså dataen fra købet skal ende på kvitteringssiden efter betalingen er gennemført.
Avatar billede nielle Nybegynder
21. august 2007 - 23:09 #1
1) Inden at du sender brugeren videre til betalingsiden, skal du gemme orderen i databasen.
2) I den process får orderen et ordre-id, som du kan sende med til betaligssiden.
3) Når betalingen er godkendt laver batalingsiden et callback til din side, og levere order-id'et med.
4) Dette bruger du så til at udtrække oplysningerne om ordren til kviteringen (og til ekspederingen af ordren).

En yderlig fordel ved dette er at du efterfølgende har alle dine ordre liggende i basen istedet for sessions som forsvinder pist-væk når brugerne forlader dit site.
Avatar billede m_rasmussen Nybegynder
22. august 2007 - 12:51 #2
Jo tak - så giver det lidt mere forståelse for hvordan det virker.
Betyder det så at der skal opsættes en "temp" tabel hvor alle handelsinformationerne gemmes som har session id som unik nøgle hvor der på kvitteringssiden så kan trækkes en row med sessionid = orderid el. noget lign?
Jeg spørger på den måde fordi jeg godt forstår hvad du mener men ikke helt er klar over hvordan det skal sættes op...
Avatar billede nielle Nybegynder
22. august 2007 - 13:51 #3
Så længe det er usikkert om kunden å dit site ønsker at handle eller ej, bør du gemme ordreoplysningerne i en session.

I det øjeblik at kunden har besluttes sig, dvs. beslutter sig for at gå videre til betalingen, bør ordren gemmes i basen. I denne sammenhæng trækkes et entydigt ordrenummer. Du bør ikke bruge session id som ordre nummer:

1) Dels er det ikke læsevenligt (og ordrenummeret skal muligvis vises på kvitteringen).
2) Dels er det ikke nødvendigvis entydigt; under (meget) uheldige omstændigheder kan risikerer at session-id’er genbruges.

Faktisk bør du glemme alt om session-id lige så snart at kunden er begyndt på betalingen og det der sker efterfølgende.

Ordren bør ikke gemmes i en temporær database. Den bør så vidt muligt gemmes i al fremtid sådan at man altid efterfølgende kan gå ind og se hvad der blev købt, af hvem, og hvornår. Det vil være en hjælp ved eventuelle tvivlsspørgsmål og til det senere regnskab.
Avatar billede htx98i17 Professor
22. august 2007 - 15:15 #4
Din session vil ikke blive glemt, blot fordi du har været forbi en betalingsside et smut. Det gør den i hvert fald ikke ved alle de butikker jeg har lavet, så mon ikke du blot har en fejl 40 et sted...
Avatar billede m_rasmussen Nybegynder
22. august 2007 - 15:48 #5
Hmm ok - så må konstruere det anderledes end jeg har gjort.
Det jeg har gjort er at din session gemmes for så at blive slettet når ordren er gennemført.
Avatar billede htx98i17 Professor
22. august 2007 - 15:59 #6
Du kan på kvitteringssiden til sidst i scriptet godt destroy din session, hvis du er færdig med at bruge den. Du skal bare ikke destroy den på et forkert tidspunkt, for så vil det selvfølgelig ikke fungere.

Det jeg har gjort tit, er at registrere ordren i databasen lige inden at kunden sendes videre til betalingssiden. På den måde kan man redde flere ordrer i land.
Avatar billede nielle Nybegynder
22. august 2007 - 16:25 #7
Det der med om sessionen bliver glemt eller ej afhænger meget af hvordan shoppen er sammensat. Hvad der er muligt der, afhænger endvidere af hvordan betalingssitet fungerer.

Hvis der *altid* er et vindue åbent til shoppen vil session blive bevaret. Hvis man på noget tidspunkt forlader shoppen helt, vil session dø. Desuden afhænger det også af hvordan callbacket fra betalingssiden fungere - det er ikke sikkert at callback'et har adgang til session'en.

Uanset hvad så er det stadigvæk en rigtig god ide at gemme ordrene permanent i databasen.
Avatar billede nielle Nybegynder
03. september 2007 - 14:02 #8
Har du fået kigget på det?
Avatar billede nielle Nybegynder
11. september 2007 - 19:20 #9
??
Avatar billede perh Juniormester
16. september 2007 - 23:14 #10
Jeg har lige sat sådan en side op, og jeg bruger sessionIDet i accepturl:
<input type="hidden" name="acceptURL"  size="30" value="<?php echo $accepturl.htmlspecialchars(SID); ?>" />
det funker selv om jeg sender brugeren væk fra siderne for at taste kortoplysninger.
Har du husket session_start i toppen af kvitteringssiden?
Har du gemt alle oplysninger du skal bruge som $_SESSION['denskaljegbruge'] = detjegskalbruge;
Avatar billede nielle Nybegynder
07. oktober 2007 - 11:11 #11
m_rasmussen?
Avatar billede m_rasmussen Nybegynder
08. oktober 2007 - 09:31 #12
Hej.
Projektet med indkøbskurven har ligget stille et stykke tid og fik derfor heller ikke svaret tilbage på jeres kommentarer.
Har nu fået gjort det færdigt og det virker. Jeg gjorde brug af nogle af de råd jeg fik her fra. Jeg satte bl.a. en ny tabel op i databasen som midlertidigt gemmer oplysningerne for en pågælden handel som så gemmes hvis handlen gennemføres.
Tak for hjælpen til jer som har kommenteret på min tråd.
Avatar billede nielle Nybegynder
08. oktober 2007 - 18:23 #13
Så smide jeg et svar :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester