Modul 2 · 2.4
Hva nettbutikken din viser offentlig
Modul 2: Installere og sette opp · Lesetid: 10 minutter
Læringsmål: Etter denne leksjonen kan du forklare hva Store API og REST API i WooCommerce er, hvilke data som skal være offentlige og hvilke som ikke skal det, og hvordan du bruker API-nøkler og webhooks på en trygg måte.
Nøkkelbegreper: API, REST API i WordPress, Store API (wc/store/v1), REST API i WooCommerce (wc/v3), JSON, offentlig og skjermet, API-nøkkel, lese- og skriverettigheter, minste rettigheter, webhook, hemmelig nøkkel for en webhook, X-WP-Total
En butikk med to dører
En besøkende ser nettbutikken din som nettsider. Men butikken har også «dører» for programmer: adresser der et program kan hente eller sende data, uten utformingen til en side. En slik dør kalles et API (application programming interface). WordPress har ett under /wp-json/, REST API. WordPress-kurset viste i leksjon 7.3 at du der for eksempel kan hente brukernavn hvis du ikke skjermer noe.
WooCommerce legger til to egne API-er, med helt forskjellig formål:
| Store API | REST API i WooCommerce | |
|---|---|---|
| Adresse | /wp-json/wc/store/v1/... | /wp-json/wc/v3/... |
| For hvem | Nettleseren til en besøkende (blokkene for handlekurv og kasse, leksjon 2.2) | Andre programmer: regnskap, lager, en app, en kobling til en markedsplass |
| Trenger nøkkel | Nei, offentlig | Ja, en API-nøkkel fra en administrator (eller en innlogget bruker med rettigheter) |
| Hva det inneholder | Produkter, priser, lagerstatus, kategorier, vurderinger; handlekurven og bestillingen til den besøkende selv | Alt: bestillingene til alle, kunder, kuponger, innstillinger, rapporter |
Store API er altså inngangen til utstillingsvinduet: det som står på en produktside i butikken din, står også der, bare som data. REST API i WooCommerce er bakdøren til lageret: den skal være låst.
Store API: hva en besøkende (og alle andre) kan hente
Åpne i nettleseren:
https://shop.example.com/wp-json/wc/store/v1/productsDu får en liste i JSON, et tekstformat for data. For hvert produkt ser du blant annet navnet, slugen, typen (enkelt, variabelt), adressen til produktsiden (permalink), SKU, prisene, bildene, kategoriene, om det er på lager og om det kan kjøpes. I svarets toppfelter står X-WP-Total: antall produkter butikken viser til besøkende.
Noen ting som er greit å vite:
- Prisene står i cent. En tekanne til € 34,95 (≈ 368 kr) står som
"price": "3495"med"currency_minor_unit": 2. Du deler på 100. Om det er prisen med eller uten mva., avhenger av innstillingen din under «Vis priser i butikken» (leksjon 4.1). Den egenskapen bruker vi i oppgaven i leksjon 4.1. - Bare det som er synlig. Produkter som er kladd, private eller skjult i katalogen, telles ikke med i Store API. Derfor kan
X-WP-Totalvære lavere enn antallet i administrasjonen din. - Alle kan lese, men ikke uten videre skrive. Å legge noe i handlekurven eller gå til kassen via Store API går bare med en engangskode (nonce) fra siden, og da bare for den besøkendes egen handlekurv.
Er det et problem at dette er offentlig? Nei: det er de samme dataene som står på produktsidene dine. En konkurrent som vil følge prisene dine, kan gjøre det med de vanlige sidene også. Men vær klar over dette: alt du legger inn i et produktfelt, kan havne i Store API. Legg aldri innkjøpspriser, navn på leverandører eller interne notater i den korte eller lange beskrivelsen «fordi temaet uansett ikke viser det feltet».
Ikke steng Store API heller. Blokkene for handlekurv og kasse trenger det (leksjon 2.2). Sikkerhetsutvidelser som «slår av REST API for besøkende», ødelegger derfor noen ganger kassen. Vil du begrense REST API, så unnta Store API.
Misbruk av Store API finnes, men da på skrivesiden: angripere som prøver tusenvis av små bestillinger med stjålne kortnumre. Det kalles card testing; det handler leksjon 6.3 om.
REST API i WooCommerce: alltid bak en nøkkel
Åpne nå, uten å være logget inn:
https://shop.example.com/wp-json/wc/v3/ordersRiktig svar er en feilmelding med status 401 (ikke logget inn) og en kode som woocommerce_rest_cannot_view. Butikken din sier: «dette får du ikke se». Slik skal det være. Får du en liste med bestillinger her, er noe alvorlig galt: en utvidelse som åpner rettigheter, egen kode i temaet eller en nøkkel som står i en offentlig adresse. Da har du et mulig personvernbrudd (WordPress-kurset, leksjon 7.5, og kunnskapsbasen 6749).
Programmer som skal ha tilgang til bestillingene dine, får en API-nøkkel. Den lager du under WooCommerce > Innstillinger > Avansert > REST API (Advanced > REST API). En nøkkel består av to deler (en consumer key og en consumer secret) og hører til en WordPress-bruker. Du velger rettighetene:
- Les: programmet kan hente data;
- Skriv: programmet kan opprette og endre data;
- Les/skriv: begge deler.
Regler du alltid følger:
- Minste rettigheter. En regnskapskobling som bare henter bestillinger, får bare lesetilgang. En lagerkobling som oppdaterer lagerbeholdningen, trenger skrivetilgang, men et rapportverktøy gjør ikke det.
- Én nøkkel per kobling, med en tydelig beskrivelse («Regnskap, bare lesing, 2026»). Stopper en kobling, trekker du tilbake bare den nøkkelen.
- Knytt nøkkelen til en bruker med passende rettigheter. En nøkkel fra en administrator kan alt en administrator kan. Lag heller en egen bruker med rollen Butikkadministrator (leksjon 6.2).
- Oppbevar den hemmelige delen trygt. Du ser den én gang når du oppretter den. Den hører hjemme i innstillingene til programmet eller i en passordbehandler, ikke i en e-post, et delt dokument eller et offentlig kodelager.
- Rydd opp. Under REST API ser du for hver nøkkel når den sist ble brukt. En nøkkel som ikke er brukt på flere måneder, trekker du tilbake.
Webhooks: butikken din ringer et annet program
Et API venter til noen spør. En webhook fungerer motsatt: ved en hendelse i butikken (en ny bestilling, et endret produkt) sender WooCommerce selv en melding til en adresse du oppgir. Slik får fraktprogrammet ditt vite med en gang at det er kommet en bestilling, uten å spørre hvert minutt. Du setter dem opp under WooCommerce > Innstillinger > Avansert > Webhooks.
Tre ting å passe på:
- Meldingen inneholder personopplysninger. En webhook ved en ny bestilling sender med navn, adresse og bestilte produkter. Send det bare til en adresse via https og til en part som står i personvernerklæringen og behandlingsprotokollen din (leksjon 5.5).
- Den hemmelige nøkkelen. For en webhook fyller du inn en hemmelig nøkkel. Med den kan programmet som mottar meldingen, kontrollere at den virkelig kommer fra butikken din og ikke fra noen som har gjettet adressen. Ikke la feltet stå tomt, og del nøkkelen bare med mottakeren.
- Mislykket levering. Er mottakeradressen utilgjengelig en stund, kan WooCommerce slå av webhooken etter gjentatte feil. Sjekk under Webhooks etter en driftsforstyrrelse om de fortsatt er aktive.
Ikke bland dette sammen med webhooken fra betalingsleverandøren din (leksjon 4.4). Den fungerer motsatt: leverandøren melder til butikken din at en betaling er gjennomført.
I praksis: slik ser det ut i WooCommerce
Hos andre leverandører fungerer det likt; dette er deler av WooCommerce selv.
- Åpne
/wp-json/wc/store/v1/productsi et privat vindu på (test)butikken din. Finn et produkt og regn om prisen. - Åpne
/wp-json/wc/v3/ordersi det samme private vinduet. Du skal se status 401. - Gå til WooCommerce > Innstillinger > Avansert > REST API. Se hvilke nøkler som finnes, hos hvilken bruker og med hvilke rettigheter. Trekk tilbake nøkler du ikke kjenner (lenger).
- Se under Webhooks hvilke webhooks som finnes og hvilken adresse de går til.
- Har du en sikkerhetsutvidelse som begrenser REST API, sjekk at Store API er unntatt.
Sammendrag
- Store API (
wc/store/v1) er offentlig og inneholder det som også står på produktsidene dine; blokkene for handlekurv og kasse trenger det. - Ikke legg interne data i produktfelter: de kan bli synlige via Store API.
- REST API i WooCommerce (
wc/v3) skal gi 401 uten nøkkel; en liste med bestillinger uten nøkkel er et mulig personvernbrudd. - API-nøkler: minste rettigheter, én per kobling, knyttet til en passende bruker, oppbevart hemmelig, ubrukte trekkes tilbake.
- Webhooks sender personopplysninger til et annet program: bare via https, med en hemmelig nøkkel, til en part i behandlingsprotokollen din.
Quiz
Oppgave
Oppgave A2.4: Hva viser nettbutikken din offentlig? Fyll inn adressen til (test)butikken din og antall produkter som er synlige i butikken. Programmet gjør tre forespørsler, uten informasjonskapsler og uten nøkkel, bare lesing:
/wp-json/wc/store/v1/products?per_page=1(Store API, via REST-adressen som nettstedet ditt selv oppgir);/wp-json/wc/v3/orders?per_page=1;/wp-json/wc/v3/customers?per_page=1.
Bra er: Store API svarer med status 200 og en JSON-liste; toppfeltet X-WP-Total er likt antallet du fylte inn; orders og customers gir 401, 403 eller 404.
Oransje: X-WP-Total avviker (produkter som er kladd, private eller skjult, telles ikke med); Store API gir 401 eller 403, som regel på grunn av en sikkerhetsutvidelse, slik at kasseblokkene ikke fungerer.
Rødt: Store API er ikke tilgjengelig selv om nettstedet ditt kjører WooCommerce; eller orders eller customers returnerer en liste. Det siste er alvorlig: steng det med en gang, sjekk API-nøklene og utvidelsene dine, og vurder om du må melde et personvernbrudd. Programmet lagrer i så fall bare statuskoden, aldri innholdet.
Se deretter selv under REST API og Webhooks: hvilke nøkler og webhooks finnes, og vet du hva hver av dem brukes til?
Les mer
- Gratis WordPress-kurs 7.3: Innlogging: passord, tofaktorautentisering og brute force
- Gratis WordPress-kurs 7.5: Hacket: gjenkjenne, gjenopprette og forebygge
- Tilgang til WordPress xmlrpc.php fungerer ikke
- Er dette en datalekkasje, og må jeg melde det?
- Store API (developer.woocommerce.com, engelsk): https://developer.woocommerce.com/docs/apis/store-api/
- Rate limiting for Store API (developer.woocommerce.com, engelsk): https://developer.woocommerce.com/docs/apis/store-api/rate-limiting/
