Åben kurv

Introduktion

Med funktionen Åben kurv, kan du tilføje produkter til indkøbskurven via et GET- eller POST-request. Det kan f.eks. være et link i et nyhedsbrev, på sociale medier eller i en specifik forhandler- eller tilbudsmail mv. I afsnittene herunder kan du læse mere om, hvordan requests sammensættes og ting du skal være opmærksom på når du benytter Åben kurv.

Hemmelig nøgle

Kaldet til shoppen forsynes med en krypteret streng (hash), der benyttes til at validere kaldet. Den genererede hash indeholder produktinformation (se sektionen ItemHash) og valideres ved kald til shoppen med en hemmelig nøgle som oprettes i shoppens administration. På denne måde kan man sikre sig at strengen ikke kan ændres så priser osv. forbliver som forventet. Nøglen er en vilkårlig streng, som indsættes i shoppens administration, under Indstillinger > Shopindstillinger > Ordrer i sektionen Kurv:

  1. Åben kurv nøgle: Her kan du angive den hemmelige nøgle der benyttes til kryptering og validering af ItemHash. Benyt evt. kodegeneratorikonet til højre for feltet til at generere din nøgle:
  2. Åben kurv HMAC fejlbesked: Her har du mulighed for at ændre i den fejlbesked, som vises i kurven når validering af ItemHash fejler.

Bemærk: Når der er angivet en nøgle til funktionen åben kurv, kan alle med adgang til nøglen oprette kald til butikkens kurv, hvor de kan bestemme både navn og pris på produkter. Af sikkerhedsmæssige årsager anbefaler vi, at nøglen ændres ofte.

Sådan sammensætter du din request

Et request-parameter kaldet jsonbody, der indeholder data for produkter, som skal tilføjes til butikkens kurv, skal sendes i enten et GET- eller POST-request til endpointet.

Parameteret jsonbody består af et JSON-array i følgende format:
{items:[{"ProductNumber":"19","UnitPrice":2.34,"ItemHash":"f5c6d62996be2162cc90bd7234fe2253bd94ed2a","Quantity":1,"Variants":"Red;S","VariantGroups":"Color;Size"}]}

Attributterne Variants og VariantGroups for hvert element er kun for simple varianter. Ved flere værdier benyttes semikolon (“;”) som afgrænser.

Endpoint

Requests sendes til følgende endpoint:

/shop/showbasket.html?openBasket=1&HideCookieDialog=1

Parameteret HideCookieDialog er valgfrit, og forhindrer, at dialogboksen til cookie-samtykke åbnes.

Eksempel på GET-request

shoppens-domæne.../shop/showbasket.html?openBasket=1&HideCookieDialog=1&jsonbody={items:[{"ProductNumber":"19","UnitPrice":2.34,"ItemHash":"f5c6d62996be2162cc90bd7234fe2253bd94ed2a","Quantity":1,"Variants":"Red;S","VariantGroups":"Color;Size"}]}

ItemHash

  • ItemHash beregnes som en HMACSHA1 baseret på en streng, der er formateret således: {ProductNumber}:{Quantity}:{UnitPrice}:{ProductName}
  • Hvis ProductName ikke er en del af JSON, ser den streng, der skal hashes, således ud: {ProductNumber}:{Quantity}:{UnitPrice}
  • Hvis Price ikke er en del af JSON, ser strengen, der skal hashes, sådan ud: {ProductNumber}:{Quantity}:{ProductName}
  • Så, hvis de indsendte data f.eks. ser sådan ud: {items:[{"ProductNumber":"1","Quantity":2,"UnitPrice":100.50,ProductName":"test product"}]}
    -så skal den streng, der hashes, se således ud: 1:2:100,50:test product
  • Hashen af ovenstående streng ved hjælp af hemmelig nøgle “test” vil resultere i en hash med værdien 6dac5052e88012b8603289e3aa135f3598cdf5c1
  • Bemærk, at decimalafgrænseren i UnitPrice-delen af hash-strengen skal bruge kontinentaleuropæisk format (komma).
  • Bemærk, at UnitPrice-delen af hash-strengen skal formateres med to decimaler, f.eks. skal 100 formateres som 100,00 og 100,5 som 100,50.
  • Bemærk, at tegnene : er en del af den streng, der skal sendes til HMACSHA1-algoritmen.

C# eksempel på hash-kode


using var sha1 = new HMACSHA1(Encoding.UTF8.GetBytes("test"));
var hash = sha1.ComputeHash(Encoding.UTF8.GetBytes("1:2:100,50:test product"));
var itemHash = string.Join("", hash.Select(x => x.ToString("x2")));

GET VS POST

Når jsonbody sendes som en POST-forespørgsel, sætter klienten ikke nogen cookies, der er blevet sat i en eksisterende session, og som følge heraf vil en eksisterende kurv for den klient, der foretager forespørgslen, ikke eksistere (hvert POST vil være en ny kurv).
Når jsonbody sendes som en GET-request, genoptages den eksisterende session, og som følge heraf beholder klienten alle eksisterende produkter i kurven.

Vi anbefaler at bruge POST for at minimere risikoen for, at ItemHash bliver synlig i forespørgslen.

Værd at vide

  • Enhedspriserne i jsonbody er altid uden moms.
  • Moms vil blive tilføjet af shoppen baseret på leveringsland.
  • Priserne forventes at blive sendt i butikkens standardvaluta.
  • Hvis der findes en eksisterende klientsession for den klient, der udløser anmodningen, og denne session ikke bruger standardvaluta (brugeren har ændret valuta), vil den blive ændret til standardvaluta.

Du finder dokumentationen til Dandomain Webshop her: https://webshop-help.dandomain.dk x