Program magazynowy WMS.net

Integracja WMS z WooCommerce - zamówienia i stany sklepu

Jak połączyć magazyn ze sklepem WooCommerce przez REST API: kto odejmuje stan, jak działają statusy i webhooki oraz jak ponowić wymianę danych po błędzie.

Opublikowano · Aktualizacja
www.programmagazyn.pl/integracje/
Dwóch pracowników z laptopami na wózkach paletowych przy palecie zamówień sklepu internetowego
Dwóch pracowników z laptopami na wózkach paletowych przy palecie zamówień sklepu internetowego
W skrócie

Jak połączyć magazyn ze sklepem WooCommerce przez REST API: kto odejmuje stan, jak działają statusy i webhooki oraz jak ponowić wymianę danych po błędzie.

Sklep na WooCommerce liczy własny stan towaru i odejmuje go sam, gdy zamówienie przechodzi w odpowiedni status. Dla magazynu to główna trudność tej integracji: dwa systemy odejmują te same sztuki. Studio WMS.net rezerwuje towar na lokalizacji, prowadzi kompletację i wydanie, a do sklepu odsyła status i stan dostępny. Od 2024 roku historia marki wymienia integracje z platformami e-commerce (Baselinker, Shoper).

Ogólny przepływ danych między platformą a magazynem opisuje strona o integracji WMS z platformami e-commerce, a układ całego magazynu sklepu strona o WMS dla e-commerce. Tutaj schodzimy do punktów końcowych API i do decyzji, które trzeba podjąć przed pierwszą linią kodu. Dane o API pochodzą z oficjalnej dokumentacji REST API WooCommerce (stan na 6.10.2026). Sklepy na Shoperze opisuje strona o integracji WMS z Shoper.

Co WooCommerce udostępnia magazynowi

REST API w WordPressie, klucz z sekretem i brak podanego limitu zapytań.

REST API stoi pod adresem /wp-json/wc/v3/ i wymaga w WordPressie włączonych ładnych adresów (permalinków), bo z domyślnymi nie działa (opis wymagań). Uwierzytelnienie przez HTTPS opiera się na kluczu i sekrecie podawanych w nagłówku HTTP Basic. Dla zwykłego HTTP dokumentacja przewiduje OAuth 1.0a, ale zaleca HTTPS. Magazyn dostaje klucz z uprawnieniami, których naprawdę potrzebuje, a wyciek klucza wymaga jego wymiany.

Dokumentacja nie podaje limitu zapytań na minutę, więc o tempie decyduje wydajność serwera sklepu. Listy przychodzą stronami, domyślnie po 10 pozycji, a rozmiar strony jest ograniczony do 100 rekordów (zasady stronicowania WordPressa). Nagłówki X-WP-Total i X-WP-TotalPages mówią, ile jest rekordów i stron. Zamówienia i produkty można filtrować parametrem modified_after, a zapisy grupować w żądaniach batch do 100 obiektów.

Dane wymieniane ze sklepem WooCommerce i punkty końcowe, którymi się je przenosi
DaneKierunekPunkt końcowy lub zdarzenieOgraniczenie z dokumentacji
Nowe zamówieniaWooCommerce → WMSGET /orders z modified_after; webhook order.createdstronicowanie nagłówkami, strona do 100 rekordów
Zmiana zamówieniaWooCommerce → WMSwebhook order.updatedwysyłany w tle przez wp-cron
Status zamówieniaWMS → WooCommercePUT /orders/{id}, pole statusosiem wartości domyślnych, w tym trash
Stan towaruWMS → WooCommerce/products/batch, /products/{id}/variationsdo 100 obiektów w żądaniu
Numer przesyłkiWMS → WooCommercePOST /orders/{id}/notesflaga customer_note pokazuje notatkę kupującemu
ZwrotWooCommerce → WMS/orders/{id}/refundsapi_refund domyślnie true: zwraca bramka płatności

Przepływ zamówienia i status w sklepie

Status zamówienia w sklepie rozstrzyga, kiedy magazyn ma zacząć pracę.

WooCommerce zmienia stan towaru przy statusie, a nie przy samym zamówieniu (dokumentacja statusów). Status pending oznacza zamówienie bez płatności i sztuki jeszcze się nie zmniejszają. Przy processing płatność jest zaksięgowana i sklep odjął sztuki. Status on-hold czeka na potwierdzenie płatności, a sztuki są już odjęte. Dlatego zlecenie wydania ZWZ powstaje po przejściu w processing. Przy przelewie tradycyjnym dochodzi decyzja o reakcji na on-hold, którą ustala analiza.

Status zamówienia WooCommerce, stan w sklepie i działanie magazynu Macierz o czterech kolumnach i trzech wierszach. Kolumny to etapy: złożone (pending), opłacone (processing), wysłane (completed) i anulowane (cancelled lub failed). Wiersze to stan w sklepie, działanie WMS i zapis do sklepu. Sklep odejmuje sztuki przy opłaceniu i przywraca je przy anulowaniu. WMS zakłada zlecenie i rezerwację po opłaceniu, zamyka WZ po wysyłce i zwalnia rezerwację po anulowaniu. Złożone pending Opłacone processing Wysłane completed Anulowane cancelled, failed Stan w sklepie stan jeszcze nie spada sklep odejmuje sztuki sam bez zmian sklep przywraca sztuki Działanie WMS brak zlecenia, czeka na płatność ZWZ i rezerwacja towaru WZ zamknięte zwolnienie rezerwacji Zapis do sklepu bez zapisu stan dostępny z WMS status completed i notatka stan dostępny z WMS Linia przerywana oznacza ścieżkę wyjątkową. Status on-hold odejmuje sztuki, choć płatność nie jest potwierdzona.
Cztery etapy życia zamówienia w sklepie, stan sztuk po stronie sklepu i działania WMS. Sztuki odejmuje sklep, a rezerwację pod ZWZ zakłada magazyn.

W Studio WMS.net zamówienie przyjmuje postać zlecenia wydania ZWZ z odbiorcą i przewoźnikiem w nagłówku. Kompletację prowadzi aplikacja magazynowa na Androidzie, a pakowanie zamyka dokument WZ. Zasady pracy na hali opisuje strona o kompletacji zamówień.

Stany i źródło prawdy

Sklep odejmuje sztuki sam, więc magazyn musi dopasować moment, w którym nadpisuje liczbę.

Stan w WooCommerce opisują pola manage_stock i stock_quantity, a dostępność pole stock_status (na przykład instock lub outofstock). Pole backorders decyduje, czy sklep sprzedaje poniżej zera. Dla produktu z wariantami stock_quantity produktu obowiązuje wszystkie warianty, chyba że stan podano na poziomie wariantu. Indeks WMS trzeba więc łączyć z wariantem, a nie z produktem nadrzędnym, i robi się to po kodzie SKU albo po EAN.

WMS wysyła stan dostępny, czyli towar na półce pomniejszony o rezerwacje (opis na stronie o stanach magazynowych), jako pełną wartość stock_quantity. Pełna wartość jest bezpieczniejsza niż różnica, bo powtórzenie zapisu niczego nie psuje.

Kto prowadzi poszczególne dane w układzie WooCommerce i WMS
DaneProwadziPowód
Treść zamówienia i płatnośćWooCommerceZmienia się po stronie kupującego
Stan fizyczny i lokalizacjaWMSTylko magazyn widzi skany i dokumenty
Liczba widoczna w ofercieWMS liczy, WooCommerce publikujeSklep odejmuje sztuki sam i chwilowo wyprzedza WMS
Sprzedaż poniżej zeraDecyzja sprzedawcy w sklepiePole backorders ustawia się w produkcie
Status zamówieniaWMS zmienia, WooCommerce przechowujeEtap pracy wynika z dokumentu magazynowego
Kolejność ma znaczenie: najpierw pobrać nowe zamówienia, potem wysłać stan. Zapis starszy niż zamówienie, które sklep już odjął, zawyży liczbę w ofercie.

Taki zawyżony zapis powstaje, gdy sklep przyjął zamówienie i odjął sztuki, a WMS nie zdążył go jeszcze zarezerwować. Usługa pobiera więc zamówienia przed wysyłką stanu, a stan liczy dopiero po założeniu rezerwacji. Zapas bezpieczeństwa dla towarów o małym stanie odejmuje się od wartości wysyłanej do sklepu, a jego wielkość ustala sprzedawca.

Grafika w stylu malarskim: pracownica z tabletem w alejce magazynu pełnej kartonów e-commerce
Stan dostępny rośnie lub maleje w chwili skanu przy kompletacji, więc to magazyn zna liczbę wcześniej niż sklep.

Statusy zamówień i ich mapowanie

Domyślna lista statusów jest krótka, więc etapy pakowania często trafiają do notatek.

Dokumentacja REST API wymienia siedem domyślnych statusów, od pending po failed, a lista zamówień przyjmuje dodatkowo trash. Nie ma wśród nich statusu „spakowane”. Jeżeli sprzedawca nie dodał własnego, etap pakowania pokazuje notatka do zamówienia. Zmianę statusu wykonuje żądanie PUT z polem status, a webhook order.updated informuje WMS o zmianie po stronie sklepu.

Etap w magazynie i status w sklepie WooCommerce
Zdarzenie w WMSDokumentStatus w sklepie
Towar zarezerwowany, zlecenie zapisaneZWZprocessing, bez zmiany
Kompletacja i pakowanie zakończoneWZ w tokuprocessing i notatka
Paczka przekazana kurierowiWZ zamkniętycompleted
Brak towaru na lokalizacjiZWZ z uwagąprocessing i notatka wewnętrzna

Przed każdą zmianą integracja odczytuje bieżący status zamówienia. Gdy sprzedawca lub kupujący anulował zamówienie w trakcie kompletacji, sklep sam przywrócił sztuki, a WMS zwalnia rezerwację i zgłasza towar do odłożenia. Status anulowania zostaje bez zmian.

Etykiety i numery przesyłek

Dokumentacja zamówienia nie ma pola na numer przesyłki, więc wybór miejsca to decyzja.

Zamówienie w REST API nie ma osobnego pola numeru przesyłki. Numer można zapisać w notatce do zamówienia (POST na /orders/{id}/notes, a flaga customer_note pokazuje ją kupującemu), w polu własnym meta_data albo we wtyczce do śledzenia przesyłek, jeśli sklep ją ma. Etykietę wystawia ten, kto ma umowę z przewoźnikiem. Gdy robi to magazyn przez Studio Spedycja.net (opis programu), numer listu jest skojarzony z dokumentem WZ i trafia do sklepu po zamknięciu WZ. Zasady wysyłki opisuje strona o firmach kurierskich.

Zwroty od kupujących

Zwrot założony przez API może uruchomić prawdziwy zwrot pieniędzy.

Zwrot tworzy żądanie POST na /orders/{id}/refunds z kwotą zwrotu i listą pozycji. Parametr api_refund ma domyślnie wartość true, co oznacza, że zwrot generuje API bramki płatności.

Integracja magazynowa nie zakłada zwrotu w sklepie bez wyraźnej decyzji sprzedawcy. Domyślne api_refund=true uruchamia zwrot płatności w bramce.

Magazyn zajmuje się towarem. Przyjmuje paczkę dokumentem przyjęcia i odkłada ją na wydzieloną lokalizację poza stanem dostępnym, a integracja wiąże ją z zamówieniem po numerze. Pozycje zwrotu w sklepie pozwalają zestawić, co miało wrócić, z tym, co przyjęto. Decyzję o zwrocie pieniędzy podejmuje sprzedawca, na przykład w systemie ERP połączonym z WMS.

Błędy i ponowienia

Webhook potrafi sam się wyłączyć, więc sam nie wystarcza.

Webhooki WooCommerce wysyłają dane żądaniem POST, domyślnie w tle przez wp-cron, więc zdarzenie może przyjść z opóźnieniem (dokumentacja webhooków). Po pięciu kolejnych nieudanych dostarczeniach webhook zostaje wyłączony i trzeba go włączyć ponownie przez REST API. Nagłówek X-WC-Webhook-Signature niesie podpis HMAC-SHA256, którym odbiorca sprawdza autentyczność danych. Dlatego usługa robi odczyt kontrolny zamówień z parametrem modified_after i startuje od nieco wcześniejszej daty niż ostatni udany odczyt. Duplikaty odsiewa klucz zamówienia.

Typowe sytuacje błędne i reakcja integracji ze sklepem WooCommerce
SytuacjaSkutekReakcja integracji
Webhook wyłączony po pięciu błędachZdarzenia przestają przychodzićOdczyt kontrolny z modified_after, alarm i ponowne włączenie przez API
Opóźnienie wp-cronZdarzenie przychodzi późnoOdczyt kontrolny nie zależy od wp-cron
Przeciążony serwer sklepuZapisy kończą się błędem lub przekroczeniem czasuMniejsze paczki batch i ponowienie z rosnącym odstępem
Ten sam numer zamówienia pobrany dwa razyZdwojone zlecenie wydaniaOdrzucenie drugiej próby po kluczu zamówienia
Stan wysłany przed pobraniem zamówieniaLiczba w ofercie jest zawyżonaKolejność: najpierw zamówienia, potem stan

Każdy zapis do sklepu trafia najpierw do tabeli wysyłkowej z unikalnym identyfikatorem komunikatu. Po powrocie łączności usługa wysyła tylko to, czego sklep nie przyjął, bez dublowania ruchu. Błąd, który zniknął po ponowieniu, nadal trzeba zapisać w dzienniku integracji.

Co ustala analiza przedwdrożeniowa

Cztery decyzje, od których zależy zakres prac.

Integracje w Studio WMS.net, w tym z platformami sprzedażowymi, wykonuje usługa Windows SSService.exe, instalowana na serwerze. Strona opisuje drogę wymiany i granice API WooCommerce, a nie listę gotowych ustawień ani gotową wtyczkę do sklepu. Zakres dla konkretnego sklepu potwierdza analiza przedwdrożeniowa. Na liście decyzji są cztery pozycje:

  • Zasady stanu - jak WMS nadpisuje stock_quantity przy tym, że sklep odejmuje sztuki sam, i co ustawia pole backorders.
  • Pobieranie zamówień - webhook, odpytywanie albo oba naraz, oraz interwał odczytu kontrolnego.
  • Statusy - kiedy WMS zmienia status na completed, czy sklep ma własne statusy i jakie notatki trafiają do kupującego.
  • Numer przesyłki - notatka, pole własne albo wtyczka do śledzenia.

Zakres prac programistycznych zależy od liczby i złożoności systemów, z którymi magazyn ma się komunikować. Zasady wyceny opisuje cennik.

Słownik pojęć

Pojęcia z integracji ze sklepem WooCommerce

Terminy, które padają przy łączeniu magazynu z WooCommerce, wyjaśnione w kontekście wymiany danych.

RESTInterfejs REST API
Zbiór adresów, pod którymi program wywołuje funkcje sklepu zapytaniami HTTP. W WooCommerce stoją pod /wp-json/wc/v3/.
KEYKlucz i sekret API
Para ciągów znaków wygenerowana w sklepie, którą integracja podaje w nagłówku HTTP Basic przez HTTPS. Wyciek wymaga wymiany pary.
HOOKWebhook
Powiadomienie wysyłane przez sklep pod wskazany adres po zdarzeniu, na przykład po zmianie zamówienia. Po pięciu nieudanych dostarczeniach sklep go wyłącza.
CRONwp-cron
Harmonogram zadań WordPressa, przez który domyślnie idą webhooki. Powoduje, że zdarzenie może przyjść z opóźnieniem.
STSStatus zamówienia
Etap życia zamówienia w sklepie, na przykład processing albo completed. Od statusu zależy, czy sklep odejmuje sztuki ze swojego stanu.
BATCHŻądanie batch
Jedno zapytanie tworzące, zmieniające lub usuwające do 100 obiektów. Nadaje się do wysyłania stanów paczkami.
NOTENotatka do zamówienia
Wpis przypięty do zamówienia przez POST na /orders/{id}/notes. Flaga customer_note pokazuje go kupującemu.
ATPStan dostępny
Towar na półce pomniejszony o rezerwacje. To ta wartość trafia do pola stock_quantity w sklepie.
FAQ

Integracja WMS ze sklepem WooCommerce - najczęstsze pytania

01

Czy WooCommerce ma limit zapytań do API?

Dokumentacja REST API go nie podaje, więc o tempie decyduje wydajność serwera sklepu. Listy przychodzą stronami, domyślnie po 10 pozycji i najwyżej po 100, a zapisy można grupować po 100 obiektów w żądaniu batch. Tempo wymiany ustala analiza.

02

Dlaczego WooCommerce i WMS liczą stan osobno?

Sklep sam odejmuje sztuki, gdy zamówienie przechodzi w processing lub on-hold, i przywraca je przy cancelled i failed. WMS wysyła stan dostępny jako pełną wartość, a kolejność pobrań i zapisów chroni przed zawyżeniem. Regułę dla sklepu ustala analiza.

03

Co się stanie, gdy webhook przestanie przychodzić?

Po pięciu kolejnych nieudanych dostarczeniach WooCommerce wyłącza webhook, a włączyć go trzeba przez REST API. Dlatego integracja robi odczyt kontrolny zamówień z parametrem modified_after i zgłasza alarm.

04

Czy Studio WMS.net ma gotową wtyczkę do WooCommerce?

Strona nie obiecuje gotowej wtyczki. Integracje, w tym z platformami sprzedażowymi, wykonuje usługa Windows SSService.exe, a zakres dla sklepu na WooCommerce potwierdza analiza przedwdrożeniowa. Historia marki wymienia integracje z platformami e-commerce, wśród nich z Baselinkerem i Shoperem.

05

Gdzie zapisać numer przesyłki w WooCommerce?

Dokumentacja zamówienia nie ma osobnego pola numeru przesyłki. Można go zapisać w notatce do zamówienia, w polu własnym meta_data albo we wtyczce do śledzenia. Wybór ustala analiza.

Chcesz zobaczyć, jak zamówienie ze sklepu WooCommerce przechodzi przez magazyn?

Uruchom bezpłatne demo programu magazynowego WMS.net albo opisz swój sklep w zapytaniu o wycenę.