Gå til innhold

NETS BBS betalingsløsning. SESSION blir tømt når jeg returnerer fra 3D secure.


Anbefalte innlegg

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
Videoannonse
Annonse

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 av Lanes
Lenke til kommentar
  • 4 uker senere...

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 av Yawa
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...