Åben indkøbskurv

I denne artikel:


Åben indkøbskurv

Med modulet åben indkøbskurv, kan du tilføje produkter til indkøbskurven via et link til shoppen. Det kan f.eks. være et link i et nyhedsbrev, på Facebook eller i en specifik forhandlermail mv.

Der er flere forskellige måder at strukturere linket på, alt efter hvilke parametre du ønsker at benytte. Parametre består af et parameter-navn og dets værdi (navn=værdi), som fortæller shoppen hvilke data du ønsker at arbejde med. Benytter du flere parametre i dit link, adskilles disse med et &-tegn, hvilket vi gennemgår i eksemplet herunder.

Shoppen kan modtage følgende parametre via link:

  • sku = Varenummer (kan være både produkt og/eller variant)
  • product = ID for produkt
  • variant = ID for variant (ved variant produkt)
  • amount = Antal (uden amount sættes værdien 1)

Bemærk: Linket skal enten indeholde "sku" eller "product" for at funktionen slår igennem.

Hvis man ønsker at linke direkte til et hovedprodukt, kan linket se således ud:

  • www.minshop.dk/actions/cart/add/?sku=A001&amount=1
  • www.minshop.dk/actions/cart/add/?product=99&amount=2

–Hvor "sku" er varenummeret (i dette tilfælde "A001"), "product" er produktets ID (i dette tilfælde "99"), og "amount" dikterer antallet der skal tilføjes kurven.

Hvis man ønsker at linke direkte til et produkt med varianter via produktets ID, skal linket se således ud:

  • www.minshop.dk/actions/cart/add/?product=99&variant=10&amount=1

–Hvor "99" er produktets ID, "10" er variantens ID, og "amount" dikterer antallet der skal tilføjes kurven.

Værd at vide: Rækkefølgen af parametre i linket er uden betydning.

 

Udvidet åben indkøbskurv

Denne funktion kan f.eks. benyttes til at sende et eller flere produkt-links til en kunde, med aftalt pris og antal. Da linket inkluderer en krypteret nøgle, er det ikke muligt at ændre værdierne efter linket er genereret og sendt til kunden.

Brug af udvidet åben indkøbskurv kan også være praktisk hvis du afgiver et tilbud, og ønsker at sende et link til kunden, så denne kan købe det specifikke tilbud via din webshop, uden at du på forhånd har oprettet specifikke produkter til formålet. Dette gøres ved at oprette et anonymt (generisk/universelt) produkt, som du efterfølgende via linket kan sætte titel, pris og varenummer på. Produktet er med andre ord bare en pladsholder for de informationer du angiver i linket. Dermed kan du generere forskellige links til det samme produkt i shoppen, som hver gang har forskellige priser og titler, og dermed agerer som et nyt produkt hver gang. Denne metode vil f.eks. også kunne benyttes af evt. sælgere og partnere som shoppen måtte have tilknyttet.

Udvidet åben indkøbskurv tilføjer nye parametre til den eksisterende funktionalitet i åben indkøbskurv. Parametrene er som følger:

  • title = Produkt titel
  • price = Produkt pris

Således forøges det mulige antal parametre til følgende når udvidet åben indkøbskurv er aktiveret:

  • title = Produkt titel
  • price = Produkt pris
  • sku = Varenummer (kan være både produkt og/eller variant)
  • product = ID for produkt
  • variant = ID for variant (ved variantprodukt)
  • amount = Antal (uden amount sættes værdien 1)

For at benytte den udvidede åbne indkøbskurv skal du aktivere indstillingen i administrationen under Kontrolpanel > Indstillinger > Produkter (nederst på siden):

  1. Udvidet åben indkøbskurv: Aktiverer funktionaliteten for udvidet åben indkøbskurv
  2. Tilladte IP-adresser (valgfri): Semikolonsepareret liste over tilladte IP-adresser. Dette er IP'en på klienten som linket til åben indkøbskurv kan benyttes af. Listen over IP-adresser hjælper med at forhindre misbrug af linket til åben indkøbskurv
  3. Hemmelig nøgle: En nøgle som indtastes, og derefter deles med den eksterne partner som ønsker at generere links til åben indkøbskurv. Den hemmelige nøgle er en sikring af de links der genereres, som validerer linkets indhold og derved sikrer at variablerne såsom titel og pris ikke kan ændres af slutbrugeren

 

Generering af kode-variabel ud fra hemmelig nøgle

For at benytte åben udvidet indkøbskurv, genereres en SHA-1 (en krypteret streng der benyttes som nøgle) ud fra <SHARED_SECRET> samt værdierne af de argumenter der sendes, i rækkefølgen de optræder i linket, hvor <SHARED_SECRET> er den indtastede kode i administrationen:

Eksempel link: www.minshop.dk/actions/cart/add/?product=99&variant=5&amount=1&price=349&title=Produkt A

Kode: 07FnpNB9Qk8q9951349Produkt A = 3ccdb019bfed4d98cf5f8f230aaf1d6e5ba61841

Ovenstående kode genereres ud fra følgende parametre, så fremt de er angivet:
Hemmelig nøgle: 07FnpNB9Qk8q
Produkt-ID (product): 99
Variant-ID (variant): 5
Antal (amount): 1
Pris (price): 349
Titel (title): "Produkt A"

Endeligt link: www.minshop.dk/actions/cart/add/?product=99&variant=5&amount=1&price=349&title=Produkt A&code=3ccdb019bfed4d98cf5f8f230aaf1d6e5ba61841

Værd at vide: Rækkefølgen af parametre i linket er uden betydning.

I kodeeksemplerne herunder viser vi hvordan ovenstående gøres programmatisk. Du kan også benytte vores eksempel længere nede i artiklen, til direkte at konfigurere dine parametre, og efterfølgende generere et komplet link.


    // Parameters
    NameValueCollection args = HttpUtility.ParseQueryString(string.Empty);
    args.Add("product", "99");
    args.Add("sku", "A001");
    args.Add("variant", "5");
    args.Add("title", "Produkt A");
    args.Add("price", "349");
    args.Add("amount", "1");
    args.Add("code", ""); // Leave blank for SHA-1
    // Secret (as entered in the shop administration)
    string secret = "SHARED_SECRET";
    // Join secret with parameters (out "SHARED_SECRET99A0015Produkt A3491")
    secret += string.Join("", args.AllKeys.Select(key => args[key]));
    // Generate SHA-1 (out "3bb989c215deaf74aa7ebac355aa766a2d2ff337")
    string hash = new SHA1Managed().ComputeHash(Encoding.UTF8.GetBytes(secret)).Aggregate(string.Empty, (x, y) => x + y.ToString("x2"));
    // Get URL with parameters and key
    string url = "https://www.minshop.dk/actions/cart/add/?" + args.ToString() + hash;
    // (out "https://www.minshop.dk/actions/cart/add/?product=99&sku=A001&variant=5&title=Produkt+A&price=349&amount=1&code=3bb989c215deaf74aa7ebac355aa766a2d2ff337")

    

    $args = [
    'product' => 99,
    'variant' => 5,
    'amount' => 1,
    'price' => 349,
    'title' => 'Produkt A'
    ];

    $args['code'] = sha1(SHARED_SECRET . implode($args));

    $url = 'https://www.minshop.dk/actions/cart/add/?' . http_build_query($args);

 

Lav dit eget link (link generator)

Hvis du ønsker at konfigurere dine parametre, og efterfølgende generere et komplet link inkl. SHA-1 til udvidet åben indkøbskurv, kan du gøre dette helt uden programmeringserfaring, ved at benytte følgende metode.

Dette gør du ved at kopiere kodestumpen herunder og indsætte den i LinqPad, der er et gratis værktøj til afvikling af kode. Kodestumpen samler dine parametre samt den hemmelige nøgle, og genererer en SHA-1 nøgle til brug i linket. Herefter bygger koden det færdige link til dig. Koden tager højde for specialtegn i din titel og undlader parametre som ikke har angivet nogen værdi. Du kan downloade softwaren her (vælg LinqPad 5).

Når du har indsat kodestumpen i LinqPad, kan du ændre værdierne som beskrevet i kommentarerne i koden:


    // Deklaration af variabler
    string ProduktId, VariantId, Antal, Pris, VareNr, Titel, HemmeligNoegle, Domaene, Protokol;

    /*** START ***/
    // 1. Indsæt dine parameterværdier imellem citationstegnene:
    ProduktId = "99";
    VareNr = "A001";
    VariantId = "5";
    Titel = "Produkt A";
    Pris = "349";
    Antal = "1";
    // Bemærk: Undlad værdier til parametre du ikke ønsker medtaget i linket ("")

    // 2. Indsæt din hemmelige nøgle fra shoppen imellem citationstegnene:
    HemmeligNoegle = "hemmelig";

    // 3. Indsæt dit domæne imellem citationstegnene:
    Domaene = "www.minshop.dk";

    // 4. Hvis du benytter SSL kan du lade følgende værdi være,
    // og hvis ikke, skal den ændres til "http://", altså uden s'et:
    Protokol = "https://";

    // 5. Tast F5 på dit tastatur, eller klik på "play knappen" i topmenuen af LinqPad
    // -herefter køres koden, og det genererede link vises i Results vinduet
    /*** SLUT ***/

    // Koden herunder håndterer validering og konvertering af værdier til SHA-1, samt opbygning af komplet URL
    // (reference til System.Web.dll (HttpUtility) udeladt for umiddelbar afvikling i LinqPad)
    System.Collections.Specialized.NameValueCollection args = new System.Collections.Specialized.NameValueCollection();
    if (!string.IsNullOrEmpty(ProduktId)) {args.Add("product", ProduktId);}
    if (!string.IsNullOrEmpty(VareNr)) {args.Add("sku", VareNr);}
    if (!string.IsNullOrEmpty(VariantId)) {args.Add("variant", VariantId);}
    if (!string.IsNullOrEmpty(Titel)) {args.Add("title", Titel);}
    if (!string.IsNullOrEmpty(Pris)) {args.Add("price", Pris);}
    if (!string.IsNullOrEmpty(Antal)) {args.Add("amount", Antal);}
    args.Add("code", ""); // Benyttes til SHA-1
    HemmeligNoegle += string.Join("", args.AllKeys.Select(key => args[key]));
    string hash = new System.Security.Cryptography.SHA1Managed().ComputeHash(
        Encoding.UTF8.GetBytes(HemmeligNoegle)).Aggregate(string.Empty, (x, y) => x + y.ToString("x2"));
    IEnumerable<string>
        segments = from key in args.AllKeys
        from value in args.GetValues(key)
        select string.Format("{0}={1}",
        System.Net.WebUtility.UrlEncode(key),
        System.Net.WebUtility.UrlEncode(value));
    string url = Protokol + (Domaene = Domaene.Replace("/", "")) + "/actions/cart/add/?" + string.Join("&", segments) + hash;
    url.Dump();
    

 

Start LinqPad og indsæt kodestumpen:

  1. Indsæt og tilpas dine værdier (produkt ID, pris osv.) i editoren
  2. Klik på start knappen, eller tast F5 på dit tastatur, for at køre koden
  3. Det genererede link vil fremkomme i Results vinduet, i bunden af LinqPad.

Du kan efterfølgende gemme dit dokument i LinqPad, og oprette kopier mv. til senere brug.

 

Fejlsøgning

Hvis kald med åben indkøbskurv fejler, kan det give en af følgende beskeder:

  • Ugyldig åben indkøbskurv kode: Den genererede SHA-1 matcher ikke de data shoppen forventer. Det kan f.eks. være hvis man har ændret et parameter/værdi, eller den hemmelig kode, og har glemt at generere en ny SHA-1 nøgle.
  • Produktet findes ikke: Produkt ID (product) eller Varenummer (sku) findes ikke. Hvis du benytter både "product" og "sku" i samme link, skal begge stemme med produktet, før produktet kan fremfindes. Hvis der er angivet et variant ID (variant), men produktet ikke har nogen varianter, ignoreres dette og hovedproduktet lægges i kurv.
  • Husk at vælge antal: Hvis linket indeholder parameteret "variant", og dette ikke matcher variant ID'et på det valgte produkt.
  • Dette produkt er ikke på lager og kan derfor ikke bestilles: Hvis produktet er sat til ikke at kunne sælges med 0 i lagerantal, lægges varen i kurven med denne besked.
  • Hvis dit link bringer dig til forsiden af shoppen, i stedet for at lægge varen i kurven, skal du gennemgå linket for fejl.