Modul 2 · 2.4
Čo váš e-shop verejne zobrazuje
Modul 2: Inštalácia a nastavenie · Čas čítania: 10 min.
Cieľ lekcie: Po tejto lekcii dokážete vysvetliť, čo sú Store API a REST API vo WooCommerce, ktoré údaje majú byť verejné a ktoré nie, a ako bezpečne používať API kľúče a webhooky.
Kľúčové pojmy: API, REST API vo WordPress, Store API (wc/store/v1), REST API vo WooCommerce (wc/v3), JSON, verejné a chránené, API kľúč, práva na čítanie a zápis, najmenšie potrebné práva, webhook, tajný kľúč webhooku, X-WP-Total
Obchod s dvoma dverami
Návštevník vidí váš e-shop ako webové stránky. Váš e-shop má však aj „dvere“ pre programy: adresy, na ktorých si program môže vyžiadať alebo odoslať údaje bez vzhľadu stránky. Takéto dvere sa nazývajú API (application programming interface). WordPress má jedno pod /wp-json/, je to REST API. Kurz WordPress v lekcii 7.3 ukázal, že tam možno napríklad zistiť používateľské mená, ak nič nechránite.
WooCommerce pridáva dve vlastné API s veľmi odlišným účelom:
| Store API | REST API vo WooCommerce | |
|---|---|---|
| Adresa | /wp-json/wc/store/v1/... | /wp-json/wc/v3/... |
| Pre koho | Prehliadač návštevníka (bloky košíka a pokladne, lekcia 2.2) | Iné programy: účtovníctvo, sklad, aplikácia, prepojenie s online trhoviskom |
| Potrebný kľúč | Nie, verejné | Áno, API kľúč administrátora (alebo prihlásený používateľ s oprávneniami) |
| Čo obsahuje | Produkty, ceny, stav skladu, kategórie, hodnotenia; košík a objednávku samotného návštevníka | Všetko: objednávky všetkých zákazníkov, zákazníkov, kupóny, nastavenia, prehľady |
Store API je teda vchod cez výklad: čo je vo vašom obchode na stránke produktu, je aj tam, len vo forme údajov. REST API vo WooCommerce sú zadné dvere do skladu: tie majú byť zamknuté.
Store API: čo si môže vyžiadať návštevník (a ktokoľvek)
Otvorte v prehliadači:
https://shop.example.com/wp-json/wc/store/v1/productsDostanete zoznam vo formáte JSON, čo je textový formát pre údaje. Pri každom produkte uvidíte okrem iného názov, slug, typ (jednoduchý, variabilný), adresu stránky produktu (permalink), SKU, ceny, obrázky, kategórie, či je na sklade a či sa dá kúpiť. V hlavičkách odpovede je X-WP-Total: počet produktov, ktoré obchod zobrazuje návštevníkom.
Niekoľko vecí, ktoré by ste mali vedieť:
- Ceny sú v centoch. Čajník za 34,95 € je uvedený ako
"price": "3495"s"currency_minor_unit": 2. Vydelíte ho 100. Či ide o cenu s DPH alebo bez DPH, závisí od vášho nastavenia pri „Zobrazovať ceny v obchode“ (lekcia 4.1). Túto vlastnosť využijeme v úlohe lekcie 4.1. - Len to, čo je viditeľné. Produkty, ktoré sú v koncepte, súkromné alebo skryté v katalógu, Store API nezapočítava. Preto môže byť
X-WP-Totalnižšie ako počet vo vašej administrácii. - Čítať môže každý, zapisovať nie len tak. Pridať niečo do košíka alebo zaplatiť cez Store API sa dá len s jednorazovým kódom (nonce) zo stránky, a aj to len pre vlastný košík daného návštevníka.
Vadí, že je to verejné? Nie: sú to tie isté údaje, aké sú na vašich stránkach produktov. Konkurent, ktorý chce sledovať vaše ceny, to dokáže aj cez bežné stránky. Je však dobré si uvedomiť: všetko, čo zadáte do poľa produktu, sa môže dostať do Store API. Nikdy nedávajte nákupné ceny, mená dodávateľov ani interné poznámky do krátkeho alebo dlhého popisu s tým, že „téma to pole aj tak nezobrazuje“.
Store API ani nezatvárajte. Bloky košíka a pokladne ho potrebujú (lekcia 2.2). Bezpečnostné pluginy, ktoré „vypínajú REST API pre návštevníkov“, preto niekedy pokazia platbu v pokladni. Ak chcete REST API obmedziť, Store API z toho vynechajte.
Zneužívanie Store API existuje, ale na strane zápisu: útočníci, ktorí s ukradnutými číslami kariet skúšajú tisíce malých objednávok. Nazýva sa to card testing; venuje sa mu lekcia 6.3.
REST API vo WooCommerce: vždy za kľúčom
Teraz otvorte bez prihlásenia:
https://shop.example.com/wp-json/wc/v3/ordersSprávnou odpoveďou je chybové hlásenie so stavom 401 (neprihlásený) a kódom ako woocommerce_rest_cannot_view. Váš e-shop hovorí: „toto nemáte oprávnenie vidieť“. Tak to má byť. Ak tu dostanete zoznam objednávok, niečo je vážne zle: plugin, ktorý otvára oprávnenia, upravený kód v téme alebo kľúč, ktorý je vo verejnej adrese. Potom ide o možný únik údajov (kurz WordPress, lekcia 7.5, a databáza znalostí 6749).
Programy, ktoré potrebujú prístup k vašim objednávkam, dostanú API kľúč. Vytvoríte ho v WooCommerce > Nastavenia > Pokročilé > REST API (Advanced > REST API). Kľúč sa skladá z dvoch častí (consumer key a consumer secret) a patrí k používateľovi WordPress. Zvolíte oprávnenia:
- Čítať: program môže získavať údaje;
- Zapísať: program môže údaje vytvárať a meniť;
- Čítať/Zapísať: oboje.
Pravidlá, ktoré dodržiavate vždy:
- Najmenšie potrebné práva. Prepojenie s účtovníctvom, ktoré len sťahuje objednávky, dostane len čítanie. Prepojenie so skladom, ktoré aktualizuje zásoby, potrebuje zápis, nástroj na prehľady nie.
- Jeden kľúč na jedno prepojenie, s jasným popisom („Účtovníctvo, len čítanie, 2026“). Ak prepojenie skončí, zrušíte len tento kľúč.
- Priraďte kľúč používateľovi s primeranými oprávneniami. Kľúč administrátora dokáže všetko, čo administrátor. Radšej vytvorte samostatného používateľa s rolou Správca obchodu (lekcia 6.2).
- Tajnú polovicu uchovávajte bezpečne. Uvidíte ju len raz pri vytvorení. Patrí do nastavení programu alebo do správcu hesiel, nie do e-mailu, zdieľaného dokumentu ani verejného úložiska kódu.
- Upratujte. V REST API vidíte pri každom kľúči, kedy bol naposledy použitý. Kľúč, ktorý sa mesiace nepoužil, zrušte.
Webhooky: váš e-shop volá iný program
API čaká, kým sa niekto opýta. Webhook funguje opačne: pri udalosti vo vašom e-shope (nová objednávka, zmenený produkt) pošle WooCommerce sám správu na adresu, ktorú zadáte. Váš program na odosielanie zásielok sa tak hneď dozvie o objednávke bez toho, aby sa pýtal každú minútu. Nastavíte ich v WooCommerce > Nastavenia > Pokročilé > Webhook.
Tri veci, na ktoré si dajte pozor:
- Správa obsahuje osobné údaje. Webhook pri novej objednávke posiela meno, adresu a objednané produkty. Posielajte to len na adresu cez https a len subjektu, ktorý je uvedený vo vašich zásadách ochrany osobných údajov a v zázname o spracovateľských činnostiach (lekcia 5.5).
- Tajný kľúč. Pri webhooku zadáte tajný kľúč. Prijímajúci program si ním môže overiť, že správa naozaj prišla z vášho e-shopu, a nie od niekoho, kto adresu uhádol. Nenechávajte ho prázdny a zdieľajte ho len s prijímateľom.
- Neúspešné doručenie. Ak je prijímajúca adresa dlhší čas nedostupná, WooCommerce môže webhook po opakovaných chybách vypnúť. Po výpadku skontrolujte v časti Webhook, či sú ešte aktívne.
Nezamieňajte si to s webhookom vášho poskytovateľa platieb (lekcia 4.4). Ten funguje opačne: poskytovateľ oznámi vášmu e-shopu, že platba prebehla úspešne.
V praxi: takto to vyzerá vo WooCommerce
U iných poskytovateľov hostingu to funguje rovnako; ide o súčasti samotného WooCommerce.
- V súkromnom okne otvorte
/wp-json/wc/store/v1/productsna vašom (testovacom) obchode. Vyhľadajte produkt a prepočítajte cenu. - V tom istom súkromnom okne otvorte
/wp-json/wc/v3/orders. Mali by ste vidieť stav 401. - Prejdite do WooCommerce > Nastavenia > Pokročilé > REST API. Pozrite si, aké kľúče tam sú, ku ktorému používateľovi patria a s akými oprávneniami. Zrušte kľúče, ktoré nepoznáte (alebo už nepotrebujete).
- V časti Webhook si pozrite, aké webhooky existujú a na akú adresu smerujú.
- Ak máte bezpečnostný plugin, ktorý obmedzuje REST API, skontrolujte, či je Store API vynechané.
Zhrnutie
- Store API (
wc/store/v1) je verejné a obsahuje to, čo je aj na vašich stránkach produktov; bloky košíka a pokladne ho potrebujú. - Nedávajte interné údaje do polí produktu: cez Store API sa môžu stať viditeľnými.
- REST API vo WooCommerce (
wc/v3) má bez kľúča vrátiť 401; zoznam objednávok bez kľúča je možný únik údajov. - API kľúče: najmenšie potrebné práva, jeden na prepojenie, priradený vhodnému používateľovi, uchovávať v tajnosti, nepoužívané zrušiť.
- Webhooky posielajú osobné údaje inému programu: len cez https, s tajným kľúčom, subjektu zo záznamu o spracovateľských činnostiach.
Kvíz
Úloha
Úloha A2.4: Čo váš e-shop verejne zobrazuje? Zadajte adresu vášho (testovacieho) obchodu a počet produktov, ktoré sú vo vašom obchode viditeľné. Program vykoná tri požiadavky, bez cookies a bez kľúča, len na čítanie:
/wp-json/wc/store/v1/products?per_page=1(Store API, cez adresu REST, ktorú uvádza samotná vaša stránka);/wp-json/wc/v3/orders?per_page=1;/wp-json/wc/v3/customers?per_page=1.
Správne je: Store API odpovie stavom 200 a zoznamom JSON; hlavička X-WP-Total sa rovná počtu, ktorý ste zadali; orders a customers vrátia 401, 403 alebo 404.
Oranžová: X-WP-Total sa líši (produkty v koncepte, súkromné alebo skryté sa nezapočítavajú); Store API vráti 401 alebo 403, väčšinou kvôli bezpečnostnému pluginu, a preto nefungujú bloky pokladne.
Červená: Store API nie je dostupné, hoci na vašej stránke beží WooCommerce; alebo orders či customers vrátia zoznam. To druhé je vážne: okamžite to zatvorte, skontrolujte svoje API kľúče a pluginy a posúďte, či musíte nahlásiť únik údajov. Program si v takom prípade uloží len stavový kód, nikdy nie obsah.
Potom sa sami pozrite do REST API a Webhook: aké kľúče a webhooky tam sú a viete pri každom, na čo slúži?
Ďalšie čítanie
- Bezplatný kurz WordPress 7.3: Prihlasovanie: heslá, dvojfaktorové overenie a brute force
- Bezplatný kurz WordPress 7.5: Hacknutie: ako ho rozpoznať, napraviť a predchádzať mu
- WordPress: prístup k xmlrpc.php nefunguje
- Je to únik údajov a mám ho nahlásiť?
- Store API (developer.woocommerce.com, v angličtine): https://developer.woocommerce.com/docs/apis/store-api/
- Obmedzenie počtu požiadaviek (rate limiting) pre Store API (developer.woocommerce.com, v angličtine): https://developer.woocommerce.com/docs/apis/store-api/rate-limiting/
