Przejdź do treści

Ustawienia plików cookie

Prosimy wybrać, na które rodzaje plików cookie Państwo zezwalają. Wybór można zmienić w dowolnym momencie w Ustawieniach plików cookie na dole każdej strony. Polityka prywatności

Niezbędne

Zawsze włączone

Potrzebne do logowania, zachowania koszyka i zapamiętania wyborów. Są zawsze włączone.

Jakie pliki cookie?
  • weboke_sessie, weboke_klant, weboke_remember: sesja i pozostanie zalogowanym
  • weboke_basket: koszyk
  • wkBtwIncl: wyświetlanie cen z VAT lub bez VAT
  • wok_cookies: wybór dotyczący plików cookie, 12 miesięcy

Mierzą, która reklama prowadzi do odwiedzin lub zamówienia, abyśmy nie płacili za reklamy, które nic nie dają.

Jakie pliki cookie?
  • Google Ads przez Google Tag Manager (_gcl_au, _gcl_aw), do 90 dni
  • OpenAI Ads, reklamy w ChatGPT
  • wok_aff: przez którego partnera trafili Państwo do nas (program partnerski), 60 dni

4,6

Kraj i język

Każdy kraj ma własną stronę z cenami i stawką VAT tego kraju.

Wyświetl

Co Państwa sklep pokazuje publicznie

Moduł 2: Instalacja i konfiguracja · Czas czytania: 10 min

Cel lekcji: Po tej lekcji będą Państwo potrafili wyjaśnić, czym są Store API i REST API WooCommerce, które dane powinny być publiczne, a które nie, oraz jak bezpiecznie korzystać z kluczy API i webhooków.

Kluczowe pojęcia: API, REST API WordPressa, Store API (wc/store/v1), REST API WooCommerce (wc/v3), JSON, dane publiczne i chronione, klucz API, uprawnienia do odczytu i zapisu, zasada minimalnych uprawnień, webhook, tajny klucz webhooka, X-WP-Total

Sklep z dwojgiem drzwi

Odwiedzający widzi Państwa sklep jako strony internetowe. Sklep ma jednak także „drzwi” dla programów: adresy, pod którymi program może pobierać lub wysyłać dane, bez wyglądu strony. Takie drzwi nazywa się API (application programming interface). WordPress ma takie API pod adresem /wp-json/, jest to REST API. Kurs WordPress pokazał w lekcji 7.3, że jeśli niczego się nie zabezpieczy, można tam na przykład pobrać nazwy użytkowników.

WooCommerce dodaje dwa własne API o zupełnie różnym przeznaczeniu:

Store APIREST API WooCommerce
Adres/wp-json/wc/store/v1/.../wp-json/wc/v3/...
Dla kogoPrzeglądarka odwiedzającego (bloki koszyka i zamówienia, lekcja 2.2)Inne programy: księgowość, magazyn, aplikacja, integracja z platformą sprzedażową
Czy potrzebny kluczNie, jest publiczneTak, klucz API administratora (lub zalogowany użytkownik z uprawnieniami)
Co zawieraProdukty, ceny, stan magazynowy, kategorie, opinie; koszyk i zamówienie samego odwiedzającegoWszystko: zamówienia wszystkich klientów, klientów, kupony, ustawienia, raporty

Store API to zatem wejście od strony witryny sklepowej: to, co widać w sklepie na stronie produktu, jest w nim również, tylko w postaci danych. REST API WooCommerce to tylne drzwi do magazynu: muszą być zamknięte na klucz.

Store API: co może pobrać odwiedzający (i każdy inny)

Prosimy otworzyć w przeglądarce:

https://shop.example.com/wp-json/wc/store/v1/products

Otrzymają Państwo listę w formacie JSON, czyli tekstowym formacie danych. Dla każdego produktu widać między innymi nazwę, slug, typ (prosty, z wariantami), adres strony produktu (permalink), SKU, ceny, zdjęcia, kategorie, informację, czy jest dostępny w magazynie i czy można go kupić. W nagłówkach odpowiedzi znajduje się X-WP-Total: liczba produktów, które sklep pokazuje odwiedzającym.

Kilka rzeczy, o których warto wiedzieć:

  • Ceny są podawane w centach. Dzbanek do herbaty za € 34,95 (≈ 153,52 zł) występuje jako "price": "3495" z "currency_minor_unit": 2. Należy podzielić przez 100. Czy jest to cena z VAT, czy bez, zależy od ustawienia „Wyświetlaj ceny w sklepie” (lekcja 4.1). Z tej właściwości korzystamy w zadaniu z lekcji 4.1.
  • Tylko to, co widoczne. Produktów zapisanych jako szkic, prywatnych lub ukrytych w katalogu Store API nie uwzględnia. Dlatego X-WP-Total może być niższe niż liczba produktów w panelu administracyjnym.
  • Odczyt jest dostępny dla wszystkich, zapis nie bez ograniczeń. Dodanie czegoś do koszyka lub złożenie zamówienia przez Store API jest możliwe tylko z jednorazowym kodem (nonce) ze strony i wyłącznie dla własnego koszyka danego odwiedzającego.

Czy to problem, że te dane są publiczne? Nie: są to te same dane, które widnieją na stronach produktów. Konkurent, który chce śledzić Państwa ceny, może to robić także za pomocą zwykłych stron. Warto jednak pamiętać: wszystko, co wpiszą Państwo w pole produktu, może trafić do Store API. Prosimy nigdy nie umieszczać cen zakupu, nazw dostawców ani notatek wewnętrznych w krótkim lub długim opisie „bo motyw i tak nie wyświetla tego pola”.

Prosimy też nie blokować Store API. Bloki koszyka i zamówienia go potrzebują (lekcja 2.2). Wtyczki bezpieczeństwa, które „wyłączają REST API dla odwiedzających”, czasem z tego powodu psują składanie zamówień. Jeśli chcą Państwo ograniczyć REST API, prosimy wyłączyć Store API spod tego ograniczenia.

Nadużycia Store API się zdarzają, ale po stronie zapisu: atakujący próbują złożyć tysiące drobnych zamówień skradzionymi numerami kart. Nazywa się to card testing; zajmuje się tym lekcja 6.3.

REST API WooCommerce: zawsze zabezpieczone kluczem

Prosimy teraz otworzyć, bez logowania:

https://shop.example.com/wp-json/wc/v3/orders

Prawidłowa odpowiedź to komunikat o błędzie ze statusem 401 (niezalogowany) i kodem w rodzaju woocommerce_rest_cannot_view. Sklep mówi: „nie mają Państwo dostępu do tych danych”. Tak właśnie powinno być. Jeśli w tym miejscu pojawi się lista zamówień, oznacza to poważny problem: wtyczka, która otwiera uprawnienia, zmodyfikowany kod w motywie albo klucz umieszczony w publicznym adresie. Wtedy mogło dojść do naruszenia ochrony danych (kurs WordPress, lekcja 7.5, oraz baza wiedzy 6749).

Programy, które potrzebują dostępu do zamówień, otrzymują klucz API. Tworzy się go w WooCommerce > Ustawienia > Zaawansowane > REST API (Advanced > REST API). Klucz składa się z dwóch części (consumer key i consumer secret) i jest przypisany do użytkownika WordPressa. Wybierają Państwo uprawnienia:

  • Odczyt: program może pobierać dane;
  • Zapis: program może tworzyć i zmieniać dane;
  • Zapis/odczyt: oba.

Zasady, których należy zawsze przestrzegać:

  1. Minimalne uprawnienia. Integracja księgowa, która tylko pobiera zamówienia, otrzymuje wyłącznie odczyt. Integracja magazynowa, która aktualizuje stany, potrzebuje zapisu, ale narzędzie do raportów już nie.
  2. Jeden klucz na jedną integrację, z jasnym opisem („Księgowość, tylko odczyt, 2026”). Gdy integracja przestaje być używana, unieważniają Państwo tylko ten klucz.
  3. Prosimy przypisać klucz do użytkownika z odpowiednimi uprawnieniami. Klucz administratora może wszystko, co może administrator. Lepiej utworzyć osobnego użytkownika z rolą Kierownik sklepu (lekcja 6.2).
  4. Tajną część należy przechowywać bezpiecznie. Widać ją tylko raz, podczas tworzenia. Jej miejsce jest w ustawieniach programu lub w menedżerze haseł, a nie w e-mailu, udostępnionym dokumencie czy publicznym repozytorium kodu.
  5. Porządkowanie. W sekcji REST API widać przy każdym kluczu, kiedy był ostatnio używany. Klucz, który od miesięcy nie był używany, należy unieważnić.

Webhooki: sklep sam powiadamia inny program

API czeka, aż ktoś o coś zapyta. Webhook działa odwrotnie: przy zdarzeniu w sklepie (nowe zamówienie, zmieniony produkt) WooCommerce sam wysyła wiadomość na wskazany przez Państwa adres. Dzięki temu program wysyłkowy od razu wie o nowym zamówieniu i nie musi pytać co minutę. Webhooki konfiguruje się w WooCommerce > Ustawienia > Zaawansowane > Webhooki.

Trzy rzeczy, na które warto zwrócić uwagę:

  • Wiadomość zawiera dane osobowe. Webhook przy nowym zamówieniu przesyła imię i nazwisko, adres oraz zamówione produkty. Prosimy wysyłać je tylko na adres z https i do podmiotu wymienionego w polityce prywatności oraz w rejestrze czynności przetwarzania (lekcja 5.5).
  • Tajny klucz. Przy webhooku wpisuje się tajny klucz. Dzięki niemu program odbierający może sprawdzić, że wiadomość rzeczywiście pochodzi z Państwa sklepu, a nie od kogoś, kto odgadł adres. Prosimy nie zostawiać go pustego i udostępniać go wyłącznie odbiorcy.
  • Nieudane dostarczenie. Jeśli adres odbiorcy przez dłuższy czas jest nieosiągalny, WooCommerce może po wielokrotnych błędach wyłączyć webhook. Po awarii prosimy sprawdzić w sekcji Webhooki, czy są nadal aktywne.

Nie należy mylić tego z webhookiem operatora płatności (lekcja 4.4). Działa on w odwrotnym kierunku: operator informuje Państwa sklep, że płatność się powiodła.

W praktyce: tak to wygląda w WooCommerce

U innych dostawców hostingu działa to tak samo; są to elementy samego WooCommerce.

  1. Prosimy otworzyć w oknie prywatnym /wp-json/wc/store/v1/products w swoim sklepie (testowym). Proszę wyszukać produkt i przeliczyć cenę.
  2. W tym samym oknie prywatnym prosimy otworzyć /wp-json/wc/v3/orders. Powinien pojawić się status 401.
  3. Prosimy przejść do WooCommerce > Ustawienia > Zaawansowane > REST API. Proszę sprawdzić, jakie klucze istnieją, do jakiego użytkownika są przypisane i z jakimi uprawnieniami. Klucze, których Państwo nie rozpoznają (lub już nie potrzebują), należy unieważnić.
  4. W sekcji Webhooki prosimy sprawdzić, jakie webhooki istnieją i na jaki adres trafiają.
  5. Jeśli używają Państwo wtyczki bezpieczeństwa, która ogranicza REST API, prosimy sprawdzić, czy Store API jest wyłączone spod tego ograniczenia.

Podsumowanie

  • Store API (wc/store/v1) jest publiczne i zawiera to, co widnieje na stronach produktów; bloki koszyka i zamówienia go potrzebują.
  • Prosimy nie umieszczać danych wewnętrznych w polach produktów: mogą stać się widoczne przez Store API.
  • REST API WooCommerce (wc/v3) bez klucza powinno zwracać 401; lista zamówień bez klucza oznacza możliwe naruszenie ochrony danych.
  • Klucze API: minimalne uprawnienia, jeden na integrację, przypisany do odpowiedniego użytkownika, przechowywany w tajemnicy, nieużywane należy unieważniać.
  • Webhooki przesyłają dane osobowe do innego programu: tylko przez https, z tajnym kluczem, do podmiotu z rejestru czynności przetwarzania.

Quiz

1. Które dane powinny być publicznie dostępne przez Store API?



2. Otwierają Państwo bez logowania /wp-json/wc/v3/orders i otrzymują listę zamówień. Co to oznacza?



3. Program księgowy ma tylko pobierać zamówienia. Jaki klucz API należy utworzyć?



4. Wtyczka bezpieczeństwa blokuje całe REST API dla odwiedzających. Klienci nie mogą potem złożyć zamówienia. Dlaczego?



5. Dlaczego przy webhooku wpisuje się tajny klucz?



Zadanie

Zadanie A2.4: Co Państwa sklep pokazuje publicznie? Prosimy wpisać adres swojego sklepu (testowego) oraz liczbę produktów widocznych w sklepie. Program wykonuje trzy zapytania, bez plików cookie i bez klucza, wyłącznie w trybie odczytu:

  1. /wp-json/wc/store/v1/products?per_page=1 (Store API, przez adres REST, który podaje sama witryna);
  2. /wp-json/wc/v3/orders?per_page=1;
  3. /wp-json/wc/v3/customers?per_page=1.

Zadanie A2.4: Co Państwa sklep pokazuje publicznie?



Wprowadzone dane i wyniki sprawdzania nie są zapisywane. Przeglądarka zapamiętuje udzielone odpowiedzi oraz informację, czy zadanie zostało zaliczone. Po zalogowaniu w Moje kursy zapisywana jest jedynie informacja, że zadanie zostało zaliczone (lub prawie zaliczone); tam można ją również usunąć.

Prawidłowo oznacza: Store API odpowiada statusem 200 i listą JSON; nagłówek X-WP-Total jest równy wpisanej przez Państwa liczbie; orders i customers zwracają 401, 403 lub 404.

Pomarańczowy: X-WP-Total się różni (produkty w szkicu, prywatne lub ukryte nie są liczone); Store API zwraca 401 lub 403, zwykle z powodu wtyczki bezpieczeństwa, przez co bloki zamówienia nie działają.

Czerwony: Store API jest nieosiągalne, choć witryna działa na WooCommerce; albo orders lub customers zwracają listę. To drugie jest poważne: prosimy natychmiast zablokować dostęp, sprawdzić klucze API i wtyczki oraz ocenić, czy trzeba zgłosić naruszenie ochrony danych. W takim przypadku program zapisuje wyłącznie kod statusu, nigdy treść.

Następnie prosimy samodzielnie zajrzeć do sekcji REST API i Webhooki: jakie klucze i webhooki tam są i czy wiedzą Państwo, do czego służy każdy z nich?

Dalsza lektura

Chwileczkę…

Konfiguracja domen

Dla każdej domeny można ustawić serwery nazw, powiązanie z hostingiem oraz to, kto zostanie właścicielem.

Wczytywanie domen…