Nødsituation

Ved akutte situationer eller nedbrud kan du sende en SMS til vores vagttelefon

Vagttelefon (kun SMS)

+45 29 70 15 95

Send en SMS med følgende information:

  • Dit navn og webshop
  • Beskrivelse af problemet
  • Dit telefonnummer for tilbageringning

Bemærk: Denne service er kun til kritiske situationer hvor din webshop er nede eller har alvorlige problemer. For almindelig support, brug venligst vores normale supportkanaler.

OAuth Integration

Byg sikre integrationer med Shoporama API ved hjælp af OAuth 2.0

Hvad er OAuth?

OAuth gør det muligt for eksterne applikationer at få sikker adgang til Shoporama API'et på vegne af dine brugere, uden at de skal dele deres login-oplysninger.

Sikker

Ingen deling af passwords. Brugerne logger ind direkte hos Shoporama

Nem integration

Standard OAuth 2.0 flow som du kender fra andre tjenester

Fleksibel

Vælg præcist hvilke rettigheder din app skal have

OAuth Flow - Trin for trin

1

Send bruger til Shoporama

Din app sender brugeren til Shoporamas OAuth endpoint

https://www.shoporama.dk/admin/oauth/login?
  client_id=Din_App_Navn
  redirect_uri=https://example.com/callback
  state=unik_session_id
2

Bruger logger ind

Brugeren logger ind med sine Shoporama credentials og vælger:

  • Hvilken shop der skal gives adgang til
  • Adgangsniveau (Læs, Skriv, eller Fuld)

Tokenet knyttes til brugeren. Har brugeren fået en anden rolle end Fuld adgang på webshoppen, kan tokenet kun det, rollen giver adgang til, uanset adgangsniveau. Se Adgangsniveau og brugerens rolle.

3

Modtag API token

Efter godkendelse sendes brugeren tilbage til din app med token:

https://example.com/callback?
  token=79a25b2709c9a7742bcb...
  shop_url=demo.shoporama.dk
  shop_name=Demo Shop
  api_endpoint=https://www.shoporama.dk/REST
  webshop_id=1
  access_level=all
  state=unik_session_id
4

Brug API'et

Brug token til at kalde Shoporama API:

curl -H "Authorization: 79a25b2709c9a7742bcb..." \
     https://www.shoporama.dk/REST/product

Klar til at komme i gang?

Start med at teste OAuth flowet eller læs mere om API'et

Komplette Implementeringseksempler

Fuld OAuth flow implementation - klar til copy/paste

Vanilla PHP Implementation

Ren PHP uden frameworks - en enkelt fil der håndterer hele OAuth flowet

<?php
// oauth.php - Gem denne fil på din server
session_start();

// Konfiguration - RET DISSE VÆRDIER
$CLIENT_ID = "Dit App Navn";
$REDIRECT_URI = "https://din-side.dk/oauth.php";
$OAUTH_URL = "https://www.shoporama.dk/admin/oauth/login";

// Start OAuth
if (isset($_GET["login"])) {
    $_SESSION["state"] = bin2hex(random_bytes(16));
    $url = $OAUTH_URL . "?" . http_build_query([
        "client_id" => $CLIENT_ID,
        "redirect_uri" => $REDIRECT_URI,
        "state" => $_SESSION["state"]
    ]);
    header("Location: $url");
    exit;
}

// Modtag token
if (isset($_GET["token"]) && $_GET["state"] === $_SESSION["state"]) {
    $_SESSION["token"] = $_GET["token"];
    $_SESSION["api_url"] = $_GET["api_endpoint"];
    echo "Success! Token gemt.";
    echo "
Test API"; exit; } // Test API if (isset($_GET["test"]) && isset($_SESSION["token"])) { $ch = curl_init($_SESSION["api_url"] . "/product?limit=1"); curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: " . $_SESSION["token"]]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); echo "
" . htmlspecialchars($result) . "
"; exit; } // Start side echo "Login med Shoporama"; ?>

Sådan bruger du det:

  1. Kopier koden til en fil kaldet oauth.php
  2. Ret $CLIENT_ID og $REDIRECT_URI
  3. Upload filen til din server
  4. Besøg siden og klik "Login med Shoporama"

Fejlfinding & Almindelige problemer

Almindelige OAuth fejl

access_denied

Brugeren afviste adgang. Vis en venlig besked og lad dem prøve igen.

invalid_client

Ukendt client_id. Tjek at din app navn er korrekt.

invalid_redirect_uri

Redirect URI matcher ikke. Skal være præcis samme URL.

state_mismatch

State parameter matcher ikke. Muligt CSRF angreb eller session timeout.

API fejl

401 Unauthorized

Token er ugyldig, udløbet, eller tilbagekaldt, fx fordi brugeren er fjernet fra shoppen. Bed brugeren om at logge ind igen. Er brugeren fjernet fra shoppen, skal en anden bruger med adgang til shoppen forbinde appen.

403 Forbidden

Tokenet må ikke foretage kaldet. Feltet error i svaret er insufficient_scope, hvis adgangsniveauet ikke tillader metoden, og insufficient_role, hvis rollen hos brugeren bag tokenet ikke giver adgang. Feltet message forklarer hvorfor.

429 Too Many Requests

Rate limit nået. Vent før næste request.

500 Server Error

Intern fejl. Prøv igen senere eller kontakt support.

Debug tips

Test med OAuth Test Client

Brug vores test client til at verificere din OAuth flow fungerer korrekt.

Test OAuth Flow →

Log alle parametre

Log state, token og andre parametre for at debugge problemer.

Sikkerhed & Best Practices

Token opbevaring

  • • Gem aldrig tokens i cookies eller localStorage
  • • Brug server-side sessions eller krypteret database
  • • Krypter tokens før opbevaring
  • • Slet tokens når de ikke bruges længere

CSRF beskyttelse

  • • Brug altid state parameter
  • • Generer unik state for hver session
  • • Verificer state i callback
  • • Timeout state efter kort tid

HTTPS påkrævet

  • • Brug kun HTTPS for redirect_uri
  • • Alle API kald skal være over HTTPS
  • • Undtagelse: localhost til udvikling
  • • Tjek SSL certifikat gyldighed

Adgangsniveauer forklaret

Niveau Beskrivelse Tilladt Ikke tilladt
read Læseadgang til data GET requests POST, PUT, DELETE requests
write Oprette, ændre, og slette data POST, PUT, DELETE requests GET requests
all Læse og skrive data Alle HTTP metoder –

Anbefaling: Start med 'read' adgang under udvikling og opgradér kun til 'write' eller 'all' når det er nødvendigt for din applikations funktionalitet.

På login-siden hedder niveauerne Læs (read), Skriv (write), og Fuld (all). Brugerens rolle kan begrænse tokenet yderligere, se Adgangsniveau og brugerens rolle nedenfor.

Adgangsniveau og brugerens rolle

Adgangsniveauet bestemmer, hvilke HTTP-metoder tokenet må bruge. Tokenet knyttes desuden til den bruger, der godkendte adgangen. Har brugeren fået en anden rolle end Fuld adgang på webshoppen, fx Medarbejder, Marketing, eller Udvikler, kan tokenet kun det, rollen giver adgang til, uanset adgangsniveau. Det betyder:

  • GET kræver, at rollen kan se området, fx ordrer eller produkter. POST, PUT, og DELETE kræver, at rollen kan rette det.
  • Statistik (stats og top-products) kræver tilvalget Omsætning og statistik.
  • At rette kostpriser kræver tilvalget Kostpriser og avance. Det samme gør lagerindstillingerne (minimumslager og kostpris, både at hente og rette dem) og opdatering af lagerværdien. Rapporterne om avance, ABC-analyse, og lageromsætning kræver både dette tilvalg og Omsætning og statistik. Uden tilvalget fjernes kostpriser og tal, der er beregnet ud fra dem (fx avance og lagerværdi), fra svarene.
  • Sletning af produkter, ordrer, og kunder kræver tilvalget Sletning og masseimport. Det gør masseimport også, dvs. et POST med en liste af produkter eller kunder.
  • Kreditering, annullering, og ændring af betalt-status på ordrer kræver tilvalget Refundering og annullering.
  • Rollen Leverandør kan kun hente, rette, kopiere, og gendanne enkelte produkter på id, med Sletning og masseimport også slette dem, og hente og uploade billeder i billedarkivet. Er der valgt en leverandør for brugeren, gælder det kun leverandørens egne produkter. Produktlister og helt nye produkter håndteres i admin.
  • Fjernes brugeren fra webshoppen, tilbagekaldes tokenet, og kald giver 401.

Brugere, der stadig har opsætningen fra før rollerne (de tidligere flueben Ordrehåndtering og Leverandør), begrænses først, når firmaadministratoren vælger eller ændrer deres rolle.

Parametrene, din app modtager efter godkendelse, fortæller ikke brugerens rolle. En begrænsning viser sig først, når et kald afvises med 403 og et svar som dette:

{
  "error": "insufficient_role",
  "message": "The user behind this token has the role 'Marketing' on this webshop, which does not allow PUT order. Ask the company administrator to change the role.",
  "method": "PUT",
  "path": "order/123",
  "role": ["marketing"],
  "option": null
}

Feltet role viser brugerens rolle, fx staff, marketing, eller developer. Feltet option viser det tilvalg, rollen mangler, fx refund. Er option null, giver rollen slet ikke adgang til ressourcen eller metoden.

Adgangsniveauet Fuld på login-siden er ikke det samme som rollen Fuld adgang. Skal din app kunne alt, skal en bruger med rollen Fuld adgang godkende adgangen. Du finder alle reglerne i API-dokumentationen, og rollerne er beskrevet i Roller og rettigheder.

Komplet API Dokumentation

Se alle tilgængelige endpoints, metoder og parametre i vores REST API dokumentation

Se API Dokumentation