Modul 2 · 2.4
Kaj Vaša spletna trgovina javno prikazuje
Modul 2: Namestitev in nastavitev · Čas branja: 10 minut
Učni cilj: Po tej lekciji boste znali razložiti, kaj sta Store API in REST API WooCommerce, kateri podatki naj bodo javni in kateri ne ter kako varno uporabljate ključe API in webhooke.
Ključni pojmi: API, REST API WordPressa, Store API (wc/store/v1), REST API WooCommerce (wc/v3), JSON, javno in zaščiteno, ključ API, pravice za branje in pisanje, najmanjše potrebne pravice, webhook, skrivni ključ webhooka, X-WP-Total
Trgovina z dvojimi vrati
Obiskovalec vidi Vašo trgovino kot spletne strani. Vendar ima Vaša trgovina tudi »vrata« za programe: naslove, na katerih lahko program pridobi ali pošlje podatke, brez oblikovanja strani. Takšna vrata se imenujejo API (application programming interface). WordPress jih ima pod /wp-json/, to je REST API. Tečaj o WordPressu je v lekciji 7.3 pokazal, da lahko tam na primer pridobite uporabniška imena, če ničesar ne zaščitite.
WooCommerce doda dva lastna API-ja z zelo različnim namenom:
| Store API | REST API WooCommerce | |
|---|---|---|
| Naslov | /wp-json/wc/store/v1/... | /wp-json/wc/v3/... |
| Za koga | Brskalnik obiskovalca (bloki za košarico in zaključek nakupa, lekcija 2.2) | Drugi programi: računovodstvo, zaloga, aplikacija, povezava s spletno tržnico |
| Potreben ključ | Ne, javno | Da, ključ API skrbnika (ali prijavljen uporabnik z ustreznimi pravicami) |
| Kaj vsebuje | Izdelke, cene, stanje zaloge, kategorije, ocene; košarico in naročilo obiskovalca samega | Vse: naročila vseh strank, stranke, kupone, nastavitve, poročila |
Store API je torej vhod skozi izložbo: kar je v Vaši trgovini na strani izdelka, je tudi tam, le v obliki podatkov. REST API WooCommerce pa so zadnja vrata skladišča: ta morajo biti zaklenjena.
Store API: kaj lahko pridobi obiskovalec (in kdor koli)
V brskalniku odprite:
https://shop.example.com/wp-json/wc/store/v1/productsDobite seznam v obliki JSON, besedilni zapis podatkov. Za vsak izdelek med drugim vidite ime, slug, vrsto (enostaven, spremenljiv), naslov strani izdelka (permalink), SKU, cene, slike, kategorije, ali je na zalogi in ali ga je mogoče kupiti. V glavi odgovora je X-WP-Total: število izdelkov, ki jih trgovina prikazuje obiskovalcem.
Nekaj stvari, ki jih je dobro vedeti:
- Cene so v centih. Čajnik za € 34,95 je zapisan kot
"price": "3495"z"currency_minor_unit": 2. Delite s 100. Ali je to cena z DDV ali brez, je odvisno od Vaše nastavitve »Prikaz cen v trgovini« (lekcija 4.1). To lastnost uporabimo v nalogi lekcije 4.1. - Samo tisto, kar je vidno. Izdelkov v osnutku, zasebnih ali skritih v katalogu Store API ne šteje. Zato je
X-WP-Totallahko nižji od števila v Vašem skrbniškem delu. - Brati sme vsak, pisati pa ne kar tako. Dodajanje v košarico ali zaključek nakupa prek Store API je mogoče le z enkratno kodo (nonce) s strani in le za lastno košarico tega obiskovalca.
Je hudo, da je to javno? Ne: to so isti podatki, kot so na Vaših straneh izdelkov. Konkurent, ki želi spremljati Vaše cene, lahko to stori tudi z običajnimi stranmi. Vseeno se zavedajte: vse, kar vpišete v polje izdelka, se lahko pojavi v Store API. Nikoli ne vpisujte nabavnih cen, imen dobaviteljev ali internih opomb v kratek ali dolg opis, »ker tema tega polja tako ali tako ne prikaže«.
Store API tudi ne zaprite. Bloki za košarico in zaključek nakupa ga potrebujejo (lekcija 2.2). Varnostni vtičniki, ki »izklopijo REST API za obiskovalce«, zato včasih pokvarijo zaključek nakupa. Če želite REST API omejiti, Store API izvzemite.
Zloraba Store API sicer obstaja, a na strani pisanja: napadalci, ki z ukradenimi številkami kartic poskušajo na tisoče majhnih naročil. Temu pravimo card testing; o tem govori lekcija 6.3.
REST API WooCommerce: vedno za ključem
Zdaj odprite, ne da bi bili prijavljeni:
https://shop.example.com/wp-json/wc/v3/ordersPravilen odgovor je napaka s statusom 401 (niste prijavljeni) in koda, kot je woocommerce_rest_cannot_view. Vaša trgovina pravi: »tega ne smete videti«. Tako mora biti. Če tukaj dobite seznam naročil, je nekaj resno narobe: vtičnik, ki odpira pravice, prilagojena koda v temi ali ključ, ki je v javnem naslovu. Takrat gre lahko za kršitev varstva osebnih podatkov (tečaj o WordPressu, lekcija 7.5, in baza znanja 6749).
Programi, ki morajo dostopati do Vaših naročil, dobijo ključ API. Ustvarite ga v WooCommerce > Nastavitve > Napredno > REST API (Advanced > REST API). Ključ je sestavljen iz dveh delov (consumer key in consumer secret) in pripada uporabniku WordPressa. Izberete pravice:
- Branje: program sme pridobivati podatke;
- Pisanje: program sme podatke ustvarjati in spreminjati;
- Branje/pisanje: oboje.
Pravila, ki se jih vedno držite:
- Najmanjše potrebne pravice. Povezava z računovodstvom, ki samo prenaša naročila, dobi samo branje. Povezava za zalogo, ki posodablja zalogo, potrebuje pisanje, orodje za poročila pa ne.
- En ključ na povezavo, z jasnim opisom (»Računovodstvo, samo branje, 2026«). Ko povezava preneha, prekličete samo ta ključ.
- Ključ povežite z uporabnikom z ustreznimi pravicami. Ključ skrbnika zmore vse, kar zmore skrbnik. Raje ustvarite ločenega uporabnika z vlogo Upravitelj trgovine (lekcija 6.2).
- Skrivni del hranite varno. Vidite ga samo enkrat, ob ustvarjanju. Spada v nastavitve programa ali v upravitelja gesel, ne v e-sporočilo, deljen dokument ali javno shrambo kode.
- Pospravljajte. V REST API za vsak ključ vidite, kdaj je bil nazadnje uporabljen. Ključ, ki ga mesece niste uporabili, prekličite.
Webhooki: Vaša trgovina pokliče drug program
API čaka, da ga nekdo vpraša. Webhook deluje obratno: ob dogodku v Vaši trgovini (novo naročilo, spremenjen izdelek) WooCommerce sam pošlje sporočilo na naslov, ki ga določite. Tako Vaš program za pošiljanje takoj izve za naročilo, ne da bi spraševal vsako minuto. Nastavite jih v WooCommerce > Nastavitve > Napredno > Webhooki.
Na tri stvari bodite pozorni:
- Sporočilo vsebuje osebne podatke. Webhook ob novem naročilu pošlje ime, naslov in naročene izdelke. To pošiljajte samo na naslov prek https in partnerju, ki je naveden v Vaši politiki zasebnosti in evidenci dejavnosti obdelave (lekcija 5.5).
- Skrivni ključ. Pri webhooku vpišete skrivni ključ. Z njim lahko program prejemnik preveri, da sporočilo res prihaja iz Vaše trgovine in ne od nekoga, ki je naslov uganil. Ne puščajte ga praznega in ga delite samo s prejemnikom.
- Neuspešna dostava. Če je naslov prejemnika nekaj časa nedosegljiv, lahko WooCommerce webhook po ponavljajočih se napakah onemogoči. Po izpadu v Webhooki preverite, ali so še aktivni.
Ne zamenjujte tega z webhookom Vašega ponudnika plačil (lekcija 4.4). Ta deluje obratno: ponudnik sporoči Vaši trgovini, da je plačilo uspelo.
V praksi: tako je videti v WooCommerce
Pri drugih ponudnikih gostovanja deluje enako; to so deli samega WooCommerce.
- V zasebnem oknu odprite
/wp-json/wc/store/v1/productsv svoji (testni) trgovini. Poiščite izdelek in preračunajte ceno. - V istem zasebnem oknu odprite
/wp-json/wc/v3/orders. Videti morate status 401. - Pojdite v WooCommerce > Nastavitve > Napredno > REST API. Preverite, kateri ključi obstajajo, pri katerem uporabniku in s katerimi pravicami. Prekličite ključe, ki jih ne poznate (več).
- V Webhooki preverite, kateri webhooki obstajajo in na kateri naslov pošiljajo.
- Če imate varnostni vtičnik, ki omejuje REST API, preverite, da je Store API izvzet.
Povzetek
- Store API (
wc/store/v1) je javen in vsebuje to, kar je tudi na Vaših straneh izdelkov; bloki za košarico in zaključek nakupa ga potrebujejo. - V polja izdelkov ne vpisujte internih podatkov: prek Store API lahko postanejo vidni.
- REST API WooCommerce (
wc/v3) mora brez ključa vrniti 401; seznam naročil brez ključa pomeni morebitno kršitev varstva osebnih podatkov. - Ključi API: najmanjše potrebne pravice, en ključ na povezavo, pri ustreznem uporabniku, skrivni del varno shranjen, neuporabljene prekličite.
- Webhooki pošiljajo osebne podatke drugemu programu: samo prek https, s skrivnim ključem, partnerju iz Vaše evidence dejavnosti obdelave.
Kviz
Naloga
Naloga A2.4: Kaj Vaša spletna trgovina javno prikazuje? Vpišite naslov svoje (testne) trgovine in število izdelkov, ki so vidni v Vaši trgovini. Program izvede tri poizvedbe, brez piškotkov in brez ključa, samo branje:
/wp-json/wc/store/v1/products?per_page=1(Store API, prek naslova REST, ki ga navaja Vaše spletno mesto);/wp-json/wc/v3/orders?per_page=1;/wp-json/wc/v3/customers?per_page=1.
Dobro je: Store API odgovori s statusom 200 in seznamom JSON; glava X-WP-Total je enaka številu, ki ste ga vpisali; orders in customers vrneta 401, 403 ali 404.
Oranžno: X-WP-Total se razlikuje (izdelki v osnutku, zasebni ali skriti se ne štejejo); Store API vrne 401 ali 403, navadno zaradi varnostnega vtičnika, zato bloki za zaključek nakupa ne delujejo.
Rdeče: Store API ni dosegljiv, čeprav Vaše spletno mesto poganja WooCommerce; ali pa orders ali customers vrneta seznam. Slednje je resno: takoj ga zaprite, preverite svoje ključe API in vtičnike ter presodite, ali morate kršitev varstva osebnih podatkov prijaviti. Program v tem primeru shrani samo statusno kodo, nikoli vsebine.
Nato sami preverite REST API in Webhooki: kateri ključi in webhooki obstajajo in ali za vsakega veste, čemu služi?
Za nadaljnje branje
- Brezplačni tečaj WordPress 7.3: Prijava: gesla, dvostopenjsko preverjanje in brute force
- Brezplačni tečaj WordPress 7.5: Vdor v spletno mesto: prepoznavanje, odprava in preprečevanje
- Dostop do xmlrpc.php v WordPressu ne deluje
- Ali gre za uhajanje podatkov in ali ga moram prijaviti?
- Store API (developer.woocommerce.com, angleško): https://developer.woocommerce.com/docs/apis/store-api/
- Omejevanje hitrosti (rate limiting) za Store API (developer.woocommerce.com, angleško): https://developer.woocommerce.com/docs/apis/store-api/rate-limiting/
