Jeśli masz działający sklep detaliczny, kanał B2B zwykle najtaniej dobudować w tej samej instalacji: osobne konta firmowe, cenniki z ERP i oddzielna ścieżka zakupowa. PrestaShop ma grupy klientów i tryb B2B w standardzie, WooCommerce wymaga wtyczek albo własnego kodu. Dedykowana platforma B2B ma sens, gdy nie prowadzisz detalu, a procesy siedzą w ERP z wieloma magazynami. Poniżej porównanie trzech dróg i lista pułapek z naszego wdrożenia B2B na WooCommerce dla hurtowni.
Czym sklep B2B różni się od zwykłego sklepu internetowego?
Hurtownik kupuje inaczej niż klient detaliczny. Zakłada konto firmowe, które ktoś musi zaakceptować, widzi swoje ceny (często netto i z indywidualnym rabatem), a czasem ma dostęp do innych produktów niż detal. Na fakturze musi być firma i NIP. Zamówienie trafia do ERP, a stany i cenniki wracają z ERP do sklepu.
Każdy z tych punktów to osobna funkcja, której zwykły sklep nie potrzebuje. Wybór platformy sprowadza się do pytania, ile z nich masz w standardzie, a ile trzeba dopisać.
WooCommerce, PrestaShop czy platforma B2B: co wybrać?
| WooCommerce | PrestaShop | Dedykowana platforma B2B | |
|---|---|---|---|
| Funkcje B2B w standardzie | Brak, potrzebne wtyczki lub własny kod | Grupy klientów, ceny i rabaty per grupa, tryb B2B | Tak, to jej główne zadanie |
| Ceny netto/brutto per klient | Do dopisania | Ustawienie per grupa klientów | Zwykle w standardzie |
| Widoczność produktów | Do dopisania | Widoczność kategorii per grupa | Zwykle w standardzie |
| B2B i B2C w jednej instalacji | Tak, przy własnym kodzie | Tak, przez grupy klientów | Zwykle tylko B2B |
| Kiedy wybrać | Masz sklep na WooCommerce i chcesz dodać hurt | Masz sklep na PrestaShop albo proste potrzeby B2B | Nie masz detalu, procesy siedzą w ERP, wiele magazynów |
W praktyce decyduje to, co już masz. Migracja działającego detalu tylko po to, żeby dostać grupy klientów z PrestaShop, rzadko się opłaca. Z drugiej strony nowa hurtownia bez sprzedaży detalicznej nie potrzebuje całego bagażu sklepu B2C.
Jak zbudowaliśmy kanał B2B na WooCommerce dla hurtowni?
Hurtownia miała działający sklep detaliczny z około 1900 produktami i chciał dodać sprzedaż hurtową bez stawiania drugiego sklepu. Oto decyzje i błędy, które warto znać przed startem.
Konto B2B to status, a nie rola
Klient B2B to u nas meta użytkownika ze statusem: oczekujący, aktywny, nieaktywny. Konto oczekujące nie może się zalogować. Akceptacja odbywa się w panelu z edycją w wierszu: status, cennik (hurt1, hurt2, hurt3), rabat procentowy z datami od–do, progi i wysyłki.
Ceny z ERP przychodzą netto, sklep liczy brutto
Sklep trzyma ceny brutto z VAT 23%, a cenniki z ERP są netto, więc dla klienta B2B filtr ceny dolicza VAT. Pułapka: filtr, który w środku pobiera cenę produktu przez zwykłe get_price(), wywołuje sam siebie i wpada w rekurencję. Rozwiązanie to get_price('edit'), które zwraca surową wartość bez filtrów.
Drugi problem: cenniki z ERP miało tylko około 38 z 1904 produktów. Zamiast kazać komuś wpisywać resztę ręcznie, dla produktów bez cennika liczymy netto z ceny sklepowej.
Flaga kanału siedzi na wariancie
ERP oznacza, które pozycje idą do B2B, ale robi to na wariancie, a nie na produkcie nadrzędnym. Pierwsze, naiwne zapytanie gubiło przez to 2 z 12 produktów B2B. 2065 z 2935 pozycji nie ma flagi i zostaje w detalu.
Widoczność trzeba pilnować w czterech miejscach
- w zapytaniu SQL do produktów,
- na listach wpisów,
- w funkcji
is_visibleproduktu, - przy wejściu z bezpośredniego linku, które kończy się błędem 404.
Filtry nie mogą działać w panelu admina, REST API (z niego korzystają integracje), cronie, WP-CLI i ajaxie. Inaczej synchronizacja z ERP przestaje widzieć część produktów.
Checkout: firma wymuszona po stronie serwera
Pierwsza wersja blokowała pola firmy atrybutem disabled. Takie pole przeglądarka pomija przy wysyłce formularza, więc NIP w ogóle nie docierał do zamówienia. Wymuszenie danych firmy musi być w PHP. Zamówienia B2B tagujemy na hooku tworzenia zamówienia, bo hurtownicy zamawiają też przez REST, InPost Pay i ręcznie przez obsługę w panelu.
Masz ten sam problem? Masz sklep na WooCommerce albo PrestaShop i chcesz dodać hurt? Powiemy, ile z tej listy da się zrobić w Twojej instalacji. Opisz sytuację →
Jedna instalacja B2B i B2C czy dwie osobne?
Wybraliśmy jedną. Kanał hurtowy działa pod prefiksem /b2b/, z osobnymi kontami, osobnymi ciasteczkami logowania i osobną sesją WooCommerce dla każdego kanału. W dwóch kartach przeglądarki można mieć dwa niezależne koszyki. Nie trzeba było nic zmieniać w nginx ani w Cloudflare.
Wspólna instalacja oznacza jeden katalog produktów, jedną integrację z ERP i jeden panel. Kosztem jest to, że każda funkcja musi wiedzieć, w którym kanale działa:
- wyszukiwarka segmentuje wyniki na b2b, b2c i wszystkie (u nas po klasie na body; w innym sklepie robiliśmy to polem typu oferty b2c/b2b/all na produkcie i wariancie),
- panel retencji liczy klientów według kanału pierwszego zamówienia,
- cache musi rozróżniać zalogowanego hurtownika od gościa.
Dwie osobne instalacje mają sens, gdy kanały mają różne katalogi, różne zespoły i niewiele wspólnego poza logo.
Jak cache i wydajność wyglądają w sklepie B2B?
Filtr cen i widoczności uruchamia się na każdej stronie, także dla gości z detalu. Po optymalizacji spadł z 38 do 6 zapytań i z 21 do 8,6 ms na gościa B2C. Pierwszy pomiar robiliśmy na ciepłym cache i wyszedł zbyt optymistycznie, więc mierz także na zimnym.
Większa wpadka dotyczyła cache. Reguła w Cloudflare używała OR zamiast AND i cache'owała strony mimo ciasteczka logowania, mimo że zalogowany hurtownik powinien dostawać stronę generowaną dla niego. Problem miał trzy warstwy: Cloudflare, konfigurację rocket-nginx i WP Rocket. Każdą trzeba było sprawdzić osobno. Szerzej o tym, jak ciasteczka wpływają na cache, piszemy w tekście o przyczynach wolnego WooCommerce.
Jak zintegrować sklep B2B z ERP?
W tej hurtowni cenniki i flagi kanału przychodzą z ERP do sklepu. W innym projekcie łączyliśmy sklep z Comarch ERP XL przez pośrednika, czyli osobny mikroserwis. Przez niego idą stany magazynowe (po kodzie EAN), dane klienta (wyszukiwanie po telefonie) i dokumenty. Z tamtego wdrożenia zostały nam trzy lekcje:
- filtry dokumentów w pośredniku łączą się przez OR, nie AND, więc zapytanie o konkretne dokumenty zwraca więcej, niż się spodziewasz,
- zadania przestały się przetwarzać, bo licencja pośrednika była nieaktywna od około 19 miesięcy, choć usługi pokazywały status „uruchomiona”,
- timeout 30 s nie wynikał z kodu sklepu, tylko z konfiguracji WebService.
Integrację z ERP zaplanuj przed wyborem platformy. To ona zwykle decyduje o czasie wdrożenia, a nie wygląd sklepu.
Kiedy wybrać dedykowaną platformę B2B?
Gdy nie prowadzisz sprzedaży detalicznej, procesy (kredyt kupiecki, wiele magazynów, zatwierdzanie zamówień) żyją w ERP, a sklep ma być głównie oknem na ten system. Wtedy dobudowywanie hurtu do platformy B2C oznacza walkę z jej domyślnymi założeniami. Jeśli masz detal i chcesz dodać hurt, zacznij od kanału B2B w obecnym sklepie. Tak pracujemy w ASAPDevs przy wdrożeniach sklepu B2B.
