2 modulis · 2.4
Ką Jūsų e. parduotuvė rodo viešai
2 modulis: Įdiegimas ir sąranka · Skaitymo laikas: 10 min.
Mokymosi tikslas: Po šios pamokos galėsite paaiškinti, kas yra WooCommerce Store API ir REST API, kurie duomenys turi būti vieši, o kurie ne, ir kaip saugiai naudoti API raktus ir webhook'us.
Pagrindinės sąvokos: API, WordPress REST API, Store API (wc/store/v1), WooCommerce REST API (wc/v3), JSON, viešas ir apsaugotas, API raktas, skaitymo ir rašymo teisės, mažiausios būtinos teisės, webhook'as, slaptasis webhook'o raktas, X-WP-Total
Parduotuvė su dvejomis durimis
Lankytojas mato Jūsų e. parduotuvę kaip tinklalapius. Tačiau Jūsų e. parduotuvė turi ir „duris“ programoms: adresus, kuriais programa gali užklausti arba siųsti duomenis be puslapio apipavidalinimo. Tokios durys vadinamos API (application programming interface). WordPress turi tokią sąsają adresu /wp-json/, tai REST API. WordPress kurso 7.3 pamokoje parodyta, kad ten, pavyzdžiui, galima užklausti naudotojų vardų, jei nieko neapsaugote.
WooCommerce prideda dvi savo API, kurių paskirtis visiškai skirtinga:
| Store API | WooCommerce REST API | |
|---|---|---|
| Adresas | /wp-json/wc/store/v1/... | /wp-json/wc/v3/... |
| Kam skirta | Lankytojo naršyklei (krepšelio ir atsiskaitymo blokams, 2.2 pamoka) | Kitoms programoms: buhalterijai, atsargų apskaitai, programėlei, sąsajai su prekyvietėmis |
| Ar reikia rakto | Ne, vieša | Taip, administratoriaus API rakto (arba prisijungusio naudotojo su teisėmis) |
| Kas joje yra | Prekės, kainos, atsargų būsena, kategorijos, atsiliepimai; paties lankytojo krepšelis ir užsakymas | Viskas: visų užsakymai, klientai, kuponai, nustatymai, ataskaitos |
Taigi Store API yra vitrinos įėjimas: kas Jūsų e. parduotuvėje matyti prekės puslapyje, tas yra ir joje, tik duomenų pavidalu. WooCommerce REST API yra sandėlio galinės durys: jos turi būti užrakintos.
Store API: ką gali užklausti lankytojas (ir bet kas)
Naršyklėje atidarykite:
https://shop.example.com/wp-json/wc/store/v1/productsGausite sąrašą JSON formatu, tai tekstinis duomenų formatas. Kiekvienai prekei matysite, be kita ko, pavadinimą, nuorodos pavadinimą (slug), tipą (paprasta, kintama), prekės puslapio adresą (permalink), SKU, kainas, paveikslėlius, kategorijas, ar prekė yra sandėlyje ir ar ją galima pirkti. Atsakymo antraštėse yra X-WP-Total: prekių, kurias parduotuvė rodo lankytojams, skaičius.
Keletas dalykų, kuriuos verta žinoti:
- Kainos pateikiamos centais. 34,95 € kainuojantis arbatinukas ten nurodytas kaip
"price": "3495"su"currency_minor_unit": 2. Padalykite iš 100. Ar tai kaina su PVM, ar be jo, priklauso nuo Jūsų nustatymo „Rodyti kainas parduotuvėje“ (4.1 pamoka). Šią savybę naudosime 4.1 pamokos užduotyje. - Tik tai, kas matoma. Prekių, kurios yra juodraščiai, privačios arba paslėptos kataloge, Store API neskaičiuoja. Todėl
X-WP-Totalgali būti mažesnis už skaičių, kurį matote administravimo srityje. - Skaityti gali visi, rašyti ne bet kaip. Įdėti ką nors į krepšelį arba atsiskaityti per Store API galima tik su vienkartiniu kodu (nonce) iš puslapio ir tik to lankytojo krepšeliui.
Ar blogai, kad tai vieša? Ne: tai tie patys duomenys, kurie yra Jūsų prekių puslapiuose. Konkurentas, norintis sekti Jūsų kainas, gali tai daryti ir per įprastus puslapius. Vis dėlto verta žinoti: viskas, ką įrašote į prekės lauką, gali patekti į Store API. Niekada nerašykite pirkimo kainų, tiekėjų pavadinimų ar vidinių pastabų į trumpąjį ar ilgąjį aprašymą „nes tema šio lauko vis tiek nerodo“.
Store API taip pat neuždarykite. Krepšelio ir atsiskaitymo blokams jos reikia (2.2 pamoka). Saugumo papildiniai, kurie „išjungia REST API lankytojams“, dėl to kartais sugadina atsiskaitymą. Jei norite apriboti REST API, Store API palikite kaip išimtį.
Piktnaudžiavimas Store API vis dėlto pasitaiko, bet rašymo pusėje: užpuolikai, turintys pavogtų kortelių numerių, bando atlikti tūkstančius smulkių užsakymų. Tai vadinama kortelių tikrinimu (card testing); apie tai kalbama 6.3 pamokoje.
WooCommerce REST API: visada už rakto
Dabar neprisijungę atidarykite:
https://shop.example.com/wp-json/wc/v3/ordersTeisingas atsakymas yra klaidos pranešimas su būsena 401 (neprisijungta) ir kodu, pavyzdžiui, woocommerce_rest_cannot_view. Jūsų e. parduotuvė sako: „Jums to matyti negalima.“ Taip ir turi būti. Jei čia gaunate užsakymų sąrašą, kažkas rimtai negerai: papildinys, atveriantis teises, pakeistas kodas temoje arba raktas, esantis viešame adrese. Tuomet galimas duomenų saugumo pažeidimas (WordPress kursas, 7.5 pamoka, ir žinių bazės straipsnis 6749).
Programos, kurioms reikia prieigos prie Jūsų užsakymų, gauna API raktą. Jį sukuriate skiltyje WooCommerce > Nustatymai > Papildoma > REST API (Advanced > REST API). Raktą sudaro dvi dalys (consumer key ir consumer secret), ir jis priklauso WordPress naudotojui. Pasirenkate teises:
- Peržiūrėti: programa gali užklausti duomenų;
- Atnaujinti: programa gali kurti ir keisti duomenis;
- Peržiūrėti ir atnaujinti: abu.
Taisyklės, kurių visada laikykitės:
- Mažiausios būtinos teisės. Buhalterijos sąsaja, kuri tik parsisiunčia užsakymus, gauna tik skaitymo teisę. Atsargų sąsajai, kuri atnaujina atsargas, reikia rašymo teisės, o ataskaitų įrankiui ne.
- Vienas raktas vienai sąsajai, su aiškiu aprašymu („Buhalterija, tik skaitymas, 2026“). Kai sąsaja nebenaudojama, atšaukiate tik tą raktą.
- Susiekite raktą su naudotoju, turinčiu tinkamas teises. Administratoriaus raktas gali viską, ką gali administratorius. Geriau sukurkite atskirą naudotoją su vaidmeniu Parduotuvės valdytojas (6.2 pamoka).
- Saugiai laikykite slaptąją dalį. Ją matote tik vieną kartą, kai kuriate raktą. Ji turi būti programos nustatymuose arba slaptažodžių tvarkyklėje, o ne el. laiške, bendrinamame dokumente ar viešoje kodo saugykloje.
- Tvarkykite. Skiltyje REST API kiekvienam raktui matote, kada jis paskutinį kartą naudotas. Raktą, kuris nenaudotas kelis mėnesius, atšaukite.
Webhook'ai: Jūsų e. parduotuvė pati praneša kitai programai
API laukia, kol kas nors paklaus. Webhook'as veikia atvirkščiai: įvykus kokiam nors įvykiui Jūsų e. parduotuvėje (naujas užsakymas, pakeista prekė), WooCommerce pati siunčia pranešimą Jūsų nurodytu adresu. Taip Jūsų siuntimo programa iš karto sužino apie užsakymą ir jai nereikia klausinėti kas minutę. Juos nustatote skiltyje WooCommerce > Nustatymai > Papildoma > Webhook'ai.
Trys dalykai, į kuriuos verta atkreipti dėmesį:
- Pranešime yra asmens duomenų. Naujo užsakymo webhook'as siunčia vardą, adresą ir užsakytas prekes. Siųskite tai tik https adresu ir tik šaliai, nurodytai Jūsų privatumo politikoje ir duomenų tvarkymo veiklos įrašuose (5.5 pamoka).
- Slaptasis raktas. Kurdami webhook'ą įrašote slaptąjį raktą. Juo gaunančioji programa gali patikrinti, ar pranešimas tikrai atėjo iš Jūsų e. parduotuvės, o ne iš ko nors, kas atspėjo adresą. Nepalikite jo tuščio ir bendrinkite jį tik su gavėju.
- Nepavykęs pristatymas. Jei gaunantysis adresas kurį laiką nepasiekiamas, po pasikartojančių klaidų WooCommerce gali webhook'ą išjungti. Po sutrikimo patikrinkite skiltyje Webhook'ai, ar jie vis dar aktyvūs.
Nepainiokite to su mokėjimų paslaugų teikėjo webhook'u (4.4 pamoka). Jis veikia atvirkščiai: teikėjas praneša Jūsų e. parduotuvei, kad mokėjimas pavyko.
Praktikoje: taip tai atrodo WooCommerce
Pas kitus talpinimo paslaugų teikėjus tai veikia taip pat; tai pačios WooCommerce dalys.
- Privačiame naršyklės lange atidarykite
/wp-json/wc/store/v1/productssavo (bandomojoje) parduotuvėje. Suraskite prekę ir perskaičiuokite jos kainą. - Tame pačiame privačiame lange atidarykite
/wp-json/wc/v3/orders. Turėtumėte matyti būseną 401. - Eikite į WooCommerce > Nustatymai > Papildoma > REST API. Peržiūrėkite, kokie raktai yra, kuriam naudotojui jie priklauso ir kokias teises turi. Atšaukite raktus, kurių nežinote (arba kurie nebereikalingi).
- Skiltyje Webhook'ai peržiūrėkite, kokie webhook'ai yra ir kokiu adresu jie siunčiami.
- Jei turite saugumo papildinį, kuris riboja REST API, patikrinkite, ar Store API palikta kaip išimtis.
Santrauka
- Store API (
wc/store/v1) yra vieša ir joje yra tai, kas matyti ir Jūsų prekių puslapiuose; krepšelio ir atsiskaitymo blokams jos reikia. - Nerašykite vidinių duomenų į prekių laukus: per Store API jie gali tapti matomi.
- WooCommerce REST API (
wc/v3) be rakto turi grąžinti 401; užsakymų sąrašas be rakto yra galimas duomenų saugumo pažeidimas. - API raktai: mažiausios būtinos teisės, vienas vienai sąsajai, susietas su tinkamu naudotoju, laikomas slaptai, nenaudojami atšaukiami.
- Webhook'ai siunčia asmens duomenis kitai programai: tik per https, su slaptuoju raktu, šaliai iš Jūsų duomenų tvarkymo veiklos įrašų.
Testas (quiz)
Užduotis
Užduotis A2.4: Ką Jūsų e. parduotuvė rodo viešai? Įveskite savo (bandomosios) parduotuvės adresą ir prekių, matomų Jūsų parduotuvėje, skaičių. Programa atlieka tris užklausas be slapukų ir be rakto, tik skaitymui:
/wp-json/wc/store/v1/products?per_page=1(Store API, per REST adresą, kurį nurodo pati Jūsų svetainė);/wp-json/wc/v3/orders?per_page=1;/wp-json/wc/v3/customers?per_page=1.
Gerai: Store API atsako būsena 200 ir JSON sąrašu; antraštė X-WP-Total sutampa su Jūsų įvestu skaičiumi; orders ir customers grąžina 401, 403 arba 404.
Oranžinė: X-WP-Total skiriasi (juodraščių, privačių ar paslėptų prekių neskaičiuojama); Store API grąžina 401 arba 403, dažniausiai dėl saugumo papildinio, todėl atsiskaitymo blokai neveikia.
Raudona: Store API nepasiekiama, nors Jūsų svetainėje veikia WooCommerce; arba orders ar customers grąžina sąrašą. Pastarasis atvejis rimtas: nedelsdami uždarykite prieigą, patikrinkite savo API raktus ir papildinius ir įvertinkite, ar turite pranešti apie duomenų saugumo pažeidimą. Tokiu atveju programa išsaugo tik būsenos kodą, niekada ne turinį.
Po to patys peržiūrėkite skiltis REST API ir Webhook'ai: kokie raktai ir webhook'ai ten yra ir ar žinote, kam skirtas kiekvienas iš jų?
Platesniam skaitymui
- Nemokamas WordPress kursas 7.3: Prisijungimas: slaptažodžiai, dviejų veiksnių autentifikavimas ir brute force
- Nemokamas WordPress kursas 7.5: Įsilaužta: kaip atpažinti, atkurti ir apsisaugoti ateityje
- WordPress: nepavyksta pasiekti xmlrpc.php
- Ar tai yra duomenų saugumo pažeidimas ir ar turiu apie tai pranešti?
- Store API (developer.woocommerce.com, anglų kalba): https://developer.woocommerce.com/docs/apis/store-api/
- Store API užklausų ribojimas (rate limiting) (developer.woocommerce.com, anglų kalba): https://developer.woocommerce.com/docs/apis/store-api/rate-limiting/
