Gå direkte til indholdet

Cookieindstillinger

Vælg for hver type, hvilke cookies du tillader. Du kan altid ændre dit valg via Cookieindstillinger nederst på hver side. Privatlivspolitik

Nødvendige

Altid slået til

Nødvendige for at logge ind, gemme din kurv og huske dine valg. De er altid slået til.

Hvilke cookies?
  • weboke_sessie, weboke_klant, weboke_remember: din session og at forblive logget ind
  • weboke_basket: din kurv
  • wkBtwIncl: vise priser med eller uden moms
  • wok_cookies: dit cookievalg, 12 måneder

Måler, hvilken annonce der fører til et besøg eller en bestilling, så vi ikke betaler for annoncer, der ikke virker.

Hvilke cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), op til 90 dage
  • OpenAI Ads, annoncer i ChatGPT
  • wok_aff: hvilken partner der henviste dig til os (affiliateprogram), 60 dage

4,6

Land og sprog

Hvert land har sin egen side med landets priser og moms.

Se

Hvad din shop viser offentligt

Modul 2: Installation og opsætning · Læsetid: 10 minutter

Læringsmål: Efter denne lektion kan du forklare, hvad Store API og REST API i WooCommerce er, hvilke data der skal være offentlige, og hvilke der ikke skal, og hvordan du bruger API-nøgler og webhooks sikkert.

Centrale begreber: API, REST API i WordPress, Store API (wc/store/v1), REST API i WooCommerce (wc/v3), JSON, offentlig og afskærmet, API-nøgle, læse- og skriverettigheder, mindst mulige rettigheder, webhook, hemmelig nøgle til en webhook, X-WP-Total

En butik med to døre

En besøgende ser din shop som websider. Men din shop har også "døre" til programmer: adresser, hvor et program kan hente eller sende data uden sidens layout. Sådan en dør hedder et API (application programming interface). WordPress har et under /wp-json/, nemlig REST API. WordPress-kurset viste i lektion 7.3, at du dér for eksempel kan hente brugernavne, hvis du ikke afskærmer noget.

WooCommerce tilføjer to egne API'er med vidt forskellige formål:

Store APIREST API i WooCommerce
Adresse/wp-json/wc/store/v1/.../wp-json/wc/v3/...
Til hvemDen besøgendes browser (blokkene til kurv og kasse, lektion 2.2)Andre programmer: bogføring, lager, en app, en kobling til en markedsplads
Kræver nøgleNej, offentligJa, en API-nøgle fra en administrator (eller en logget ind bruger med rettigheder)
Hvad den indeholderVarer, priser, lagerstatus, kategorier, anmeldelser; kurven og ordren for den besøgende selvAlt: alles ordrer, kunder, rabatkoder, indstillinger, rapporter

Store API er altså indgangen fra butiksvinduet: det, der står på en produktside i din shop, står også dér, bare som data. REST API i WooCommerce er lagerets bagdør: den skal være låst.

Store API: hvad en besøgende (og alle andre) kan hente

Åbn i din browser:

https://shop.example.com/wp-json/wc/store/v1/products

Du får en liste i JSON, et tekstformat til data. For hvert produkt ser du blandt andet navnet, slug'en, typen (simpelt, variabelt), adressen på produktsiden (permalink), varenummeret (SKU), priserne, billeder, kategorier, om det er på lager, og om det kan købes. I svarets headere står X-WP-Total: det antal produkter, som butikken viser besøgende.

Et par ting, du skal vide:

  • Priser står i øre/cent. En tekande til € 34,95 (≈ 261 kr.) står som "price": "3495" med "currency_minor_unit": 2. Du dividerer med 100. Om det er prisen med eller uden moms, afhænger af din indstilling under "Vis priser i butikken" (lektion 4.1). Den egenskab bruger vi i opgaven i lektion 4.1.
  • Kun det, der er synligt. Produkter, der er kladder, private eller skjult i kataloget, tæller Store API ikke med. Derfor kan X-WP-Total være lavere end antallet i din administration.
  • Alle må læse, men ikke bare skrive. At lægge noget i kurven eller gå til kassen via Store API kan kun ske med en engangskode (nonce) fra siden, og kun for den besøgendes egen kurv.

Er det et problem, at det er offentligt? Nej: det er de samme data, som står på dine produktsider. En konkurrent, der vil følge dine priser, kan også gøre det via de almindelige sider. Men vær bevidst om, at alt, hvad du skriver i et produktfelt, kan ende i Store API. Skriv aldrig indkøbspriser, navne på leverandører eller interne noter i den korte eller lange beskrivelse, "fordi temaet alligevel ikke viser det felt".

Luk heller ikke Store API. Blokkene til kurv og kasse har brug for den (lektion 2.2). Sikkerhedsplugins, der "slår REST API fra for besøgende", ødelægger derfor nogle gange kassen. Vil du begrænse REST API, så undtag Store API.

Misbrug af Store API findes, men på skrivesiden: angribere, der med stjålne kortnumre forsøger tusindvis af små bestillinger. Det kaldes card testing; det handler lektion 6.3 om.

REST API i WooCommerce: altid bag en nøgle

Åbn nu, uden at være logget ind:

https://shop.example.com/wp-json/wc/v3/orders

Det rigtige svar er en fejlmeddelelse med status 401 (ikke logget ind) og en kode som woocommerce_rest_cannot_view. Din shop siger: "det må du ikke se". Sådan skal det være. Får du her en liste med ordrer, er der noget alvorligt galt: et plugin, der åbner rettigheder, tilpasset kode i temaet, eller en nøgle, der står i en offentlig adresse. Så har du et muligt brud på persondatasikkerheden (WordPress-kurset, lektion 7.5, og vidensbasen 6749).

Programmer, der skal have adgang til dine ordrer, får en API-nøgle. Den opretter du under WooCommerce > Indstillinger > Avanceret > REST API (Advanced > REST API). En nøgle består af to dele (en consumer key og en consumer secret) og hører til en WordPress-bruger. Du vælger rettighederne:

  • Læs: programmet må hente data;
  • Skriv: programmet må oprette og ændre data;
  • Læs/Skriv: begge dele.

Regler, du altid følger:

  1. Mindst mulige rettigheder. En bogføringskobling, der kun henter ordrer, får kun læseadgang. En lagerkobling, der opdaterer lagerbeholdningen, har brug for skriveadgang, men et rapporteringsværktøj har ikke.
  2. Én nøgle pr. kobling, med en tydelig beskrivelse ("Bogføring, kun læs, 2026"). Stopper en kobling, tilbagekalder du kun den nøgle.
  3. Knyt nøglen til en bruger med passende rettigheder. En administrators nøgle kan alt, hvad en administrator kan. Opret hellere en separat bruger med rollen Webshop leder (lektion 6.2).
  4. Opbevar den hemmelige halvdel sikkert. Du ser den kun én gang, når du opretter den. Den hører hjemme i programmets indstillinger eller i en adgangskodeadministrator, ikke i en mail, et delt dokument eller et offentligt kodelager.
  5. Ryd op. Under REST API ser du for hver nøgle, hvornår den sidst blev brugt. En nøgle, der ikke er brugt i månedsvis, tilbagekalder du.

Webhooks: din shop ringer til et andet program

Et API venter, til nogen spørger. En webhook virker omvendt: ved en hændelse i din shop (en ny ordre, et ændret produkt) sender WooCommerce selv en besked til en adresse, du angiver. Så får dit forsendelsesprogram straks besked om en ny ordre uden at skulle spørge hvert minut. Du opsætter dem under WooCommerce > Indstillinger > Avanceret > Webhooks.

Tre ting, du skal være opmærksom på:

  • Beskeden indeholder personoplysninger. En webhook ved en ny ordre sender navn, adresse og bestilte varer med. Send det kun til en adresse via https og til en part, der står i din privatlivspolitik og din fortegnelse over behandlingsaktiviteter (lektion 5.5).
  • Den hemmelige nøgle. Ved en webhook udfylder du en hemmelig nøgle. Med den kan det modtagende program kontrollere, at beskeden virkelig kommer fra din shop og ikke fra nogen, der har gættet adressen. Lad den ikke stå tom, og del den kun med modtageren.
  • Mislykket levering. Er den modtagende adresse utilgængelig i et stykke tid, kan WooCommerce deaktivere webhooken efter gentagne fejl. Tjek efter en driftsforstyrrelse under Webhooks, om de stadig er aktive.

Forveksl ikke dette med betalingsudbyderens webhook (lektion 4.4). Den virker omvendt: udbyderen fortæller din shop, at en betaling er gennemført.

I praksis: sådan ser det ud i WooCommerce

Hos andre hostingudbydere fungerer det på samme måde; det er dele af WooCommerce selv.

  1. Åbn /wp-json/wc/store/v1/products i et privat vindue på din (test)shop. Find et produkt, og omregn prisen.
  2. Åbn /wp-json/wc/v3/orders i det samme private vindue. Du skal se status 401.
  3. Gå til WooCommerce > Indstillinger > Avanceret > REST API. Se, hvilke nøgler der findes, hos hvilken bruger og med hvilke rettigheder. Tilbagekald nøgler, du ikke (længere) kender.
  4. Se under Webhooks, hvilke webhooks der findes, og hvilken adresse de sender til.
  5. Har du et sikkerhedsplugin, der begrænser REST API, så kontrollér, at Store API er undtaget.

Opsummering

  • Store API (wc/store/v1) er offentlig og indeholder det, der også står på dine produktsider; blokkene til kurv og kasse har brug for den.
  • Skriv ikke interne data i produktfelter: de kan blive synlige via Store API.
  • REST API i WooCommerce (wc/v3) skal give 401 uden nøgle; en liste med ordrer uden nøgle er et muligt brud på persondatasikkerheden.
  • API-nøgler: mindst mulige rettigheder, én pr. kobling, knyttet til en passende bruger, holdt hemmelige, ubrugte tilbagekaldes.
  • Webhooks sender personoplysninger til et andet program: kun via https, med en hemmelig nøgle, til en part fra din fortegnelse over behandlingsaktiviteter.

Quiz

1. Hvilke data skal være offentlige via Store API?



2. Du åbner /wp-json/wc/v3/orders uden at logge ind og får en liste med ordrer. Hvad betyder det?



3. Et bogføringsprogram skal kun hente ordrer. Hvilken API-nøgle opretter du?



4. Et sikkerhedsplugin lukker hele REST API for besøgende. Derefter kan kunderne ikke længere gå til kassen. Hvorfor?



5. Hvorfor udfylder du en hemmelig nøgle ved en webhook?



Opgave

Opgave A2.4: Hvad viser din shop offentligt? Udfyld adressen på din (test)shop og det antal produkter, der er synlige i din shop. Programmet laver tre forespørgsler, uden cookies og uden nøgle, kun læsning:

  1. /wp-json/wc/store/v1/products?per_page=1 (Store API, via den REST-adresse, dit websted selv angiver);
  2. /wp-json/wc/v3/orders?per_page=1;
  3. /wp-json/wc/v3/customers?per_page=1.

Opgave A2.4: Hvad viser din shop offentligt?



Det, du udfylder, og hvad vi finder, gemmer vi ikke. Din browser husker dine svar, og om du har bestået opgaven. Er du logget ind, gemmer vi kun, at du (næsten) bestod opgaven, i Mine kurser; der kan du også slette det.

Godt er: Store API svarer med status 200 og en JSON-liste; headeren X-WP-Total er lig med det antal, du udfyldte; orders og customers giver 401, 403 eller 404.

Orange: X-WP-Total afviger (produkter, der er kladder, private eller skjulte, tælles ikke med); Store API giver 401 eller 403, som regel på grund af et sikkerhedsplugin, så kasseblokkene ikke virker.

Rødt: Store API kan ikke nås, selvom dit websted kører WooCommerce; eller orders eller customers returnerer en liste. Det sidste er alvorligt: luk det med det samme, kontrollér dine API-nøgler og plugins, og vurder, om du skal anmelde et brud på persondatasikkerheden. Programmet gemmer i så fald kun statuskoden, aldrig indholdet.

Se derefter selv under REST API og Webhooks: hvilke nøgler og webhooks findes der, og ved du for hver enkelt, hvad den bruges til?

Læs videre

Et øjeblik…

Opsæt dine domæner

Angiv for hvert domæne navneserverne, tilknytningen til din hosting, og hvem der bliver ejer.

Indlæser dine domæner…