Dla programistów tworzących niestandardowe integracje WooCommerce, WooCommerce wishlist REST API jest często brakującym elementem. Większość wtyczek do list życzeń całkowicie pomija API. Te, które je udostępniają, zazwyczaj pozostawiają kilka niedokumentowanych punktów końcowych do zgadywania.
Ta luka ma większe znaczenie, niż wygląda. Synchronizacja aktywności z listą życzeń z CRM wymaga programistycznego dostępu. Podobnie jak tworzenie niestandardowego panelu analitycznego, zasilanie odseparowanego sklepu lub przesyłanie danych o intencjach do platformy e-mail.
Ten przewodnik omawia, jak pracować z WooCommerce wishlist REST API udostępnianym przez SaveTo Wishlist. Omówimy uwierzytelnianie, podstawowe operacje CRUD, praktyczne wzorce integracji i webhooks. Tam, gdzie podstawowe ścieżki punktów końcowych nie są w pełni udokumentowane publicznie, wskażemy dokumentację deweloperską wtyczki.
- Dlaczego REST API ma znaczenie dla list życzeń WooCommerce
- Wymagania wstępne i uwierzytelnianie
- Podstawowe operacje API: CRUD dla list życzeń
- Praca z danymi list życzeń: praktyczne wzorce
- Tworzenie niestandardowych integracji: 3 przykłady z życia wzięte
- Webhooks: zdarzenia list życzeń w czasie rzeczywistym
- Obsługa błędów i najlepsze praktyki
- Często zadawane pytania
- Zacznij tworzyć za pomocą WooCommerce wishlist REST API
Dlaczego REST API ma znaczenie dla list życzeń WooCommerce
REST API zamienia dane z list życzeń z funkcji wtyczki, która jest zamknięta, w dostępną warstwę danych. Cały Twój stos technologiczny może z niej czytać i do niej zapisywać. To zmienia to, co jest możliwe w dalszej kolejności.
Bez API Twoje opcje są ograniczone. Bezpośrednie zapytania do bazy danych są kruche, ściśle powiązane ze schematem wtyczki i prawdopodobnie ulegną awarii podczas aktualizacji. Scrapowanie frontendu jest zawodne i powolne. Żadne z nich nie jest prawdziwym rozwiązaniem dla produkcyjnych integracji.
Dzięki odpowiedniemu REST API otrzymujesz standardowe punkty końcowe HTTP, które zwracają ustrukturyzowane dane. Otwiera to możliwości zastosowań, takich jak:
- Synchronizacja z CRM i platformą e-mail: Przesyłaj zdarzenia z list życzeń do Klaviyo, Drip, Mailchimp lub dowolnej platformy, która akceptuje webhooks lub wywołania API.
- Niestandardowe panele administracyjne: Twórz wewnętrzne raporty pokazujące najczęściej dodawane do list życzeń produkty, wskaźniki konwersji z list życzeń i wzorce intencji klientów.
- Integracja z aplikacjami mobilnymi: Pozwól klientom zarządzać listami życzeń z natywnych aplikacji mobilnych za pomocą uwierzytelnionych wywołań API.
- Odseparowane sklepy: Oddziel interfejs użytkownika listy życzeń od WordPressa i renderuj dane listy życzeń w frontendzie React, Vue lub Next.js.
- Potoki analityczne: Przesyłaj dane z list życzeń do hurtowni danych lub narzędzi BI w celu analizy międzykanałowej.

Krótko mówiąc, jeśli tworzysz coś więcej niż standardowe funkcje listy życzeń, API nie jest dodatkiem. Jest to wymóg.
Wymagania wstępne i uwierzytelnianie
Co jest potrzebne przed rozpoczęciem
Najpierw dobra wiadomość: programistyczny dostęp do API jest dostępny zarówno w darmowej, jak i wersji Pro SaveTo Wishlist. Będziesz potrzebować:
- Zainstalowany i aktywowany SaveTo Wishlist (możesz użyć wersji Lite lub Pro tej wtyczki do list życzeń, ponieważ REST API jest zawarte w obu).
- WooCommerce zainstalowany i aktywowany, ponieważ SaveTo Wishlist rozszerza infrastrukturę WooCommerce REST API.
- WordPress z włączonymi przyjaznymi linkami (pretty permalinks). Domyślne linki nie będą działać dla REST API.
- Znajomość koncepcji REST API: metody HTTP, JSON i nagłówki uwierzytelniania.
Jeśli dopiero zaczynasz przygodę z WooCommerce REST API, dokumentacja WooCommerce REST API jest dobrym punktem wyjścia. Obejmuje ona model uwierzytelniania i wzorce żądań, na których opiera się SaveTo Wishlist.
Wzorce uwierzytelniania
REST API SaveTo Wishlist działa zgodnie ze standardowym modelem uwierzytelniania WooCommerce. Uwierzytelniasz się za pomocą kluczy API WooCommerce, które są parą klucza konsumenta i sekretnego klucza konsumenta. Wygeneruj je w swoim panelu WordPress w sekcji WooCommerce, Ustawienia, Zaawansowane, REST API.
W przypadku żądań HTTPS, których należy zawsze używać w środowisku produkcyjnym, przekaż swoje dane uwierzytelniające jako parametry zapytania lub za pomocą uwierzytelniania HTTP Basic Auth:
# Basic Auth approach (recommended)
curl https://yourstore.com/wp-json/wc/v3/wishlist-endpoint \
-u consumer_key:consumer_secret
# Query parameter approach
curl "https://yourstore.com/wp-json/wc/v3/wishlist-endpoint?consumer_key=ck_xxx&consumer_secret=cs_xxx"
Jedna uwaga dotycząca przestrzeni nazw. Dokładna przestrzeń nazw API i ścieżka bazowa punktu końcowego mogą znajdować się pod wc/v3, niestandardową przestrzenią nazw, taką jak saveto/v1, lub innym wzorcem. Sprawdź notatki dla deweloperów SaveTo Wishlist, aby poznać kanoniczne ścieżki. Przykłady w tym przewodniku używają zastępczych ścieżek do zilustrowania koncepcji.
W przypadku lokalnego programowania przez HTTP zamiast HTTPS, WooCommerce powraca do uwierzytelniania OAuth 1.0a w jednej wersji. Większość programistów uważa za prostsze skonfigurowanie lokalnego certyfikatu SSL i użycie zamiast tego uwierzytelniania Basic Auth. Niemniej jednak, OAuth 1.0a jest udokumentowanym rozwiązaniem awaryjnym, jeśli go potrzebujesz.
Co zaobserwowaliśmy: programiści często napotykają błędy 404 na trasach API list życzeń i zakładają, że punkty końcowe nie działają. W większości przypadków problemem jest jedna z trzech rzeczy. Przyjazne linki mogą nie być włączone. Klucze WooCommerce REST API mogą nie mieć odpowiedniego zakresu odczytu lub zapisu. Lub przestrzeń nazw API jest inna niż oczekiwano. Sprawdź te trzy rzeczy przed dalszym debugowaniem.
Podstawowe operacje API: CRUD dla list życzeń
WooCommerce wishlist REST API działa zgodnie ze standardowymi konwencjami REST. Jeśli pracowałeś z API zamówień lub produktów WooCommerce, wzorce będą Ci znajome. To celowy wybór projektowy.
Pobieranie list życzeń (GET)
Pobieranie danych za pomocą WooCommerce wishlist REST API ma taki sam kształt jak każdy standardowy zasób WooCommerce REST. Typowe żądanie GET do listy list życzeń wygląda następująco:
# List all wishlists (may require admin-level API keys)
GET /wp-json/{namespace}/wishlists
# List wishlists for a specific customer
GET /wp-json/{namespace}/wishlists?customer_id=123
# Retrieve a specific wishlist by ID
GET /wp-json/{namespace}/wishlists/{wishlist_id}
Potwierdź dokładne ścieżki punktów końcowych, nazwy parametrów zapytania i format odpowiedzi w notatkach dla deweloperów SaveTo Wishlist przed uruchomieniem. Poniższy kształt jest koncepcyjny, a nie umową.
{
"id": 42,
"customer_id": 123,
"title": "My Birthday List",
"items": [
{
"product_id": 456,
"variation_id": 0,
"date_added": "2026-03-15T10:30:00"
}
],
"date_created": "2026-03-01T09:00:00"
}
Traktuj nazwy pól jako ilustracyjne. Rzeczywisty schemat może się nieznacznie, ale ważnie różnić, szczególnie w zakresie obsługi wariantów i sesji gości.
Tworzenie i aktualizowanie list życzeń (POST/PUT)
Aby programowo dodać elementy do listy życzeń, zazwyczaj wysyłasz żądanie POST ze szczegółami produktu:
# Add an item to an existing wishlist
POST /wp-json/{namespace}/wishlists/{wishlist_id}/items
Content-Type: application/json
{
"product_id": 789,
"variation_id": 0
}
Aktualizacja metadanych listy życzeń, takich jak tytuł, widoczność lub ustawienia udostępniania, odbywa się zgodnie ze standardowym wzorcem PUT lub PATCH:
# Update wishlist title
PUT /wp-json/{namespace}/wishlists/{wishlist_id}
Content-Type: application/json
{
"title": "Holiday Gift Ideas"
}
Potwierdź dokładne zaakceptowane pola i to, czy POST, czy PUT obsługuje aktualizacje, w notatkach deweloperskich wtyczki. Format wymiany danych w obu przypadkach jest standardowym formatem JSON przez HTTP.
Usuwanie elementów z listy życzeń (DELETE)
Usuwanie poszczególnych elementów lub całej listy życzeń odbywa się zgodnie ze standardowym wzorcem REST DELETE:
# Remove a specific item from a wishlist
DELETE /wp-json/{namespace}/wishlists/{wishlist_id}/items/{item_id}
# Delete an entire wishlist
DELETE /wp-json/{namespace}/wishlists/{wishlist_id}
Sprawdź, czy wtyczka traktuje usunięcie jako natychmiastowe, czy jako miękkie usunięcie z oknem odzyskiwania. Ten szczegół ma znaczenie dla każdego interfejsu użytkownika, który pozwala klientom cofnąć usunięcie. We wszystkich przypadkach należy oczekiwać standardowych kodów statusu HTTP: 200 dla pomyślnych operacji, 201 dla tworzenia zasobów, 404 dla brakujących zasobów i 401 lub 403 dla błędów uwierzytelniania.
Praca z danymi listy życzeń: Praktyczne wzorce
Gdy podstawowe operacje CRUD działają, istnieje kilka wzorców, które pojawiają się wielokrotnie w rzeczywistych integracjach. Poznanie ich z góry pozwala uniknąć poprawek w przyszłości.
Pobieranie produktów z listy życzeń ze szczegółami produktu
Podczas wysyłania żądania za pomocą interfejsu API listy życzeń WooCommerce, odpowiedzi zazwyczaj zwracają identyfikatory produktów, a nie pełne obiekty produktów. Aby wyświetlić nazwy produktów, obrazy i ceny obok danych listy życzeń, zazwyczaj należy wysłać kolejne żądanie do interfejsu API produktów WooCommerce:
// Conceptual example: enrich wishlist items with product data
async function getWishlistWithProducts(wishlistId) {
const wishlist = await fetchAPI(`/wishlists/${wishlistId}`);
const enrichedItems = await Promise.all(
wishlist.items.map(async (item) => {
const product = await fetchAPI(`/wc/v3/products/${item.product_id}`);
return {
...item,
product_name: product.name,
product_price: product.price,
product_image: product.images[0]?.src
};
})
);
return { ...wishlist, items: enrichedItems };
}
W przypadku większych list życzeń lub aplikacji o dużym natężeniu ruchu, grupuj wyszukiwania produktów lub buforuj dane produktów lokalnie. Zapobiega to nadmiernemu obciążaniu interfejsu API produktów przy każdym ładowaniu strony.
Filtrowanie i stronicowanie
Interfejs API REST WooCommerce używa standardowych parametrów stronicowania (page, per_page) i zwraca nagłówki stronicowania (X-WP-Total, X-WP-TotalPages). SaveTo Wishlist API powinien przestrzegać tej samej konwencji:
# Get page 2 of wishlists, 20 per page
GET /wp-json/{namespace}/wishlists?page=2&per_page=20
W przypadku parametrów filtrowania należy oczekiwać podobnego wzorca jak w przypadku punktu końcowego zamówień WooCommerce. Typowe filtry obejmują zakresy dat, identyfikatory klientów i identyfikatory produktów. Sprawdź dokumentację wtyczki, aby poznać dokładne parametry zapytania obsługiwane w Twojej wersji.
Wyszukiwanie według klienta lub produktu
Dwa z najczęstszych wzorców zapytań to „pokaż mi wszystkie listy życzeń tego klienta” i „pokaż mi wszystkich klientów, którzy dodali ten produkt do listy życzeń”.
Zapytanie dotyczące klienta jest proste, jeśli interfejs API obsługuje filtr customer_id. Zapytanie dotyczące produktu, czyli które listy życzeń dodali klienci do produktu X, jest bardziej wartościowe dla decyzji merchandisingowych. Może wymagać innego punktu końcowego lub podejścia:
# All wishlists containing a specific product
GET /wp-json/{namespace}/wishlists?product_id=456
Jeśli wyszukiwanie oparte na produktach nie jest bezpośrednio obsługiwane, masz dwie opcje. Pobierz wszystkie listy życzeń i filtruj po stronie klienta, lub skorzystaj z funkcji analitycznych w SaveTo Wishlist Pro. Zaawansowany pulpit analityczny już agreguje ten widok, co często pozwala uniknąć niestandardowej pracy.
Tworzenie niestandardowych integracji: 3 przykłady z życia wzięte
Powyższe wzorce są przydatne w izolacji, ale prawdziwa wartość pojawia się, gdy połączysz je razem. Oto trzy integracje, które często widzimy i sposób, w jaki interfejs API je obsługuje.
Synchronizacja danych listy życzeń z platformą marketingową e-mail
Najczęstszą integracją jest przesyłanie zdarzeń z list życzeń do platformy e-mail. Umożliwia to prowadzenie kampanii, takich jak alerty o obniżce cen i przypomnienia o listach życzeń, bez ręcznych eksportów.
Podejście w czasie rzeczywistym wykorzystuje webhooki list życzeń. Gdy klient dodaje produkt, webhook wysyła dane klienta i produktu do API platformy e-mail. Stamtąd można tworzyć segmenty, takie jak „klienci, którzy dodali produkty do list życzeń w ciągu ostatnich 7 dni” lub natychmiast uruchamiać automatyzacje.
Jeśli Twoja platforma e-mail nie obsługuje przychodzących webhooków, jako rozwiązanie zastępcze działa polling. Zaplanowane zadanie, czy to cron, czy zewnętrzny harmonogram, okresowo wysyła zapytania do API list życzeń. Porównuje dane z ostatnim znanym stanem, a następnie przesyła nowe zdarzenia do platformy e-mail.
Aby uzyskać szerszy wgląd w to, jak dane z list życzeń pasują do strategii e-mail, zapoznaj się z naszym przewodnikiem po marketingu e-mailowym w e-commerce i kampaniach opartych na listach życzeń.
Tworzenie pulpitu nawigacyjnego „najczęściej dodawanych do list życzeń”
Niestandardowy pulpit nawigacyjny pokazujący najczęściej dodawane do list życzeń produkty pomaga zespołom merchandisingu i cenowemu podejmować trafniejsze decyzje. Koncepcyjny przepływ wygląda następująco:
- Wyślij zapytanie do API list życzeń o wszystkie listy życzeń lub użyj punktu końcowego opartego na produktach, jeśli jest dostępny.
- Agreguj liczbę dodanych do list życzeń dla każdego identyfikatora produktu.
- Połącz dane z danymi produktów WooCommerce, aby uzyskać nazwy, kategorie i ceny.
- Wyświetl wynik na niestandardowej stronie administracyjnej WordPress, w zewnętrznym narzędziu BI lub prostym pulpicie nawigacyjnym HTML.
// Conceptual: aggregate wishlist counts by product
async function getMostWishlisted() {
const allWishlists = await fetchAllPages('/wishlists');
const productCounts = {};
allWishlists.forEach(wishlist => {
wishlist.items.forEach(item => {
productCounts[item.product_id] =
(productCounts[item.product_id] || 0) + 1;
});
});
return Object.entries(productCounts)
.sort(([, a], [, b]) => b - a)
.slice(0, 20);
}
Należy jednak pamiętać, że SaveTo Wishlist Pro zawiera już wbudowane analizy i raporty dla tego konkretnego przypadku użycia. Jeśli wbudowany widok jest wystarczający, całkowicie pomijasz niestandardowy kod.
Synchronizacja list życzeń w aplikacji mobilnej
W przypadku sklepów z natywnymi aplikacjami mobilnymi zbudowanymi w React Native, Flutter lub podobnych, API REST pozwala klientom zarządzać listami życzeń z poziomu aplikacji. Te same uwierzytelnione wywołania obsługują pracę:
- Uwierzytelnij użytkownika za pomocą standardowego przepływu uwierzytelniania WooCommerce.
- Pobierz listy życzeń użytkownika podczas ładowania aplikacji.
- Pozwól użytkownikowi dodawać lub usuwać produkty za pomocą wywołań POST i DELETE.
- Synchronizuj w tle, aby listy życzeń pozostawały spójne między wersją internetową a mobilną.
Kluczową kwestią jest obsługa trybu offline. Jeśli klient doda produkt podczas braku połączenia, umieść wywołanie API w kolejce lokalnie i zsynchronizuj po powrocie połączenia.
Webhooki: Zdarzenia list życzeń w czasie rzeczywistym
Podczas gdy API REST pozwala na pobieranie danych na żądanie, webhooki list życzeń przesyłają dane do Twoich systemów w czasie rzeczywistym. Jest to lepsze podejście, gdy potrzebujesz natychmiastowych reakcji na zdarzenia związane z listami życzeń.
Webhooki są zasilane przez silnik automatyzacji SaveTo Wishlist Pro, więc ta część zestawu narzędzi jest dostępna tylko w wersji Pro. Typowe wyzwalacze obejmują zdarzenia, takie jak dodanie produktu do listy życzeń lub utworzenie nowej listy życzeń. Skonfiguruj każdy z nich w panelu automatyzacji list życzeń, wybierz akcję „Wywołaj webhook” i wklej adres URL docelowy.
Kiedy używać webhooków w porównaniu do API REST:
- Webhooki są najlepsze do reakcji w czasie rzeczywistym: wyzwalacze e-mail, pulpity nawigacyjne na żywo, natychmiastowe aktualizacje CRM.
- API REST jest najlepsze do pobierania danych na żądanie: raportowanie, eksporty masowe, akcje inicjowane przez użytkownika w niestandardowych interfejsach użytkownika.
Większość integracji produkcyjnych korzysta z obu. Webhooki obsługują zdarzenia w czasie rzeczywistym, a REST API obejmuje pobieranie danych i operacje wsadowe.
Obsługa błędów i najlepsze praktyki
Podczas tworzenia integracji produkcyjnych z REST API WooCommerce wishlist, kilka nawyków odróżnia kruchy kod od nudnego, niezawodnego kodu.

- Obsługuj błędy z gracją. Typowe odpowiedzi na błędy obejmują 401 dla nieprawidłowych poświadczeń, 403 dla niewystarczających uprawnień, 404 dla brakującej listy życzeń lub elementu oraz 429 przy przekroczeniu limitu żądań. Zaimplementuj logikę ponawiania prób w przypadku przejściowych błędów i wyświetlaj jasne komunikaty dla trwałych błędów.
- Buforuj agresywnie w przypadku integracji intensywnie korzystających z odczytu. Jeśli Twój pulpit nawigacyjny ładuje dane listy życzeń przy każdym ładowaniu strony, buforuj odpowiedzi przez rozsądny czas TTL od 5 do 15 minut. Unieważnij te bufory, gdy zdarzenie webhook sygnalizuje zmianę danych.
- Przestrzegaj limitów żądań. WooCommerce domyślnie nie egzekwuje ścisłych limitów żądań, ale Twoje środowisko hostingowe może to robić. W przypadku hostingu współdzielonego utrzymuj żądania API poniżej rozsądnego progu, aby uniknąć błędów 503.
- Zawsze używaj HTTPS w produkcji. Poświadczenia API są przesyłane z każdym żądaniem. W przypadku zwykłego HTTP są one przesyłane w postaci zwykłego tekstu. Nie ma usprawiedliwienia dla niezaszyfrowanego ruchu API w produkcji.
- Bezpiecznie przechowuj poświadczenia. Klucze konsumenta i sekrety przechowuj w zmiennych środowiskowych lub menedżerze sekretów. Nie koduj ich na stałe w kodzie źródłowym aplikacji ani nie umieszczaj ich w systemie kontroli wersji.
Często zadawane pytania: REST API WooCommerce Wishlist
Czy WooCommerce wishlist REST API jest dostępne w darmowej wersji?
Tak. SaveTo Wishlist Lite, darmowa wersja, jest wyposażona w pełny dostęp do REST API od razu po wyjęciu z pudełka. Możesz programowo odczytywać i zapisywać dane listy życzeń bez uaktualnienia Pro. SaveTo Wishlist Pro dodaje kolejne warstwy, takie jak zautomatyzowane webhooki, zaawansowane analizy i alerty o spadku cen. Ceny Pro zaczynają się od 49,50 USD rocznie dla jednej witryny.
Czy mogę uzyskać dostęp do danych list życzeń gości za pomocą API?
Listy życzeń gości są kluczową funkcją SaveTo Wishlist. Sposób, w jaki API je udostępnia, zależy od obsługi sesji w Twojej wersji wtyczki. Ogólnie rzecz biorąc, dane gościa są powiązane z tokenem sesji, a nie z identyfikatorem klienta. Sprawdź notatki deweloperskie SaveTo Wishlist dotyczące bieżącego wzorca uwierzytelniania sesji gościa.
Jak testować żądania API podczas tworzenia?
Użyj Postman, Insomnia lub curl do wysyłania testowych żądań podczas tworzenia. Skonfiguruj lokalne lub stagingowe środowisko WordPress z zainstalowanym SaveTo Wishlist, aby nie testować na danych produkcyjnych. REST API WooCommerce obsługuje również parametr ?context=edit, który zwraca dodatkowe pola przydatne do debugowania.
Czy mogę użyć API do programowego wyzwalania alertów o spadku cen?
REST API WooCommerce Wishlist daje Ci dostęp do danych listy życzeń. Ale wyzwalacze alertów o obniżce cen są zazwyczaj obsługiwane przez wbudowany silnik automatyzacji SaveTo Wishlist, a nie bezpośrednio przez API. Można zbudować niestandardowe rozwiązanie: monitorować zmiany cen produktów za pomocą WooCommerce Products API, porównywać z danymi listy życzeń, a następnie wyzwalać własne powiadomienia. Mimo to, sprawdź, czy wbudowany system alertów o obniżce cen już pokrywa Twój przypadek użycia, zanim zaczniesz budować od zera.
Jaka jest różnica między używaniem REST API a webhooks?
REST API działa w modelu pull. Twoja aplikacja wysyła żądanie i otrzymuje dane zwrotne. Webhooks działają w modelu push. SaveTo Wishlist wysyła dane do Twojej aplikacji, gdy wystąpi zdarzenie. Używaj API do pobierania danych na żądanie, takich jak pobieranie list życzeń klienta do wyświetlenia lub uruchamianie raportu zbiorczego. Używaj webhooks do reakcji w czasie rzeczywistym, takich jak wyzwalanie e-maila lub aktualizacja panelu na żywo. Większość integracji produkcyjnych korzysta z obu.
Zacznij tworzyć za pomocą WooCommerce wishlist REST API
Programowy dostęp do danych listy życzeń umożliwia integracje, które nie są możliwe tylko za pomocą interfejsu administracyjnego wtyczki. Niezależnie od tego, czy synchronizujesz dane intencji z platformą e-mail, tworzysz niestandardowe analizy, czy zasilasz sklep headless, odpowiednie REST API sprawia, że dane listy życzeń stają się kluczową częścią warstwy danych Twojego sklepu.
Oto, na czym należy się najpierw skupić:
- Dlaczego REST API ma znaczenie dla integracji opartych na listach życzeń.
- Uwierzytelnianie i wymagania wstępne, aby szybko przejść od dokumentacji do działających wywołań.
- Podstawowe operacje CRUD do odczytu, zapisu i usuwania danych listy życzeń.
- Praktyczne wzorce integracji dla synchronizacji e-mail, pulpitów nawigacyjnych i aplikacji mobilnych.
- Webhooks vs. API i kiedy używać każdego podejścia.
Gotowy do budowy? Sprawdź pełną listę funkcji SaveTo Wishlist i stronę WooCommerce Wishlist REST API, aby zapoznać się z najnowszymi notatkami dotyczącymi punktów końcowych. SaveTo Wishlist Pro zaczyna się od 49,50 USD za pierwszy rok i odnawia się za 99 USD rocznie z 14-dniową gwarancją zwrotu pieniędzy.

