Przejdź do treści

W WooCommerce integracja rywalizuje z wtyczkami o to samo pole

Sam protokół jest prosty: REST API i webhooki. Problem zaczyna się wtedy, gdy plugin do rezerwacji, drugi do cen hurtowych i trzeci do synchronizacji z hurtownią zapisują stan w tym samym momencie co BaseLinker. Zanim podłączymy transport, ustalamy, kto ma prawo pisać.

wc_rest.logbatch
HOOKorder.createdwebhook
PUTproducts/batch (100 szt.)200
VARvariation_id 4821SKU ok
PLUGINkonflikt zapisu stanuwykryty
IDEMPklucz zamówieniabez duplikatu
Webhook do zdarzeń, batch do masowych zapisów, jeden właściciel każdego pola.

Webhook, odpytywanie czy zapis zbiorczy — do czego który

W praktyce używamy wszystkich trzech, ale do różnych rzeczy. Wybór wynika z tego, czy dane zmieniają się punktowo, czy masowo — i jak szybko muszą być widoczne.

Porównanie sposobów wymiany danych z WooCommerce
MechanizmDobre doOpóźnienieObciążenie sklepuRyzyko
Webhooknowe zamówienie, zmiana statususekundyniskiezgubione zdarzenie przy awarii odbiornika
REST — pojedynczy zapiskorekta jednego produktusekundyśrednieprzy tysiącach rekordów zabija hosting
REST — endpoint zbiorczymasowa aktualizacja stanów i cenminutyniskie na rekordtrzeba dobrać rozmiar paczki do limitów serwera
Odpytywanie cyklicznesystemy bez webhookówtyle, ile interwałwysokiepuste przebiegi obciążają bazę
Plik CSV/XMLdobowy feed od hurtownigodzinyniskiebrak reakcji na zdarzenia w ciągu dnia

Zanim podłączymy API, sprawdzamy kto jeszcze pisze do produktu

To najczęstsza przyczyna „integracja działa, ale dane wracają". Poniższe obszary przeglądamy zawsze — niezależnie od tego, ile wtyczek jest zainstalowanych.

01

Zapis stanu

Rozszerzenia do rezerwacji, przedsprzedaży i synchronizacji z hurtownią potrafią nadpisywać stan po każdym zapisie produktu.

02

Ceny i promocje

Wtyczki cen hurtowych i reguł rabatowych dokładają własne pola meta. Trzeba wiedzieć, które z nich czyta koszyk.

03

SKU wariantów

Część rozszerzeń generuje SKU automatycznie. Jeżeli zmieni je po imporcie, integracja traci klucz dopasowania.

04

Checkout i pola zamówienia

Modyfikacje checkoutu zmieniają strukturę danych zamówienia, które później eksportujemy dalej.

05

Nadpisania REST API

Niektóre wtyczki rozszerzają lub filtrują odpowiedzi REST. Trzeba sprawdzić, czy nie zmieniają pól, na których opiera się integracja.

06

Zadania cykliczne

WP-Cron uruchamiany ruchem użytkownika potrafi kumulować zadania. Przy integracji lepszy jest systemowy harmonogram.

Masowa aktualizacja nie może zatrzymać sprzedaży

Każdy zapis produktu w WooCommerce pociąga za sobą akcje innych rozszerzeń i czyszczenie cache. Przy dziesiątkach tysięcy rekordów to się sumuje.

  • paczki o rozmiarze dobranym do limitów pamięci i czasu wykonania,
  • zapis tylko tego, co się zmieniło — porównanie przed wysyłką,
  • okno aktualizacji poza godzinami największego ruchu,
  • ograniczenie liczby równoległych zapytań do sklepu,
  • monitoring czasu odpowiedzi w trakcie przelotu, z automatycznym zwolnieniem tempa.
EtapKontrolaReakcja na błąd
diffco realnie się zmieniłopomiń rekord
batchrozmiar paczkizmniejsz i ponów
zapiskod odpowiedzi RESTkolejka ponowień
zamówienieklucz idempotencjibez duplikatu
koniecraport rozbieżnościalert e-mail

BaseLinker i WooCommerce — pytania

Najczęściej łączymy oba. Webhooki dobrze nadają się do zdarzeń, czyli nowego zamówienia albo zmiany statusu. REST API sprawdza się przy masowej aktualizacji stanów i cen. Sam polling po REST przy dużym katalogu potrafi mocno obciążyć sklep.
Bo wariant ma własne ID i własne SKU, a często jest zapisany bez SKU albo z SKU skopiowanym z produktu nadrzędnego. Integracja dopasowuje wtedy pozycję do rodzica i aktualizuje zły rekord. Unikalne SKU na każdym wariancie rozwiązuje większość takich przypadków.
Te, które nadpisują zapis stanu, dokładają własne pola cen, modyfikują checkout albo podmieniają REST API. Przed wdrożeniem sprawdzamy, co jeszcze zapisuje do produktu i zamówienia, bo integracja i wtyczka potrafią walczyć o to samo pole.
Aktualizujemy paczkami, tylko rekordy zmienione, poza godzinami szczytu i z limitem równoległych zapytań. Warto też pilnować, żeby każdy zapis nie wywoływał pełnego przeliczania i czyszczenia cache dla całego katalogu.
Każde zamówienie dostaje własny klucz idempotencji, a integracja zapisuje, że dana pozycja została już przekazana. Ponowienie po błędzie sieci trafia wtedy w istniejący rekord zamiast tworzyć drugi.

Prześlij listę aktywnych wtyczek i liczbę produktów z wariantami

Na tej podstawie ocenimy ryzyko konfliktów, dobierzemy transport i powiemy, co trzeba uporządkować przed podłączeniem BaseLinkera.