Yawa Skrevet 30. september 2014 Del Skrevet 30. september 2014 Jeg sliter med at session blir tømt når kunden blir returnert fra 3D secure etter at de har tastet inn kortdata, eller avbryter handelen. Her er koden som blir kjørt når kunden velger Visa/MasterCard som betalingsmetode: $TotalSum = round($_SESSION['order']->TotalSum()*1.25); // Orderens totalbeløp inkl. mva $BBS = new BBSPayment( "ordre beskrivelse", // transaksjonsbeskrivelse "https://www.domene.tld/?side=returner-hit-etter-betaling", // Link til hvor kunden skal sendes etter betaling $TotalSum*100, // beløp som kunden skal betale $_SESSION['order']->nr() // vårt ordrenummer ); $transactionId = $BBS->register(); // start en ny transaksjons header('Location: https://epayment-test.bbs.no/terminal/default.aspx?merchantId='.$BBS->getMerchantId().'&transactionId='.$transactionId); // send kunden til betalings terminalen hos NETS exit; Kunden blir her sendt over til NETS sin betalingsterminal for å legge inn kortdata for å utføre betalingen. Etterpå blir de returnert tilbake til selskapets nettsted slik at de kan behandle ordren videre (håndtere eventuelle feilmeldinger, eller lagre nødvendig data til database samt vise en kviteringsside ved suksess). Men her oppstår komplikasjonene: Når kunden blir sendt tilbake til selskapets nettsted, så mangler all dataen som er lagret i SESSION. Nøklene er der, men ikke verdiene. Nøklene er rett og slett tomme. Resultatet blir at det ikke er mulig å behandle orderen videre da kundedetaljer, ordredetaljer samt tilhørende produkter kun blir lagret i session frem til betalingen er vellykket. Jeg har satt opp flere betalingsmåter, og de fungerer helt optimalt. Her er koden som kjøres når kunden returnerer tilbake fra 3D secure: if($_GET['responseCode'] == "OK"){ /** * mottar en responskode. Kan også være "Cancel" hvis brukeren velger å avbryte kjøpet. * Kjører en sjekk mot NETS igjen for å verefisere kjøpet basert på transaksjonen vi startet tidligere. */ $TotalSum = round($_SESSION['order']->TotalSum()*1.25); // Orderens totalbeløp inkl. mva $BBS = new BBSPayment( "ordre beskrivelse", // transaksjonsbeskrivelse "https://www.domene.tld/?side=returner-hit-etter-betaling", // Link til hvor kunden skal sendes etter betaling $TotalSum*100, // beløp som kunden skal betale $_SESSION['order']->nr() // vårt ordrenummer ); $BBS->setTransactionId($_GET['transactionId']); // lagre transaksjons id mottatt fra NETS $responseCode = $BBS->processAuth(); // sjekk betalingsstatus if($responseCode == "OK"){ $PaymentOK = true; // eget flagg som lar skriptet fortsette hvis betalingen ble godkjent. } else { $authResponse = $responseCode->detail->BBSException->Result->ResponseCode; switch($authResponse){ /* håndter de forskjellige feilkodene */ } header("Location: ?side=handlekurv"); // send kunde tilbake til handlekurven } } else { // Noe var feil med inntastet kortinfo, eller kunden valgte å avbryte kjøpet /** * Etter min forståelse, så er følgende kode ment for å ta vare på transaksjons id'en slik at kunden kan gjøre et nytt forsøk med samme ID. */ $TotalSum = round($_SESSION['order']->TotalSum()*1.25); // Orderens totalbeløp inkl. mva $BBS = new BBSPayment( "ordre beskrivelse", // transaksjonsbeskrivelse "https://www.domene.tld/?side=returner-hit-etter-betaling", // Link til hvor kunden skal sendes etter betaling $TotalSum*100, // beløp som kunden skal betale $_SESSION['order']->nr() // vårt ordrenummer ); $BBS->setTransactionId($_GET['transactionId']); // lagre transaksjons id mottatt fra NETS header("Location: ?side=handlekurv"); // send kunde tilbake til handlekurven } Så. Er det noen her på forumet som er kjent med NETS betalingsløsning. Og hvordan dette skal settes opp skikkelig. Selskapet har et skreddersydd nettsted, samt ordrehåndtering, da de ikke oppererer med ordinære forbruksvarer. Men med varer som krever en del tilleggsdata samt oppfølging i etterkant.. Så det å gå over til en ferdig nettbutikkløsning er ikke aktuelt. Håper noen kan bringe litt lys over denne problemstillingen min: Hvorfor SESSION verdiene blir tømt når kunden returnerer tilbake fra 3D secure/NETS BBS? Det rare er at jeg kan navigere rundt på nettstedet, etter jeg har returnert, som om jeg hverken har logget inn, eller lagt til noen varer i handlekurven. Men så fort jeg navigerer meg inn på handlekurven, så popper alt tilbake. Jeg er plutselig logget inn, varer i handle kurven, leverings- og faktureringsadresse er tilgjenglig, betalings- og leveringsmetode er satt igjen. All data er som før... Lenke til kommentar
Crowly Skrevet 1. oktober 2014 Del Skrevet 1. oktober 2014 Har ingen erfaring med dette, men SESSION tilhører kun den serveren du er på. Mulig det blir byttet server/adresse slik at man må se på "cross domain session" oppsett. Mulig det er noe nyttig her: http://stackoverflow.com/questions/13806701/secure-and-flexible-cross-domain-sessions Lenke til kommentar
Lanes Skrevet 2. oktober 2014 Del Skrevet 2. oktober 2014 (endret) Virker nesten som du har glemt å starte session på den aktuelle siden. Siden PHP er stateless er du nødt til å starte session handler ved hver request. Edit: Strengt tatt vet jeg ikke om PHP er stateless, men webtjenester uten 'persistent' tilkobling til serveren blir vel det. Tynn is nå.. Endret 2. oktober 2014 av Lanes Lenke til kommentar
Yawa Skrevet 26. oktober 2014 Forfatter Del Skrevet 26. oktober 2014 (endret) nei nei. session var startet.. men bare at det var to forskjellige sessions som ble startet.. Jar har sørget for at alle forespørsler nå benytter seg av "www", så det funker nå I tilleg til å tvinge google til å ikke starte en ny session når man blir videresendt til 3d secure... Endret 26. oktober 2014 av Yawa Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå