2. modulis · 2.4
Ko Jūsu interneta veikals rāda publiski
2. modulis: Instalēšana un iestatīšana · Lasīšanas laiks: 10 min.
Mērķis: Pēc šīs nodarbības Jūs varēsiet izskaidrot, kas ir WooCommerce Store API un REST API, kuriem datiem ir jābūt publiskiem un kuriem ne, un kā droši lietot API atslēgas un webhooks.
Pamatjēdzieni: API, WordPress REST API, Store API (wc/store/v1), WooCommerce REST API (wc/v3), JSON, publisks un aizsargāts, API atslēga, lasīšanas un rakstīšanas tiesības, minimālās tiesības, webhook, webhook slepenā atslēga, X-WP-Total
Veikals ar divām durvīm
Apmeklētājs Jūsu interneta veikalu redz kā tīmekļa lapas. Taču Jūsu veikalam ir arī “durvis” programmām: adreses, kurās programma var pieprasīt vai nosūtīt datus bez lapas noformējuma. Šādas durvis sauc par API (application programming interface). WordPress tādas ir zem /wp-json/, tā ir REST API. WordPress kursa 7.3. nodarbībā tika parādīts, ka tur, piemēram, var pieprasīt lietotājvārdus, ja nekas nav aizsargāts.
WooCommerce pievieno divas savas API ar ļoti atšķirīgu mērķi:
| Store API | WooCommerce REST API | |
|---|---|---|
| Adrese | /wp-json/wc/store/v1/... | /wp-json/wc/v3/... |
| Kam paredzēta | Apmeklētāja pārlūkam (groza un apmaksas bloki, 2.2. nodarbība) | Citām programmām: grāmatvedībai, krājumu uzskaitei, lietotnei, savienojumam ar tirdzniecības platformu |
| Vai vajag atslēgu | Nē, publiska | Jā, administratora API atslēgu (vai pieteikušos lietotāju ar tiesībām) |
| Kas tajā ir | Produkti, cenas, krājumu statuss, kategorijas, atsauksmes; paša apmeklētāja grozs un pasūtījums | Viss: visu pasūtījumi, klienti, kuponi, iestatījumi, pārskati |
Store API tātad ir skatloga ieeja: tas, kas Jūsu veikalā redzams produkta lapā, ir arī tur, tikai datu veidā. WooCommerce REST API ir noliktavas sētas durvis: tām jābūt aizslēgtām.
Store API: ko apmeklētājs (un ikviens) var pieprasīt
Atveriet pārlūkā:
https://shop.example.com/wp-json/wc/store/v1/productsJūs saņemsiet sarakstu JSON formātā, kas ir teksta formāts datiem. Par katru produktu cita starpā redzams nosaukums, slug, tips (vienkāršs, mainīgs), produkta lapas adrese (permalink), SKU, cenas, attēli, kategorijas, vai tas ir noliktavā un vai to var nopirkt. Atbildes galvenēs ir X-WP-Total: produktu skaits, ko veikals rāda apmeklētājiem.
Dažas lietas, kas jāzina:
- Cenas ir norādītas centos. Tējkanna par € 34,95 tur ir kā
"price": "3495"ar"currency_minor_unit": 2. Jāizdala ar 100. Vai tā ir cena ar PVN vai bez, atkarīgs no Jūsu iestatījuma “Rādīt cenas veikalā” (4.1. nodarbība). Šo īpašību izmantosim 4.1. nodarbības uzdevumā. - Tikai tas, kas ir redzams. Produktus, kas ir melnrakstā, privāti vai paslēpti katalogā, Store API neieskaita. Tāpēc
X-WP-Totalvar būt mazāks par skaitu, ko redzat pārvaldībā. - Lasīt drīkst ikviens, rakstīt ne tik vienkārši. Ielikt kaut ko grozā vai apmaksāt caur Store API var tikai ar vienreizēju kodu (nonce) no lapas, un tikai šī apmeklētāja paša grozam.
Vai tas ir slikti, ka šie dati ir publiski? Nē: tie ir tie paši dati, kas redzami Jūsu produktu lapās. Konkurents, kurš vēlas sekot Jūsu cenām, to var darīt arī ar parastajām lapām. Tomēr der apzināties: viss, ko ierakstāt produkta laukā, var nonākt Store API. Nekad neierakstiet iepirkuma cenas, piegādātāju nosaukumus vai iekšējas piezīmes īsajā vai garajā aprakstā “tāpēc, ka tēma šo lauku tāpat nerāda”.
Arī neslēdziet Store API. Groza un apmaksas blokiem tā ir nepieciešama (2.2. nodarbība). Drošības spraudņi, kas “izslēdz REST API apmeklētājiem”, tāpēc dažkārt sabojā apmaksu. Ja vēlaties ierobežot REST API, izņemiet no ierobežojuma Store API.
Store API ļaunprātīga izmantošana gan pastāv, bet rakstīšanas pusē: uzbrucēji ar zagtiem karšu numuriem mēģina veikt tūkstošiem mazu pasūtījumu. To sauc par card testing; par to ir 6.3. nodarbība.
WooCommerce REST API: vienmēr aiz atslēgas
Tagad, nepiesakoties, atveriet:
https://shop.example.com/wp-json/wc/v3/ordersPareizā atbilde ir kļūdas paziņojums ar statusu 401 (nav pieteicies) un kodu, piemēram, woocommerce_rest_cannot_view. Jūsu veikals saka: “Jums to nav atļauts redzēt”. Tā tam jābūt. Ja šeit saņemat pasūtījumu sarakstu, tad kaut kas ir nopietni nepareizi: spraudnis, kas atver tiesības, pielāgots kods tēmā vai atslēga, kas atrodas publiskā adresē. Tad Jums, iespējams, ir datu noplūde (WordPress kurss, 7.5. nodarbība, un zināšanu bāze 6749).
Programmas, kurām jāpiekļūst Jūsu pasūtījumiem, saņem API atslēgu. To izveidojat sadaļā WooCommerce > Iestatījumi > Uzlabots > REST API (Advanced > REST API). Atslēga sastāv no divām daļām (consumer key un consumer secret) un ir piesaistīta WordPress lietotājam. Jūs izvēlaties tiesības:
- Lasīt: programma drīkst pieprasīt datus;
- Rakstīt: programma drīkst izveidot un mainīt datus;
- Lasīt/Rakstīt: abus.
Noteikumi, kurus ievērojiet vienmēr:
- Minimālās tiesības. Grāmatvedības savienojums, kas tikai iegūst pasūtījumus, saņem tikai lasīšanas tiesības. Krājumu savienojumam, kas atjaunina krājumus, vajag rakstīšanas tiesības, bet pārskatu rīkam ne.
- Viena atslēga katram savienojumam, ar skaidru aprakstu (“Grāmatvedība, tikai lasīšana, 2026”). Ja savienojums vairs netiek lietots, Jūs atsaucat tikai šo atslēgu.
- Piesaistiet atslēgu lietotājam ar atbilstošām tiesībām. Administratora atslēga var visu, ko var administrators. Labāk izveidojiet atsevišķu lietotāju ar lomu Veikala vadītājs (6.2. nodarbība).
- Glabājiet slepeno daļu drošībā. Jūs to redzat tikai vienu reizi, kad to izveidojat. Tai jāatrodas programmas iestatījumos vai paroļu pārvaldniekā, nevis e-pastā, koplietotā dokumentā vai publiskā koda krātuvē.
- Sakārtojiet. Sadaļā REST API katrai atslēgai redzams, kad tā pēdējo reizi izmantota. Atslēgu, kas nav izmantota mēnešiem, atsauciet.
Webhooks: Jūsu veikals zvana citai programmai
API gaida, kamēr kāds jautā. Webhook darbojas otrādi: kad Jūsu veikalā notiek kāds notikums (jauns pasūtījums, mainīts produkts), WooCommerce pats nosūta ziņojumu uz adresi, ko norādāt. Tā Jūsu piegādes programma uzreiz uzzina par pasūtījumu, nejautājot katru minūti. Tos iestatāt sadaļā WooCommerce > Iestatījumi > Uzlabots > Webhooks.
Trīs lietas, kurām pievērst uzmanību:
- Ziņojumā ir personas dati. Webhook par jaunu pasūtījumu nosūta vārdu, adresi un pasūtītos produktus. Sūtiet to tikai uz adresi ar https un tikai pusei, kas ir minēta Jūsu privātuma politikā un apstrādes darbību reģistrā (5.5. nodarbība).
- Slepenā atslēga. Webhook iestatījumos ievadāt slepeno atslēgu. Ar to saņēmēja programma var pārbaudīt, ka ziņojums tiešām nāk no Jūsu veikala, nevis no kāda, kurš uzminējis adresi. Neatstājiet to tukšu un dalieties ar to tikai ar saņēmēju.
- Neizdevusies piegāde. Ja saņēmēja adrese kādu laiku nav sasniedzama, WooCommerce pēc atkārtotām kļūdām var webhook atspējot. Pēc traucējuma pārbaudiet sadaļā Webhooks, vai tie joprojām ir aktīvi.
Nejauciet to ar Jūsu maksājumu pakalpojumu sniedzēja webhook (4.4. nodarbība). Tas darbojas otrādi: pakalpojumu sniedzējs paziņo Jūsu veikalam, ka maksājums ir izdevies.
Praksē: tā tas izskatās WooCommerce
Pie citiem hostinga pakalpojumu sniedzējiem tas darbojas tāpat; tās ir paša WooCommerce sastāvdaļas.
- Privātā logā atveriet
/wp-json/wc/store/v1/productssavā (testa) veikalā. Atrodiet produktu un pārrēķiniet cenu. - Tajā pašā privātajā logā atveriet
/wp-json/wc/v3/orders. Jums jāredz statuss 401. - Atveriet WooCommerce > Iestatījumi > Uzlabots > REST API. Apskatiet, kādas atslēgas ir, kuram lietotājam un ar kādām tiesībām. Atsauciet atslēgas, kuras neatpazīstat vai kuras vairs nelietojat.
- Sadaļā Webhooks apskatiet, kādi webhooks ir un uz kādu adresi tie sūta.
- Ja Jums ir drošības spraudnis, kas ierobežo REST API, pārbaudiet, vai Store API ir izņemta no ierobežojuma.
Kopsavilkums
- Store API (
wc/store/v1) ir publiska, un tajā ir tas pats, kas Jūsu produktu lapās; groza un apmaksas blokiem tā ir nepieciešama. - Neierakstiet iekšējus datus produktu laukos: tie var kļūt redzami caur Store API.
- WooCommerce REST API (
wc/v3) bez atslēgas jāatbild ar 401; pasūtījumu saraksts bez atslēgas ir iespējama datu noplūde. - API atslēgas: minimālās tiesības, viena katram savienojumam, piesaistīta atbilstošam lietotājam, glabāta slepenībā, neizmantotās atsauktas.
- Webhooks sūta personas datus citai programmai: tikai caur https, ar slepeno atslēgu, pusei no Jūsu apstrādes darbību reģistra.
Tests (quiz)
Uzdevums
Uzdevums A2.4: Ko Jūsu interneta veikals rāda publiski? Ievadiet sava (testa) veikala adresi un produktu skaitu, kas redzams Jūsu veikalā. Programma veic trīs pieprasījumus bez sīkdatnēm un bez atslēgas, tikai lasīšanai:
/wp-json/wc/store/v1/products?per_page=1(Store API, caur REST adresi, ko norāda pati Jūsu vietne);/wp-json/wc/v3/orders?per_page=1;/wp-json/wc/v3/customers?per_page=1.
Labi ir, ja: Store API atbild ar statusu 200 un JSON sarakstu; galvene X-WP-Total ir vienāda ar Jūsu ievadīto skaitu; orders un customers atbild ar 401, 403 vai 404.
Oranža: X-WP-Total atšķiras (produkti melnrakstā, privāti vai paslēpti netiek ieskaitīti); Store API atbild ar 401 vai 403, parasti drošības spraudņa dēļ, tāpēc apmaksas bloki nedarbojas.
Sarkans: Store API nav sasniedzama, lai gan Jūsu vietnē darbojas WooCommerce; vai arī orders vai customers atgriež sarakstu. Pēdējais ir nopietni: nekavējoties to slēdziet, pārbaudiet savas API atslēgas un spraudņus un izvērtējiet, vai Jums jāziņo par datu noplūdi. Šādā gadījumā programma saglabā tikai statusa kodu, nekad saturu.
Pēc tam paši apskatiet sadaļas REST API un Webhooks: kādas atslēgas un webhooks tur ir, un vai par katru zināt, kam tas paredzēts?
Papildu lasāmviela
- Bezmaksas WordPress kurss 7.3: Pieteikšanās: paroles, divu faktoru autentifikācija un brute force uzbrukumi
- Bezmaksas WordPress kurss 7.5: Uzlauzts: pazīšana, atjaunošana un novēršana
- WordPress: nav piekļuves xmlrpc.php
- Vai šī ir datu noplūde, un vai man par to ir jāziņo?
- Store API (developer.woocommerce.com, angļu valodā): https://developer.woocommerce.com/docs/apis/store-api/
- Store API pieprasījumu ierobežošana (rate limiting) (developer.woocommerce.com, angļu valodā): https://developer.woocommerce.com/docs/apis/store-api/rate-limiting/
