Posts Tagged ‘fraktguide’

Fraktprismodul for Zen Cart og osCommerce

Sunday, March 1st, 2009

I de to siste helgene har jeg kost meg med å lage fraktmoduler til Zen Cart og osCommerce. Dette er populære open source nettbutikkløsninger som er basert på PHP har en felles historie (og nesten prikk lik teknologi for å lage fraktmoduler.)

Fraktmodulene benytter Bring Fraktguide som gir priser, dekningsområde, transporttider og produkttekster.

Fraktalternativer i Zen Cart

Eksempel på hvordan fraktalternativer ser ut i Zen Cart. I dette tilfellet er A-Post borte da innholdet i handlekurven er for tungt. Dersom man sender varene til et postnummer utenfor dekningsområdet for På Døren vil også dette alternativet automatisk tas bort

Merk! Disse modulene er et privat initiativ og “kick” fra min side. Det er på ingen måte et Bring eller Posten produkt. Modulene brukes helt og holdent på eget ansvar. Finner du feil – meld tilbake til forumene som er nevnt under, eller aller helst involver deg (jeg kan gi deg tilgang til prosjektet på Google Code) slik at modulene blir bedre!

Merk2! Du er velkommen til å bidra på modulene. De blir best av samarbeid!

Om integrasjonen med Bring Fraktguide

Fraktmodulene benytter Bring Fraktguide XML API som er et åpent RESTful grensesnitt som er svært lett å ta i bruk. Modulene benytter seg av prisberegning og produkttekster.

Koden under sender HTTP request til Fraktguiden og returnerer et SimpleXMLElement eller en feiltekst. Dette må man teste for i koden utenfor. Dette er et utdrag av en felles includefil som ligger både i modulene for Zen Cart og osCommerce. Lenke til hele filen i Google Code.

function getXmlForProducts($productCode, $from, $to, $weightInGrams) {
    $http = new httpClient();
    $http->timeout = 2;

    $request = join('&', array('from=' . $from,
                               'to=' . $to,
                               'weightInGrams=' . $weightInGrams));
    if ($http->Connect('fraktguide.bring.no', 80)) {
        $http->addHeader('Host', 'fraktguide.bring.no');
        $http->addHeader('User-Agent', 'Zen Cart');
        $http->addHeader('Connection', 'close');

        if ($http->Get('/fraktguide/products/' . $productCode . '/all.xml?' . $request)) {
            $body = $http->getBody();
            if ($http->reply == 200) {
                $result['xml'] = new SimpleXMLElement($body);
            } else {
                if (strpos($body, "FG_INPUT_021")) {
                    $result['error'] = "Oppgitt postnummer er ikke gyldig";
                } elseif (strpos($body, "FG_INPUT_021")) {
                    $result['error'] = "Vekt eller volum ikke oppgitt";
                } elseif (strpos($body, "FG_INPUT_002")) {
                    $result['error'] = "Feil format på oppgitt postnummer";
                } else {
                    $result['error'] = "Ikke tilgjengelig til oppgitt postnummer";
                }
            }
        }
        $http->Disconnect();
    }
    return $result;
}

httpClient er en klasse som følger med butikkløsningene. Bør raskt kunne byttes ut med alternativ klasse dersom du trenger koden til annet bruk

Tips til forbedringer av modulene

  • Bedre håndtering av volumberegnet vekt. Prisen på en pakke er mye avhengig av det fysiske volumet av pakken og ikke bare hvor mange fysiske kilo pakken er. Det fysiske volumet blir regnet om til volumvekt. Det høyeste av fysisk vekt og volumvekt blir benyttet som vekt når man slår opp prisen. Det er viktig at de som driver nettbutikker er oppmerksomme på dette
    • Alternativ 1 (quickfix): Benytt volumvekt og ikke fysisk vekt på varer som har stort volum. Noen issues her med dagens implementering av modulen da den kan tro at du kommer over 35 kilo. Grensen for å sende pakker 35 kilo fysisk vekt, men du kan selvfølgelig sende en pakke på 20 kilo fysisk vekt og 40 kilo volumvekt.
    • Alternativ 2 (best): Legg inn lengde, bredde og høyde på alle varene dine og modifiser fraktmodulen til å kalkulere pakkestørrelse og sende dette til Fraktuiden.
  • Benytte transporttider til noe fornuftig i Zen Cart og osCommerce. F.eks. vise det, oppgi forventet leveringsdato i leveringsbekreftelse e.l.