Profesjonalny system B2B dla Magento 2 Open Source
- Kompatybilność
- 2.4.9, 2.4.8, 2.4.7
- Motyw Hyvä
- Zgodny z motywem Hyvä
Opis / Profesjonalny system B2B dla Magento 2 Open Source
MAGENTO 2 · MAGENTO OPEN SOURCE · FIRMY · HANDEL B2B
Połącz sprzedaż B2B i B2C w jednej instalacji Magento.
Kowal B2B Suite rozbudowuje Magento Open Source o firmy, weryfikację NIP i VAT UE w VIES, indywidualne warunki handlowe, listy zakupowe, oferty RFQ, kredyt kupiecki, akceptacje, dokumenty i integracje.
Obsługuj kontrahentów w portalu samoobsługowym, a pracę handlowców prowadź w panelu Magento.
17 modułów i bazowy motyw · REST i GraphQL · Adapter konta Hyvä
JAK TO DZIAŁA W PRAKTYCE
01 · Ustalasz model handlowy
Definiujesz firmy, kanały, ceny i źródła danych.
02 · Konfigurujesz proces B2B
Przypisujesz role, katalog, warunki oraz akceptacje.
03 · Łączysz systemy i wdrażasz
Dobierasz adaptery i sprawdzasz pełne scenariusze.
Pełny zakres funkcji Kowal B2B Suite
Od rejestracji kontrahenta i ustalenia ceny po ofertę, zamówienie, dokumenty i wymianę danych. Dobierz aktywowane obszary do zasad sprzedaży swojej firmy.
Firmy i cykl obsługi kontrahenta
Prowadź kartotekę firm z nazwą, NIP-em, identyfikatorem zewnętrznym i opiekunem handlowym.
- Rejestracja firmy i jej akceptacja, aktywacja, blokowanie lub odrzucenie.
- Statusy: oczekująca, aktywna, nieaktywna, zablokowana i odrzucona.
- Powiązania z kontami klientów Magento, grupą klientów i kanałami sprzedaży.
- Historia zmian firmy, użytkowników, ról, adresów i kontaktów.
Użytkownicy, role, adresy i kontakty
Jedna firma może mieć wielu kupujących oraz własne role z zestawem uprawnień.
- Przypisywanie i dezaktywacja użytkowników oraz zmiana ich ról.
- Osobne prawa do zamawiania, podglądu zamówień firmy, RFQ, dokumentów, użytkowników i adresów.
- Adresy rozliczeniowe i dostawy, adresy domyślne dla website oraz wspólne adresy firmy.
- Kontakty firmowe, w tym kontakt główny; edycja dostępna zgodnie z uprawnieniami.
- Dane firmy i NIP pozostają oddzielone od prywatnych danych adresowych kupującego.
Weryfikacja NIP i VAT UE w systemie VIES
Sprawdzaj NIP z prefiksem kraju, czyli numer VAT UE, bezpośrednio w karcie firmy B2B w panelu Magento. Przycisk „Sprawdź w VIES” uruchamia weryfikację i wyświetla wynik przy polu NIP.
- Numery VAT UE z kodem kraju, np.
PL1234567890; weryfikacja obejmuje kraje rozpoznawane przez Magento jako należące do UE. - Normalizacja zapisu: ignorowanie spacji, kropek i myślników oraz zamiana liter na wielkie przed sprawdzeniem.
- Obsługa greckiego prefiksu EL przez mapowanie na kod kraju GR używany w Magento.
- Kontrola formatu i kraju przed wysłaniem zapytania do VIES oraz komunikat wskazujący potrzebę poprawienia danych.
- Rozróżnienie wyników: numer prawidłowy w VIES, numer nieprawidłowy w VIES, nieprawidłowe dane wejściowe lub niedostępna weryfikacja.
Weryfikację uruchamia uprawniony administrator dla wcześniej zapisanej firmy i numeru VAT, w kontekście przypisanego jej aktywnego kanału B2B. Zmieniony numer należy najpierw zapisać.
Zapis wyników VIES i kontrola aktualności danych
Wynik sprawdzenia jest zapisywany od razu przy firmie wraz z datą i godziną weryfikacji oraz sprawdzonym numerem VAT. Ułatwia to ustalenie, które dane wymagają ponownego sprawdzenia.
- Kolumna statusu VIES na liście firm z filtrem: niesprawdzony, prawidłowy, nieprawidłowy, błędny format lub VIES niedostępny.
- Kolumna daty sprawdzenia z filtrowaniem według zakresu dat.
- Reset po zmianie NIP-u: zapisanie innego numeru przywraca status „niesprawdzony” oraz usuwa poprzednią datę i zapis sprawdzonego numeru.
- Zachowanie wyniku przy zmianie samego formatowania, np. spacji, separatorów lub wielkości liter, oraz przy edycji innych danych firmy.
- Powiązanie wyniku z właściwym numerem: jeśli NIP zmieni się w trakcie sprawdzania, moduł odrzuca zapis wyniku dla poprzedniego numeru i prosi o ponowienie.
Gdy usługa nie może potwierdzić numeru, administrator otrzymuje osobny komunikat o niedostępności weryfikacji z prośbą o ponowienie później. Błąd połączenia jest odróżniany od negatywnego wyniku VIES.
B2B i B2C w jednej instalacji
Włączaj B2B dla wybranych website. Wszystkie widoki sklepu w danym website korzystają z tego trybu, a pozostałe website mogą obsługiwać B2C.
- Firma może mieć przypisania do wielu aktywnych website B2B.
- Aktywność relacji i grupa klientów firmy są ustalane osobno dla każdego website.
- Ceny, katalogi, dokumenty, limity, oferty i integracje działają we właściwym kontekście firmy i kanału.
- Dodanie website do firmy nie przenosi kont Magento Customers i nie zmienia automatycznie ich grup.
Kontrola dostępu i zamknięty portal B2B
Wybierz jeden z trzech modeli: sklep publiczny, sklep wymagający logowania albo publiczny katalog z ograniczeniami dla gości.
- Wymuszone logowanie z wyjątkami dla wybranych akcji lub ścieżek URL.
- Powrót do żądanej strony po zalogowaniu.
- Niezależne ukrywanie cen oraz wyłączanie zakupów dla gości.
- Własne komunikaty i link do logowania zamiast ceny lub przycisku zakupu.
- Ukrycie standardowego „Dodaj do koszyka” oraz serwerowa blokada dodawania na klasycznym frontendzie.
- Rejestracja klientów pozostawiona otwarta lub wyłączona.
Ochrona standardowego frontendu wymaga osobnego odwzorowania w niestandardowym publicznym API lub frontendzie headless.
Migracja obecnych klientów do firm
Akcja masowa Assign or Create Company pozwala uporządkować istniejącą bazę klientów Magento.
- Filtrowanie klientów przypisanych i nieprzypisanych do firmy, także w eksporcie i akcjach masowych.
- Dopasowanie firmy po znormalizowanym NIP-ie lub utworzenie nowej firmy; konta bez NIP-u otrzymują osobne firmy.
- Skopiowanie domyślnych adresów i głównego kontaktu do nowej firmy.
- Nadanie roli kupującego z podstawowymi prawami B2B.
- Zachowanie dotychczasowych grup klientów, pomijanie już przypisanych kont oraz raport błędów i wyników migracji.
Panel administracyjny i operacje masowe
Zarządzaj firmami i ich powiązanymi danymi z jednego menu B2B. Karta klienta Magento zawiera pole przypisania do firmy.
- Listy i formularze firm, użytkowników, ról, adresów, kontaktów i audytu.
- Masowa zmiana statusu, opiekuna, przypisania do website, aktywności relacji i grupy klientów firmy.
- Masowe tworzenie lub aktualizacja ról oraz możliwość nadania roli wszystkim aktywnym użytkownikom wybranych firm.
- Osobna transakcja i wpisy audytowe dla każdej przetwarzanej firmy.
- Uprawnienia administratorów Magento ograniczające dostęp do poszczególnych operacji.
Cenniki, ceny kontraktowe i progi ilościowe
Ustalaj ceny według firmy, website, SKU, waluty i ilości. Priorytet ma cena kontraktowa, następnie przypisany cennik B2B, a potem cena katalogowa Magento.
- Wiele cenników i ich przypisania do firm z priorytetami.
- Ceny kontraktowe oraz pozycje cenników z progami ilościowymi i polami okresu obowiązywania.
- Zastosowanie cen kontraktowych i cennikowych w koszyku.
- Indeksowanie cen, audyt zmian i narzędzie Explain Price pokazujące źródło wybranej ceny.
- Import i eksport CSV pozycji cennika oraz obsługa cen przez API.
Podpowiedzi cen w RFQ uwzględniają sklep, klienta, ilość, walutę i podatki; przy źródle katalogowym także odpowiednie promocje Magento.
Katalog dopasowany do firmy
Ograniczaj widoczność produktów regułami dla konkretnego kontrahenta lub całego website.
- Reguły obejmujące wskazane produkty, kategorie albo cały katalog.
- Akcje allow i deny; zakaz ma pierwszeństwo przed zezwoleniem.
- Indeks widoczności i filtrowanie list produktów na frontendzie.
- Kontrola dostępu do ukrytego SKU oraz ponowna walidacja w listach zakupowych, RFQ i checkout.
- Podgląd widoczności produktu dla firmy i przebudowa indeksu przez API.
Brak pasującej reguły sam w sobie nie ukrywa produktu. Oferta pozostaje oparta na natywnym katalogu Magento.
Szybkie zamówienia i listy zakupowe
Klient tworzy nazwane listy zakupowe i dodaje wiele pozycji po SKU, zamiast wyszukiwać produkty pojedynczo.
- Wklejanie do 100 wierszy jednocześnie: SKU, ilość i opcjonalna notatka, np.
SKU-001;10;Dostawa do magazynu. - Listy z flagą domyślną, pozycjami, ostatnią ceną B2B i walutą.
- Sprawdzenie SKU, statusu produktu, website, widoczności dla firmy, dodatniej ilości i ceny B2B.
- Dodanie listy do koszyka po ponownej walidacji.
- Podgląd list i usuwanie pozycji przez administratora, eksport pozycji do CSV.
- Narzędzie Debug SKU oraz ekrany logów importów i błędów wierszy dla procesów zasilających te dane.
RFQ: zapytanie ofertowe z konta klienta
Uprawniony kupujący może sam wysłać zapytanie z tytułem, notatką i od 1 do 200 pozycji.
- Wyszukiwanie po SKU, nazwie produktu oraz istniejących atrybutach EAN, EAN13, GTIN lub barcode.
- Podpowiedzi ograniczone do aktywnych, widocznych produktów typu simple i virtual.
- Ilość, opcjonalna oczekiwana cena jednostkowa netto i komentarz do pozycji.
- Podgląd cen netto i brutto oraz odświeżanie podpowiedzi po zmianie ilości z zachowaniem ręcznie wpisanej ceny.
- Rozliczanie ceny w walucie sklepu i zgodnie z jego konfiguracją podatkową.
- Walidacja całego zapytania; błąd pozycji wycofuje zapis, a formularz zachowuje dane do poprawy.
RFQ: przygotowanie i negocjowanie oferty
Handlowiec tworzy RFQ także w panelu Magento, wybierając website, Store View, firmę, klienta, walutę i produkty.
- Zapis szkicu lub wysłanego zapytania; wyszukiwanie produktów i podpowiedzi cen netto/brutto.
- Ceny oczekiwane i oferowane, suma negocjowana, termin ważności, komentarze i notatki handlowe.
- Statusy procesu, historia decyzji oraz ochrona przed akceptacją oferty po terminie.
- Wysłanie gotowej oferty e-mailem z linkami do podglądu i PDF wymagającymi zalogowania.
- Akceptacja lub odrzucenie przez klienta, opcjonalny powód odrzucenia oraz decyzje administratora.
- Osobny PDF klienta i administratora; notatki wewnętrzne i historia administracyjna pozostają w wariancie admina.
Od zaakceptowanej oferty do zamówienia
Przenieś pozycje i uzgodnione ceny z zaakceptowanej oferty do procesu zakupowego Magento.
- Convert to Cart tworzy koszyk klienta z pozycjami i cenami ofertowymi.
- Klient z prawem do zamawiania przechodzi do standardowego checkoutu i wybiera adres, dostawę i płatność.
- Create Order w panelu tworzy zamówienie automatycznie, gdy dostępne są wymagane adresy oraz jednoznaczne metody płatności i dostawy.
- Gdy potrzebny jest wybór warunków, oferta trafia do natywnego formularza tworzenia zamówienia w panelu.
- Zachowanie kontekstu Store View oferty i powiązania z przygotowanym koszykiem lub zamówieniem.
Checkout, płatności, dostawy i numer PO
Standardowy proces zamówienia Magento zostaje uzupełniony o reguły B2B.
- Kontrola aktywnej firmy, przypisania do website i prawa użytkownika do zamawiania.
- Walidacja katalogu i dostępności ceny B2B przy składaniu zamówienia.
- Reguły dozwolonych metod płatności i dostawy dla firmy oraz website.
- Firmowe adresy rozliczeniowe i dostawy z domyślnymi wartościami właściwymi dla kanału.
- Numer zamówienia zakupu klienta (PO) i komentarz do zamówienia.
- Zapis firmy, kupującego, statusu kredytu, akceptacji i eksportu w kontekście B2B zamówienia.
Limity kupieckie i warunki płatności
Kontroluj limit, wykorzystanie i dostępną kwotę osobno dla firmy, website i waluty.
- Warunki płatności, aktywacja lub blokada limitu i opcja dopuszczenia jego przekroczenia.
- Wybór metod płatności korzystających z kredytu; pozostałe metody działają bez skonfigurowanego limitu.
- Atomowa rezerwacja przed złożeniem zamówienia i przypisanie jej do zapisanego zamówienia.
- Zwolnienie rezerwacji po błędzie bez utworzonego zamówienia, pełnej zapłacie, anulowaniu lub zamknięciu.
- Ręczne korekty wykorzystania, podgląd ekspozycji i historia zdarzeń.
- Cron uzgadniający rezerwacje po przerwanym procesie lub chwilowym błędzie.
Częściowa zapłata pozostawia pełną rezerwację do całkowitego rozliczenia lub anulowania.
Akceptacja zamówień i kontrola realizacji
Ustal reguły akceptacji według firmy, website, waluty i progu wartości. Przy wielu regułach znaczenie mają priorytet i próg kwotowy.
- Przypisanie aktywnych użytkowników firmy jako akceptujących.
- Automatyczne utworzenie oczekującego wniosku dla zamówienia spełniającego regułę.
- Decyzje: zatwierdzenie, odrzucenie lub anulowanie, z komentarzem i audytem.
- Oznaczenie eksportu jako zablokowanego oraz wstrzymanie zamówienia, gdy jego stan na to pozwala.
- Po akceptacji aktualizacja statusu B2B i zwolnienie wstrzymania; odrzucenie lub anulowanie pozostawia blokadę eksportu.
Gotowy mechanizm zamyka oczekujący wniosek jedną decyzją. Wieloetapowy obieg wymaga dodatkowego rozszerzenia, a integracja musi respektować status blokady eksportu.
Dokumenty handlowe w portalu klienta
Udostępniaj faktury, korekty, dokumenty dostawy/WZ i potwierdzenia zamówień właściwej firmie.
- Automatyczne tworzenie dokumentów z zamówień, faktur, wysyłek i korekt Magento Sales.
- Konfiguracja źródła dokumentów, statusu początkowego i generowania poszczególnych typów; obsługa modelu hybrydowego Magento + API.
- Ręczny upload PDF w panelu, metadane, daty, kwoty, waluty i powiązania z encjami Magento.
- Oryginalne pliki z systemu zewnętrznego udostępniane bez zmiany ich zawartości.
- Pobieranie po sprawdzeniu firmy, website, uprawnień i statusu dokumentu.
- Podgląd dostępu klienta, plików i logów synchronizacji w panelu.
Edytowalne PDF-y i wersje językowe
Wspólny generator PDF obsługuje dokumenty sprzedaży i oferty RFQ.
- Szablony HTML/CSS edytowane w panelu, z podglądem na danych przykładowych.
- Osobne szablony według typu dokumentu, website i odbiorcy; lokalny szablon ma pierwszeństwo przed globalnym.
- Własne tytuły potwierdzeń, faktur, korekt, WZ i ofert handlowych.
- Logo, dane sprzedawcy i nabywcy, NIP, adresy, pozycje, podsumowania oraz informacje i instrukcje płatności i dostawy w dokumentach Sales.
- Wariant RFQ dla klienta oddzielony od danych wewnętrznych administratora.
- Tłumaczone etykiety zgodnie z językiem sklepu; słowniki obejmują polski i wiele innych języków europejskich.
Zmiany szablonu dotyczą nowo generowanych PDF-ów. Wcześniej zapisane pliki wymagają ponownego wygenerowania.
Konto firmy i adapter Hyvä Themes
Panel firmy łączy dane kontrahenta, adresy, kontakty, użytkowników, dokumenty, kredyt, listy zakupowe i RFQ.
- Firmowe adresy oraz pięć ostatnich zamówień w natywnym panelu konta.
- Podgląd zamówień własnych lub całej firmy zależnie od uprawnień, chronione linki PDF i ponowne zamówienie dla uprawnionego pierwotnego kupującego.
- Sześć przełączników widoczności natywnych linków: adresy, zamówienia, pliki do pobrania, zapisane płatności, recenzje i newsletter.
- Dołączony opcjonalny adapter Hyvä Themes z responsywnymi tabelami, formularzami i nawigacją konta.
- Włączenie adaptera per Store View; domyślnie wyłączony, aktywny tylko przy Hyvä i B2B.
Adapter obejmuje konto klienta. Hyvä Checkout, koszyk i minicart wymagają osobnego zakresu integracji. Przełączniki menu sterują widocznością linków, a uprawnienia są sprawdzane niezależnie.
Import i eksport CSV danych B2B
Przenoś i aktualizuj dane za pomocą profili przypisanych do konkretnego website.
- Firmy, przypisania użytkowników i role wraz z uprawnieniami.
- Definicje cenników, ceny kontraktowe i reguły widoczności katalogu.
- Metadane dokumentów, powiązania istniejących plików dokumentów i limity kupieckie.
- Upload CSV, walidacja i tryb dry-run, który pozwala sprawdzić import przed zapisem.
- Historia zadań, logi błędów z numerem wiersza oraz pobieranie raportu błędów i pliku eksportu.
- Oddzielny import i eksport pozycji cenników w obszarze Pricing.
Import powiązań użytkowników korzysta z istniejących kont Magento; import plików dokumentów wskazuje pliki już dostępne w dozwolonej lokalizacji.
REST API i GraphQL
Udostępnij procesy B2B integracjom lub własnym interfejsom przez API.
- REST: konfiguracja website, firmy i użytkownicy, produkty, dostępność MSI, ceny, katalog, listy zakupowe, RFQ, dokumenty, limity, akceptacje, kontekst zamówień, import/eksport i integracje.
- Operacje zbiorcze na firmach oraz klucz idempotencji przy tworzeniu firmy.
- Raporty produktowe, w tym braki tłumaczeń i danych magazynowych.
- GraphQL: odczyty danych firmy, cen, list, ofert, dokumentów, kredytu, akceptacji i zadań integracyjnych.
- Mutacje GraphQL dla list zakupowych, procesu RFQ oraz publikowania, przetwarzania i ponawiania zadań integracji.
Zakres dostępu zależy od uprawnień i kontekstu operacji. REST i GraphQL udostępniają określone kontrakty; ich zestawy operacji nie są identyczne.
Integracje ERP, PIM, WMS i CRM
Pakiet dostarcza infrastrukturę do połączenia Magento z systemami firmy.
- Profile według website, typu systemu, kierunku wymiany i adaptera.
- Mapowania lokalnych i zewnętrznych identyfikatorów.
- Tworzenie zadań synchronizacji z terminem uruchomienia, danymi wejściowymi i kluczem idempotencji.
- Statusy przetwarzania, wyniki, liczba prób, logi i błędy.
- Ręczne ponawianie tego samego zadania oraz lista zadań wymagających interwencji (Dead Letter Queue).
Połączenie z konkretnym ERP, PIM, WMS, CRM, EDI lub systemem zakupowym wymaga adaptera i uruchomienia procesu przetwarzania. We wdrożeniu ustala się źródła firm, cen, stanów, zamówień i dokumentów.
Dashboard, raporty i diagnostyka
Panel B2B pokazuje liczbę i statusy firm, aktywnych użytkowników, cenniki, reguły katalogu, błędy i ostatnie zmiany.
- Raporty firm bez aktywnego website, użytkowników lub cennika oraz klientów bez firmy.
- Raporty brakujących cen w indeksie, danych źródeł MSI i tłumaczeń nazw produktów.
- Dokumenty bez pliku, błędy importów i integracji oraz zamówienia oczekujące na akceptację lub zablokowane do eksportu.
- Filtrowanie raportów według website, podgląd rekordów i eksport CSV.
- Status systemu, audyt firm i decyzji, logi kredytowe i synchronizacji oraz narzędzia Explain Price i Debug SKU.
- Konfiguracja diagnostyki B2B i retencji logów.
Jeden pakiet, modułowa architektura
Pakiet kowal/metapackage-b2b-suite zawiera 17 modułów Magento oraz bazowy motyw frontend/Kowal/b2b. Obejmuje Base, Access Control, Company, Admin UI, Pricing, Catalog Permissions, Quick Order, Quote, Checkout, Credit Limit, Approval, Document, Import/Export, Integration, REST API, GraphQL i opcjonalny adapter Hyvä.
Instalacja odbywa się przez jeden pakiet Composer. Po nadaniu dostępu do repozytorium wdrożenie obejmuje włączenie potrzebnych modułów, aktualizację bazy Magento, konfigurację website i firm oraz kompilację, publikację zasobów i czyszczenie cache zgodnie z trybem sklepu.
Wymagania i zakres wdrożenia
Projekt jest ukierunkowany na Magento Open Source 2.4.9, a pakiet wymaga PHP ^8.3. Korzysta z natywnego katalogu, koszyka, checkoutu i MSI Magento oraz generatora PDF mPDF.
Dostępny jest klasyczny frontend Magento i opcjonalny adapter konta Hyvä Themes. Bazowy motyw B2B stanowi punkt wyjścia do dopasowania wyglądu portalu.
Zakres wdrożenia ustalamy na podstawie wersji sklepu, motywu, płatności, dostaw i systemów zewnętrznych. Kompatybilność oraz pełny proces zakupowy wymagają sprawdzenia w docelowej instalacji.
Zaplanuj wdrożenie B2B dopasowane do firmy
Chcesz dopasować moduł do swojego sklepu? Zapytaj o wdrożenie Kowal B2B Suite i omów konfigurację lub potrzebne rozszerzenia.
Przed zaplanowaniem wdrożenia zobacz, jak ograniczyć ręczną obsługę sprzedaży B2B w Magento 2 oraz ile kosztuje ręczna obsługa zamówienia B2B.
Więcej informacji
| Motyw Hyvä | Zgodny z motywem Hyvä |
|---|---|
| Zgodność z szablonem | Hyvä, Luma / Blank, KOWAL |
Konfiguracja Integracji
Kowal B2B API — pełna dokumentacja REST
Wersja kontraktu:
V1· Źródło prawdy:Kowal_B2BApi/etc/webapi.xml· Odbiorcy: administratorzy sklepów, partnerzy wdrożeniowi i zespoły integrujące ERP, PIM, WMS lub system zakupowy.
1. Przeznaczenie i granice API
Kowal B2B API udostępnia dane i procesy B2B działające w Magento 2: firmy, katalog i ceny indywidualne, szybkie zakupy, dokumenty, limit kupiecki, akceptacje, RFQ oraz kolejki integracyjne. Jest to REST API do integracji systemowych; nie zastępuje standardowych endpointów Magento dla katalogu, koszyka, checkoutu i konta klienta.
Dokument opisuje wyłącznie endpointy aktualnie wystawione przez moduł. Brak w nim obietnicy operacji, których kontrakt V1 nie udostępnia, np. tworzenia zamówienia przez REST, CRUD cenników lub edycji konfiguracji website.
2. Uzyskanie dostępu i zasady współpracy
2.1. Proces uruchomienia integracji
- Integrator przekazuje administratorowi sklepu cel integracji, środowisko (test/produkcja), system źródłowy, zakres danych oraz listę wymaganych obszarów API.
- Administrator zakłada lub konfiguruje integrację Magento, przypisuje jej minimalne uprawnienia ACL i przekazuje bezpiecznym kanałem:
baseUrl, token,websiteId,companyId(gdy dotyczy), walutę oraz dane testowe. - Integrator wykonuje test
GET /V1/kowal-b2b/websites/:websiteId/config, a następnie testy funkcjonalne na środowisku testowym. - Przed produkcją obie strony uzgadniają harmonogram synchronizacji, maksymalny rozmiar danych, retry, właściciela danych i sposób zgłaszania błędów.
- Tokeny są przechowywane wyłącznie w sejfie sekretów; administrator rotuje lub odbiera je przy zmianie dostawcy, użytkownika albo zakresu integracji.
2.2. Odpowiedzialności
| Strona | Odpowiedzialność |
|---|---|
| Administrator sklepu | Konfiguracja B2B website, firmy i relacji firmy z website, tokenu oraz ACL; przekazanie danych testowych; decyzja o dostępie do danych. |
| Integrator | Bezpieczne przechowywanie tokenu, poprawne użycie kontekstu websiteId/companyId, walidacja danych, obsługa błędów i ponowień, nieujawnianie danych innych firm. |
| Właściciel procesu biznesowego | Uzgodnienie źródła prawdy dla cen, dokumentów, RFQ, limitów i statusów synchronizacji. |
Nie należy używać tokenu administratora w aplikacji klienckiej ani współdzielić jednego tokenu przez niezależne systemy. Każda integracja powinna mieć własny token i wyłącznie wymagane ACL.
2.3. Uprawnienia
Magento weryfikuje token Bearer oraz ACL przypisane do użytkownika administracyjnego lub integracji. Endpointy B2B wymagają jednej z poniższych grup uprawnień:
| ACL | Zakres |
|---|---|
config |
Websites i feature flags |
companies, company_save, company_users, batch |
Firmy, ich użytkownicy i import wsadowy firm |
products, prices, catalog_permissions |
Katalog, dostępność, ceny i widoczność |
import_export, quick_order, documents |
Profile importu/eksportu, listy zakupowe i dokumenty |
credit_limits, approvals, orders, quotes |
Limit, workflow akceptacji, kontekst zamówień i RFQ |
system_integrations |
Profile, mapowania i joby integracyjne |
Zakres powinien wynikać z przeznaczenia integracji. Przykład: system zakupowy zwykle potrzebuje products, prices, catalog_permissions, quick_order i quotes; ERP obsługujący dokumenty — documents oraz, jeśli jest właścicielem synchronizacji, system_integrations.
3. Konwencje techniczne
Adres, nagłówki i parametry
Adres bazowy ma postać https://b2b.example.com/rest/V1. Wszystkie ścieżki dalej w dokumencie są podawane od /V1; pełny adres endpointu to BASE_URL + ścieżka.
Authorization: Bearer <token>
Accept: application/json
Content-Type: application/json
API używa JSON. Nazwy w URL są camelCase (websiteId, companyId), a pola JSON odpowiadają nazwom parametrów kontraktów Magento. :companyId, :quoteId, :sku itd. to parametry ścieżki. W przykładach ? oznacza parametr opcjonalny.
websiteId jest wymagany przy operacjach zależnych od kanału sprzedaży. Musi wskazywać istniejący website z włączonym B2B. companyId wskazuje firmę, która musi mieć aktywną relację z tym website, gdy operacja działa w jej kontekście. API nie wybiera domyślnego website ani firmy.
Request body i idempotencja
Magento serializuje obiekt DTO pod nazwą parametru metody: większość zapisów przyjmuje {"request": {...}}; tworzenie firmy używa {"company": {...}}; batch firm — {"companies": [...]}. Endpointy z prostymi argumentami przyjmują pola bez wrappera, np. {"websiteId": 1, "currency": "PLN", "items": [...]}.
Nagłówek Idempotency-Key (maks. 128 znaków) jest obecnie obsługiwany przez POST /companies: ponowienie z tym samym kluczem zwróci wcześniej utworzoną firmę. Dla joba integracyjnego użyj pola request.idempotencyKey. Nie zakładaj automatycznej idempotencji innych endpointów zapisu; ponawiaj je dopiero po ustaleniu statusu operacji.
Odpowiedzi i błędy
Odpowiedzi sukcesu są obiektami lub tablicami kontraktów Magento. Pola zwracane przez obiekty mogą być rozszerzane w kompatybilny sposób; integracja powinna ignorować nieznane pola. Błąd biznesowy może zawierać:
{
"code": "b2b.company.not_assigned_to_website",
"message": "B2B company is not assigned to website.",
"website_id": 1,
"trace_id": "request-correlation-id",
"details": {"company_id": 10},
"field_errors": []
}
| HTTP | Znaczenie | Reakcja integratora |
|---|---|---|
400 / 422 |
Niepoprawne dane albo walidacja domenowa | Popraw dane; nie ponawiaj bez zmiany payloadu. |
401 / 403 |
Brak lub niewystarczający token/ACL | Nie ponawiaj; zgłoś administratorowi zakres tokenu. |
404 |
Zasób lub relacja w danym kontekście nie istnieje | Zweryfikuj identyfikatory i kontekst website. |
409 |
Konflikt statusu lub duplikat | Odczytaj aktualny stan przed decyzją o ponowieniu. |
5xx / timeout |
Błąd techniczny | Zastosuj ograniczone retry z backoffem i zachowaj trace_id. |
Nie loguj tokenów, pełnych danych osobowych ani sekretów konfiguracji. Zgłoszenie do zespołu sklepu powinno zawierać czas, metodę, ścieżkę bez sekretów, status HTTP, trace_id oraz zanonimizowany payload.
4. Schematy danych wejściowych
Poniższe schematy są wspólne dla endpointów referencyjnych. Pole bez ? jest wymagane przez kontrakt; ? oznacza wartość opcjonalną. Pola metadata, config, configuration i payload są obiektami JSON.
| DTO / wrapper | Pola |
|---|---|
company |
websiteId, name, taxId, externalId?, status?, salesRepresentativeId?, customerGroupId?, websiteActive? |
companyUser |
websiteId, roleId, active |
request — RFQ |
websiteId, companyId, customerId?, externalId?, title, currency, validUntil?, customerNote?, salesNote?, metadata? |
request — pozycja RFQ |
quoteId, sku, productId?, name?, qty, requestedPrice?, offeredPrice?, comment?, metadata? |
request — decyzja RFQ |
customerId?, adminUserId?, message? |
request — komentarz RFQ |
quoteId, customerId?, adminUserId?, authorType, message, visibleForCustomer |
request — dokument |
websiteId, companyId, orderId?, orderIncrementId?, invoiceId?, invoiceIncrementId?, creditmemoId?, creditmemoIncrementId?, externalId?, documentNumber, documentType, status, issueDate?, dueDate?, grandTotal?, currency?, metadata? |
request — plik dokumentu |
documentId, fileName, filePath, mimeType, fileSize, checksum?, primary |
request — limit |
websiteId, companyId, termsId?, creditLimit, currency, active, status, metadata? |
request — ekspozycja limitu |
websiteId, companyId, sourceType, sourceId, sourceIncrementId?, amount, currency, dueDate?, metadata? |
request — warunki płatności |
websiteId, code, name, daysDue, active, description? |
request — reguła akceptacji |
websiteId, companyId, name, thresholdAmount, currency?, priority, active, metadata? |
request — akceptujący |
ruleId, customerId, sortOrder, active |
request — decyzja akceptacji |
approverCustomerId?, comment? |
request — wniosek akceptacji |
websiteId, companyId, orderId?, orderIncrementId?, requesterCustomerId?, grandTotal, currency, comment?, metadata? |
request — profil import/export |
websiteId, code, name, direction, entityType, format, behavior, active, configuration? |
request — profil integracji |
websiteId, code, name, systemType, adapterCode, direction, active, maxAttempts, config? |
request — mapowanie |
websiteId, systemType, entityType, localId, externalId, metadata? |
request — job integracyjny |
profileId, direction?, entityType, operation, idempotencyKey?, maxAttempts?, payload?, scheduledAt? |
5. Referencja endpointów
W tabelach ACL oznacza minimalny zasób uprawnienia Magento. Wynik określa rodzaj odpowiedzi sukcesu.
5.1. Websites i konfiguracja
| Metoda i endpoint | ACL | Wejście | Wynik i zastosowanie |
|---|---|---|---|
GET /V1/kowal-b2b/websites |
config |
— | Tablica website (websiteId, kod, nazwa, flaga B2B). Pobierz przed konfiguracją integracji. |
GET /V1/kowal-b2b/websites/:websiteId/config |
config |
path: websiteId |
Konfiguracja B2B website (m.in. enabled/debug/retencja logów). Wykonaj jako test dostępu. |
GET /V1/kowal-b2b/websites/:websiteId/features |
config |
path: websiteId |
Feature flags aktywne dla website; użyj do warunkowego włączania funkcji klienta. |
5.2. Firmy i użytkownicy firmowi
| Metoda i endpoint | ACL | Wejście | Wynik i zastosowanie |
|---|---|---|---|
GET /companies?websiteId= |
companies |
query: websiteId |
Tablica firm przypisanych do website. |
POST /companies |
company_save |
body: company |
Tworzy firmę i relację z website; użyj Idempotency-Key przy ponowieniach. Zwraca firmę. |
POST /companies/batch |
batch |
body: companies — tablica company |
Tworzy wiele firm i zwraca wynik per element, w tym błędy. |
GET /companies/:companyId?websiteId= |
companies |
path: companyId; query: websiteId |
Firma zweryfikowana w kontekście website. |
PUT /companies/:companyId |
company_save |
path: companyId; body: company |
Aktualizuje dane i relację firmy dla company.websiteId. |
POST /companies/:companyId/activate?websiteId= |
company_save |
path: companyId; query: websiteId |
Aktywuje firmę w wskazanym website i zwraca firmę. |
POST /companies/:companyId/block?websiteId= |
company_save |
path: companyId; query: websiteId |
Blokuje firmę w wskazanym website i zwraca firmę. |
GET /companies/:companyId/users?websiteId= |
company_users |
path: companyId; query: websiteId |
Tablica przypisań klientów do firmy. |
PUT /companies/:companyId/users/:customerId |
company_users |
path: companyId, customerId; body: companyUser |
Nadaje/aktualizuje rolę i aktywność klienta w firmie; zwraca przypisanie. |
5.3. Produkty, cena i widoczność katalogu
| Metoda i endpoint | ACL | Wejście | Wynik i zastosowanie |
|---|---|---|---|
GET /products?websiteId= |
products |
query: websiteId |
Tablica podstawowych produktów Magento dla website. |
GET /products/:sku?websiteId= |
products |
path: zakodowane sku; query: websiteId |
Produkt (id, sku, nazwa, typ, status, websites). |
GET /products/:sku/availability?websiteId= |
products |
path: sku; query: websiteId |
Dostępność i ilość sprzedażowa MSI dla SKU. |
GET /products/:sku/b2b-status?websiteId= |
products |
path: sku; query: websiteId |
Status B2B: przypisanie do website, tłumaczenia i dane stock. |
GET /reports/products/missing-translations?websiteId= |
products |
query: websiteId |
Raport SKU bez wymaganych tłumaczeń, z reason/details. |
GET /reports/products/missing-stock?websiteId= |
products |
query: websiteId |
Raport SKU bez wymaganych danych stock. |
GET /companies/:companyId/products/:sku/price?websiteId=¤cy=&qty= |
prices |
path: companyId, sku; query: websiteId, currency, opcj. qty (domyślnie 1) |
Wyjaśnienie ceny właściwej dla firmy, waluty i ilości; odczytuj przed zakupem. |
GET /companies/:companyId/products/:sku/visibility?websiteId= |
catalog_permissions |
path: companyId, sku; query: websiteId |
Wynik widoczności/zakupu SKU dla firmy. |
GET /companies/:companyId/catalog-visibility?websiteId= |
catalog_permissions |
path: companyId; query: websiteId |
Tablica pozycji indeksu widocznego katalogu firmy. |
POST /companies/:companyId/catalog-visibility/reindex?websiteId= |
catalog_permissions |
path: companyId; query: websiteId |
Przebudowuje indeks i zwraca liczbę zaindeksowanych pozycji. Operacja administracyjna. |
5.4. Import i eksport plikowy
| Metoda i endpoint | ACL | Wejście | Wynik i zastosowanie |
|---|---|---|---|
GET /import-export/profiles?websiteId= |
import_export |
query: websiteId |
Tablica profili importu/eksportu website. |
POST /import-export/profiles |
import_export |
body: request — profil import/export |
Zapisuje profil i zwraca jego dane. |
POST /import-export/import/:profileId?sourceFile=&dryRun= |
import_export |
path: profileId; query: sourceFile, opcj. dryRun=false |
Uruchamia import pliku wskazanego po stronie środowiska Magento; zwraca job. Nie przesyła multipart. |
POST /import-export/export/:profileId?resultFile= |
import_export |
path: profileId; opcj. query: resultFile |
Tworzy job eksportu, opcjonalnie z docelową ścieżką pliku. |
GET /import-export/jobs?websiteId= |
import_export |
query: websiteId |
Tablica jobów import/export dla website. |
GET /import-export/jobs/:jobId |
import_export |
path: jobId |
Stan, wynik i dane pojedynczego joba. |
GET /import-export/jobs/:jobId/logs |
import_export |
path: jobId |
Logi diagnostyczne joba. |
5.5. Szybkie zamówienie i listy zakupowe
| Metoda i endpoint | ACL | Wejście | Wynik i zastosowanie |
|---|---|---|---|
POST /companies/:companyId/quick-order/validate |
quick_order |
path: companyId; body: websiteId, currency, items (sku, qty) |
Waliduje wiele SKU w kontekście firmy: dostępność, widoczność i cenę; zwraca zbiorczy wynik. |
GET /companies/:companyId/shopping-lists?websiteId= |
quick_order |
path: companyId; query: websiteId |
Tablica list zakupowych firmy. |
POST /companies/:companyId/shopping-lists |
quick_order |
path: companyId; body: websiteId, name, opcj. customerId, isDefault=false |
Tworzy listę zakupową i zwraca ją. |
GET /shopping-lists/:listId/items |
quick_order |
path: listId |
Tablica pozycji wskazanej listy. |
POST /shopping-lists/:listId/items |
quick_order |
path: listId; body: currency, items (sku, qty) |
Dodaje pozycje do listy i zwraca zapisane pozycje. |
5.6. Dokumenty i pliki
| Metoda i endpoint | ACL | Wejście | Wynik i zastosowanie |
|---|---|---|---|
GET /companies/:companyId/documents?websiteId=&documentType= |
documents |
path: companyId; query: websiteId, opcj. documentType |
Dokumenty firmy, opcjonalnie filtrowane typem. |
GET /documents/:documentId?companyId=&websiteId= |
documents |
path: documentId; query: companyId, websiteId |
Szczegóły dokumentu po sprawdzeniu przynależności firmy. |
POST /documents |
documents |
body: request — dokument |
Tworzy lub zapisuje metadane dokumentu i zwraca dokument. |
POST /documents/files |
documents |
body: request — plik dokumentu |
Rejestruje plik istniejący w storage Magento (nazwa, ścieżka, MIME, rozmiar), nie wysyła binariów. |
GET /documents/:documentId/files?companyId=&websiteId= |
documents |
path: documentId; query: companyId, websiteId |
Tablica metadanych plików dokumentu. |
GET /documents/:documentId/sync-logs |
documents |
path: documentId |
Logi synchronizacji dokumentu; przeznaczone dla integracji administracyjnej. |
5.7. Limit kupiecki i terminy płatności
| Metoda i endpoint | ACL | Wejście | Wynik i zastosowanie |
|---|---|---|---|
GET /companies/:companyId/credit/status?websiteId=¤cy= |
credit_limits |
path: companyId; query: websiteId, currency |
Status limitu, wykorzystanie i dostępna kwota firmy. |
POST /credit-limits |
credit_limits |
body: request — limit |
Tworzy/aktualizuje limit firmy i zwraca limit. |
POST /credit/exposures |
credit_limits |
body: request — ekspozycja |
Rezerwuje ekspozycję limitu dla źródła (np. zamówienia) i zwraca ją. |
POST /credit/exposures/:exposureId/release |
credit_limits |
path: exposureId; opcj. body: message |
Zwalnia ekspozycję; zwraca jej stan. |
GET /payment-terms?websiteId= |
credit_limits |
query: websiteId |
Tablica aktywnych/znanych warunków płatności website. |
POST /payment-terms |
credit_limits |
body: request — warunki płatności |
Zapisuje warunki płatności i zwraca je. |
5.8. Workflow akceptacji
| Metoda i endpoint | ACL | Wejście | Wynik i zastosowanie |
|---|---|---|---|
GET /companies/:companyId/approval/rules?websiteId=¤cy= |
approvals |
path: companyId; query: websiteId, opcj. currency |
Reguły akceptacji firmy dla kanału/waluty. |
POST /approval/rules |
approvals |
body: request — reguła |
Tworzy/aktualizuje regułę progową i zwraca ją. |
GET /approval/rules/:ruleId/approvers |
approvals |
path: ruleId |
Tablica przypisanych akceptujących, w kolejności sortOrder. |
POST /approval/approvers |
approvals |
body: request — akceptujący |
Zapisuje przypisanie klienta jako akceptującego. |
GET /companies/:companyId/approval/required?websiteId=&grandTotal=¤cy= |
approvals |
path: companyId; query: websiteId, grandTotal, currency |
Boolean: czy kwota wymaga akceptacji. |
POST /approval/requests |
approvals |
body: request — wniosek akceptacji |
Tworzy request dla zamówienia i zwraca go. |
GET /companies/:companyId/approval/requests?websiteId=&status= |
approvals |
path: companyId; query: websiteId, opcj. status |
Tablica requestów akceptacji firmy. |
POST /approval/requests/:requestId/approve |
approvals |
path: requestId; body: request — decyzja |
Zatwierdza request; zwraca jego aktualny stan. |
POST /approval/requests/:requestId/reject |
approvals |
path: requestId; body: request — decyzja |
Odrzuca request; zwraca jego aktualny stan. |
POST /approval/requests/:requestId/cancel |
approvals |
path: requestId; body: request — decyzja |
Anuluje request; zwraca jego aktualny stan. |
GET /approval/requests/:requestId/decisions |
approvals |
path: requestId |
Historia decyzji dla requestu. |
5.9. Kontekst B2B zamówień
| Metoda i endpoint | ACL | Wejście | Wynik i zastosowanie |
|---|---|---|---|
GET /orders/:orderId/b2b-context |
orders |
path: orderId |
Kontekst B2B pojedynczego natywnego zamówienia Magento (np. firma, status akceptacji, limit, eksport). |
GET /companies/:companyId/orders/b2b-context?websiteId=&approvalStatus= |
orders |
path: companyId; query: websiteId, opcj. approvalStatus |
Tablica kontekstów zamówień firmy, opcjonalnie filtrowana statusem akceptacji. |
5.10. RFQ i oferty handlowe
| Metoda i endpoint | ACL | Wejście | Wynik i zastosowanie |
|---|---|---|---|
GET /companies/:companyId/quotes?websiteId=&status= |
quotes |
path: companyId; query: websiteId, opcj. status |
RFQ i oferty firmy, opcjonalnie według statusu. |
POST /quotes |
quotes |
body: request — RFQ |
Tworzy robocze RFQ i zwraca je. Dodaj pozycje osobnym endpointem. |
GET /quotes/:quoteId |
quotes |
path: quoteId |
Szczegóły RFQ/oferty. |
GET /quotes/:quoteId/items |
quotes |
path: quoteId |
Tablica pozycji RFQ. |
POST /quotes/items |
quotes |
body: request — pozycja RFQ |
Dodaje SKU i ilość, opcjonalną cenę żądaną/ofertową oraz komentarz. |
GET /quotes/:quoteId/comments |
quotes |
path: quoteId |
Komentarze RFQ. Klient widzi tylko komentarze oznaczone jako widoczne. |
POST /quotes/comments |
quotes |
body: request — komentarz RFQ |
Dodaje wiadomość; authorType i visibleForCustomer określają autora i widoczność. |
GET /quotes/:quoteId/history |
quotes |
path: quoteId |
Historia zmian statusu i zdarzeń RFQ. |
POST /quotes/:quoteId/submit |
quotes |
path: quoteId; body: request — decyzja RFQ |
Przekazuje robocze RFQ do wyceny. |
POST /quotes/:quoteId/make-offer |
quotes |
path: quoteId; body: request — decyzja RFQ |
Handlowiec tworzy/przekazuje ofertę; przed wywołaniem ustal ceny pozycji. |
POST /quotes/:quoteId/accept |
quotes |
path: quoteId; body: request — decyzja RFQ |
Akceptuje aktualną ofertę. Nie tworzy w tym kontrakcie zamówienia REST. |
POST /quotes/:quoteId/reject |
quotes |
path: quoteId; body: request — decyzja RFQ |
Odrzuca ofertę/RFQ. |
POST /quotes/:quoteId/cancel |
quotes |
path: quoteId; body: request — decyzja RFQ |
Anuluje RFQ, jeśli pozwala na to bieżący status. |
5.11. Profile i joby integracyjne
| Metoda i endpoint | ACL | Wejście | Wynik i zastosowanie |
|---|---|---|---|
GET /integrations/profiles?websiteId=&systemType= |
system_integrations |
query: websiteId, opcj. systemType |
Profile integracji dla website. |
POST /integrations/profiles |
system_integrations |
body: request — profil integracji |
Zapisuje profil ERP/PIM/WMS itp. i zwraca go. |
POST /integrations/mappings |
system_integrations |
body: request — mapowanie |
Zapisuje parę lokalny ID ↔ zewnętrzny ID. |
GET /integrations/mappings/local?websiteId=&systemType=&entityType=&localId= |
system_integrations |
query: wszystkie parametry wymagane | Odszukuje mapowanie po identyfikatorze Magento. |
GET /integrations/mappings/external?websiteId=&systemType=&entityType=&externalId= |
system_integrations |
query: wszystkie parametry wymagane | Odszukuje mapowanie po identyfikatorze systemu zewnętrznego. |
POST /integrations/jobs |
system_integrations |
body: request — job |
Publikuje job do wykonania; idempotencyKey identyfikuje operację biznesową. |
GET /integrations/jobs?websiteId=&status= |
system_integrations |
query: websiteId, opcj. status |
Tablica jobów integracyjnych. |
GET /integrations/jobs/:jobId |
system_integrations |
path: jobId |
Stan i szczegóły pojedynczego joba. |
POST /integrations/jobs/:jobId/process |
system_integrations |
path: jobId |
Przetwarza job i zwraca jego aktualny stan. |
POST /integrations/jobs/:jobId/retry |
system_integrations |
path: jobId |
Ponawia job po błędzie, zgodnie z jego limitem prób. |
GET /integrations/jobs/:jobId/logs |
system_integrations |
path: jobId |
Logi wykonania joba. |
GET /integrations/jobs/:jobId/errors |
system_integrations |
path: jobId |
Błędy domenowe/techniczne joba. |
6. Przykłady wywołań
export BASE_URL='https://b2b.example.com/rest/V1'
export TOKEN='token-przekazany-przez-administratora'
export WEBSITE_ID=1 COMPANY_ID=10 SKU='B2B-SKU-001' CURRENCY='PLN'
# Test dostępu i konfiguracji kanału
curl -sS "$BASE_URL/kowal-b2b/websites/$WEBSITE_ID/config" \
-H "Authorization: Bearer $TOKEN" -H 'Accept: application/json'
# Cena kontraktowa firmy dla konkretnej ilości
curl -sS "$BASE_URL/kowal-b2b/companies/$COMPANY_ID/products/$SKU/price?websiteId=$WEBSITE_ID¤cy=$CURRENCY&qty=5" \
-H "Authorization: Bearer $TOKEN" -H 'Accept: application/json'
# Walidacja koszyka po SKU
curl -sS -X POST "$BASE_URL/kowal-b2b/companies/$COMPANY_ID/quick-order/validate" \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
--data '{"websiteId":1,"currency":"PLN","items":[{"sku":"B2B-SKU-001","qty":5}]}'
# Utworzenie RFQ
curl -sS -X POST "$BASE_URL/kowal-b2b/quotes" \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
--data '{"request":{"websiteId":1,"companyId":10,"customerId":25,"title":"Dostawa kwartalna","currency":"PLN","externalId":"ERP-RFQ-2026-001"}}'
7. Zalecane scenariusze integracyjne
Zakup po SKU
- Odczytaj konfigurację website i zapisz przekazane
websiteId,companyId, walutę. - Użyj quick order do zbiorczej walidacji SKU, ilości, widoczności i dostępności.
- Dla zaakceptowanych pozycji pobierz cenę z
pricez właściwymqty. - Utwórz RFQ, dodaj pozycje i wyślij je przez
submit, jeśli zakup wymaga oferty. - Śledź status i historię RFQ; po akceptacji postępuj zgodnie z uzgodnionym procesem zamówienia Magento, ponieważ
V1nie wystawia endpointu tworzenia order.
Dokumenty i rozliczenia
- Pobierz listę dokumentów firmy, opcjonalnie filtrując
documentType. - Dla wybranego dokumentu pobierz metadane i listę plików; ścieżka pliku nie jest automatycznie publicznym URL — sposób pobrania binarium uzgodnij z administratorem sklepu.
- Odczytaj status limitu przed procesem zakupowym; tylko integracja z ACL
credit_limitsmoże nim zarządzać.
Operacje asynchroniczne
- Zapisz profil integracji i mapowania identyfikatorów.
- Opublikuj job z biznesowym
idempotencyKeyi zachowajjobId. - Odczytuj job oraz logi/błędy;
retrywywołuj dopiero po analizie błędu i usunięciu jego przyczyny.
8. Lista odbiorowa przed produkcją
- Token ma wyłącznie wymagane ACL i nie jest tokenem administratora używanym przez UI.
- Integrator poprawnie obsługuje
401,403,404, walidację422, konflikt409i timeouty. - Każdy request w kontekście B2B przekazuje właściwe
websiteId, a dane firmy używają prawidłowegocompanyId. - Ceny, widoczność i dostępność są sprawdzane przed utworzeniem procesu zakupowego.
- Tworzenie firmy używa
Idempotency-Key; joby integracyjne mają stabilnyidempotencyKeyw body. - Logi nie zawierają tokenów ani danych wrażliwych, a procedura wsparcia przekazuje
trace_id. - Testy zostały wykonane na środowisku testowym na firmie, która ma aktywną relację z B2B website.
9. Kompatybilność
Kontrakt jest wersjonowany przez /V1. Rozszerzenie odpowiedzi o nowe pola jest kompatybilne; integrator powinien tolerować pola nieznane. Zmiana usuwająca pole, znaczenie pola lub endpoint wymaga nowej wersji API. W razie rozbieżności między dokumentem a działającą instalacją wiążący jest aktywny kontrakt webapi.xml danej wersji modułu.
Instrukcja Instalacji modułu
Przed rozpoczęciem
Instalacja i konfiguracja Kowal B2B Suite
Ten podręcznik jest przeznaczony dla osoby, która kupiła Kowal B2B Suite i ma go uruchomić w istniejącej instalacji Magento Open Source. Prowadzi przez dwa etapy:
- instalacja techniczna — wykonywana przez developera lub administratora serwera;
- konfiguracja biznesowa — wykonywana w panelu Magento przez administratora sklepu.
Przed rozpoczęciem wykonaj kopię bazy danych i plików Magento. Pierwsze uruchomienie zalecamy przeprowadzić na środowisku testowym, a dopiero później wdrożyć na produkcję.
1. Co otrzymujesz i czego potrzebujesz
Kowal B2B Suite jest dostarczany jako pakiet Composer kowal/metapackage-b2b-suite. Zawiera moduły B2B oraz theme frontend/Kowal/b2b.
Wymagania
| Element | Wymaganie |
|---|---|
| Magento | Magento Open Source 2.4.9 |
| PHP | 8.3 |
| Composer | Composer 2 |
| Dostęp serwerowy | SSH oraz możliwość uruchamiania bin/magento |
| Magento | działające katalog, klienci, checkout, Sales, MSI oraz cron |
możliwość zapisu w var/ przez proces PHP |
Od Kowal otrzymasz:
- adres prywatnego repozytorium Composer — dalej jako
REPOSITORY_URL; - nazwę użytkownika lub identyfikator dostępu —
USERNAME; - token dostępu —
ACCESS_TOKEN; - dozwolony zakres wersji pakietu.
Nie zapisuj tokenu w repozytorium Git, w ticketach ani w historii powłoki współdzielonej z innymi osobami.
2. Instalacja techniczna
Wszystkie polecenia wykonuj w katalogu głównym istniejącej instalacji Magento, jako użytkownik mający dostęp do plików oraz do polecenia bin/magento.
2.1. Przygotowanie
- Upewnij się, że Magento działa poprawnie przed zmianą.
- Zapisz stan wdrożenia i wykonaj backup bazy danych oraz katalogów
app/etc,pub/mediaivar. - Na produkcji włącz tryb maintenance na czas aktualizacji:
bin/magento maintenance:enable
2.2. Dodanie prywatnego repozytorium
Dodaj repozytorium Composer Kowal i skonfiguruj otrzymane dane dostępowe.
Dane dostępowe do repozytorium Composer (adres e-mail klienta i token licencyjny) otrzymasz e-mailem po zakupie. Są również dostępne w panelu klienta po zalogowaniu na kowal.store. Zastąp TWOJ_EMAIL_KLIENTA adresem e-mail swojego konta, a TWOJ_TOKEN otrzymanym tokenem. Polecenia wykonaj w katalogu głównym Magento.
Dodaj repozytorium Composer
composer config repositories.kowal composer https://repo.kowal.storeSkonfiguruj dane dostępowe
composer config http-basic.repo.kowal.store "TWOJ_EMAIL_KLIENTA" "TWOJ_TOKEN"
Composer zwykle zapisuje poświadczenia w lokalnym auth.json; nie dodawaj tego pliku do Git.
2.3. Instalacja pakietu
Zainstaluj wersję przekazaną wraz z licencją. Dla bieżącej linii pakietu przykładowe polecenie ma postać:
composer require kowal/metapackage-b2b-suite:^0.2 --with-all-dependencies
Po pobraniu zależności wykonaj aktualizację schematu i konfiguracji Magento:
bin/magento setup:upgrade
bin/magento cache:clean
W trybie produkcyjnym wykonaj dodatkowo:
bin/magento setup:di:compile
bin/magento setup:static-content:deploy -f pl_PL en_US
bin/magento cache:flush
Użyj tylko tych locale, które są aktywne w sklepie. Jeżeli instalacja korzysta z innego procesu deploymentu, dołącz powyższe komendy do jego standardowej procedury.
2.4. Weryfikacja instalacji
bin/magento module:status | grep Kowal
bin/magento indexer:status
W panelu administracyjnym powinno pojawić się menu B2B oraz zakładka Stores > Configuration > Kowal > B2B. Jeżeli ich nie ma, sprawdź wynik setup:upgrade, cache oraz role ACL użytkownika administratora.
2.5. Uprawnienia plików PDF
PDF-y generowane przez B2B używają mPDF i katalogów pod var/, w tym var/tmp/kowal_b2b_mpdf oraz var/kowal_b2b_documents. Proces PHP musi mieć możliwość ich utworzenia i zapisu. Brak tych uprawnień objawia się błędem generowania dokumentu lub PDF.
Po zakończeniu wdrożenia produkcyjnego wyłącz maintenance:
bin/magento maintenance:disable
3. Konfiguracja struktury sklepu B2B
3.1. Website i store view
Suite działa w zakresie website, a nie globalnie. Możesz prowadzić B2C i B2B w tej samej instalacji Magento, lecz B2B powinno działać w osobnym website lub w świadomie wybranym website sprzedaży firmowej.
- W Stores > Settings > All Stores utwórz lub wybierz website B2B, jego store oraz store view.
- Zapamiętaj
website_id— jest używany przez firmy, ceny, dokumenty, API i integracje. - W Content > Design > Configuration przypisz theme
frontend/Kowal/b2btylko do B2B store view. - Sprawdź, że aktywne waluty, podatki, metody dostawy i metody płatności są skonfigurowane dla tego samego scope.
Nie przypisuj theme B2B do store view B2C, jeśli nie chcesz zmieniać jego warstwy prezentacji. Sama instalacja modułów nie włącza logiki B2B dla wszystkich website.
3.2. Aktywacja B2B
- Otwórz Stores > Configuration > Kowal > B2B.
- W przełączniku scope wybierz właściwy Website.
- W sekcji General ustaw Enable B2B na
Yes. - Na czas wdrożenia możesz włączyć Debug Mode; wyłącz go po testach.
- W scope Default Config ustaw okres retencji logów.
- Zapisz konfigurację i wyczyść cache.
Po aktywacji wszystkie store view należące do tego website są traktowane jako B2B. Firma bez aktywnej relacji z tym website nie uzyska do niego dostępu.
3.3. Dane sprzedawcy
Uzupełnij dane firmy sprzedającej w Stores > Configuration > General > Store Information: nazwę, adres, telefon oraz NIP. Są używane w dokumentach i PDF RFQ. Uzupełnij również ogólny adres e-mail nadawcy w konfiguracji Sales Emails oraz logo e-mail, jeśli ma pojawiać się w PDF.
4. Konfiguracja pierwszego klienta B2B
Poniższą kolejność stosuj dla każdej firmy. Pozwala uniknąć sytuacji, w której klient ma konto, ale nie widzi oferty lub nie może przejść checkoutu.
4.1. Firma, osoby i adresy
- Otwórz B2B > Companies i utwórz firmę.
- Podaj nazwę, NIP, identyfikator zewnętrzny (jeśli firma jest synchronizowana z ERP), status
Activeoraz przypisanie do B2B website. - Dodaj użytkownika firmy lub przypisz istniejącego klienta Magento. Nadaj mu właściwą rolę i aktywuj przypisanie.
- W B2B > Company Addresses dodaj adresy firmy; oznacz domyślny adres rozliczeniowy i wysyłkowy dla website B2B.
- W B2B > Company Contacts dodaj aktywny kontakt główny z e-mailem i telefonem.
Adres rozliczeniowy i kontakt główny są również używane w PDF RFQ. Brak danych nie blokuje PDF, ale dokument będzie mniej kompletny.
4.2. Role firmowe
Nadaj użytkownikom tylko potrzebne uprawnienia. Typowy podział to:
| Rola | Przykładowe zadania |
|---|---|
| Administrator firmy | użytkownicy, role, adresy, dokumenty i historia firmy |
| Kupiec | katalog, szybkie zamówienie, koszyk, RFQ i zamówienia |
| Akceptujący | decyzje w workflow akceptacji |
| Księgowość | dokumenty i informacje rozliczeniowe |
Przetestuj konto każdego typu, zwłaszcza uprawnienie do składania zamówień i akceptacji. Nie używaj jednego wspólnego konta dla całej firmy.
5. Oferta, ceny i checkout
5.1. Katalog i ceny
- Upewnij się, że produkty Magento są przypisane do B2B website, aktywne i mają poprawne dane MSI.
- Skonfiguruj cenniki lub ceny kontraktowe dla firmy w obszarze B2B > Pricing (Price Lists, Price List Assignments lub Contract Prices).
- Skonfiguruj reguły widoczności katalogu dla firmy zgodnie z wdrożonym modelem uprawnień, a następnie sprawdź widoczność na koncie klienta.
- Przetestuj na koncie firmy: wyszukanie SKU, widoczność produktu i cenę dla ilości
1oraz dla progu ilościowego.
Cena B2B zależy od firmy, website, waluty i ilości. Produkt widoczny w B2C nie musi być dostępny dla klienta B2B.
5.2. Dostawa i płatność
- Włącz wymagane metody dostawy i płatności w standardowej konfiguracji Magento dla B2B store view.
- W B2B > Checkout dodaj reguły dostępnych metod dla firmy/website, jeśli chcesz ograniczyć wybór.
- Przeprowadź test koszyka na domyślnych adresach firmy.
Jeśli tworzenie zamówienia z RFQ ma działać automatycznie po stronie administratora, firma musi mieć jednoznaczne domyślne adresy, aktywną metodę płatności i dostawy. W przeciwnym razie Suite załaduje dane do natywnego Backend Order Create, gdzie administrator uzupełnia brakujące elementy.
5.3. Limity i akceptacje
Te funkcje są opcjonalne, ale powinny być skonfigurowane przed włączeniem ich klientom.
- W B2B > Credit > Payment Terms dodaj terminy płatności.
- W B2B > Credit > Credit Limits przypisz firmie limit, walutę, status i termin płatności.
- W B2B > Approvals > Rules utwórz regułę progu kwotowego dla firmy i website.
- W B2B > Approvals > Approvers przypisz osoby akceptujące.
- Przetestuj koszyk poniżej i powyżej progu oraz sprawdź, czy decyzja akceptującego zmienia dalszy proces.
6. Dokumenty, PDF i RFQ
6.1. Dokumenty Magento
W Stores > Configuration > Kowal > B2B > Documents wybierz źródło dokumentów i zdecyduj, które dokumenty mają być generowane automatycznie: potwierdzenia zamówień, faktury, WZ i korekty. Ustaw też docelowy status dokumentu.
W B2B > Documents > PDF Templates:
- sprawdź aktywny szablon dla każdego typu i website;
- wykonaj podgląd;
- dostosuj HTML/CSS wyłącznie, gdy masz osobę znającą szablony Magento i CSS mPDF;
- wygeneruj testową fakturę lub potwierdzenie i sprawdź pobranie z konta firmy.
6.2. RFQ i oferta PDF
- W B2B > Quotes > RFQ utwórz testowe RFQ dla aktywnej firmy i użytkownika.
- Dodaj widoczne dla firmy SKU, ilość oraz cenę ofertową.
- Ustaw termin ważności, prześlij ofertę klientowi i wygeneruj PDF.
- Sprawdź wariant klienta: dane sprzedawcy/nabywcy, pozycje, cena, suma i termin ważności.
- Sprawdź wariant administratora: dodatkowo notatki handlowe, komentarze, historię oraz wewnętrzne informacje o pozycjach.
PDF klienta nie może zawierać notatek handlowca ani wewnętrznej historii statusów.
7. Szybkie zamówienia, importy i integracje
Szybkie zamówienia
W B2B > Quick Order > Debug SKU sprawdź listę SKU,qty dla firmy, website i waluty. Następnie utwórz listę zakupową i przetestuj jej użycie przez klienta na storefront.
Import i eksport
W B2B > Import/Export zdefiniuj profil dopiero po ustaleniu źródła danych. Konfiguracja profilu jest obiektem JSON i musi zawierać ścieżki plików dostępne na serwerze Magento. Najpierw uruchom import w trybie testowym oraz przeanalizuj job i logi.
Integracje API
Przed utworzeniem tokenu integracyjnego ustal zakres danych i właściciela synchronizacji. Użyj osobnej integracji Magento dla każdego ERP, PIM, WMS lub middleware i nadaj jej wyłącznie potrzebne ACL B2B. Pełna lista endpointów, tokenów i zasad bezpieczeństwa znajduje się w dokumentacji API dla integratorów.
8. Checklista odbiorowa
Przed uruchomieniem produkcyjnym potwierdź:
- [ ] Moduły Kowal są aktywne, cron działa, a cache i indeksy są poprawne.
- [ ] B2B jest włączone wyłącznie dla właściwego website.
- [ ] Theme B2B jest przypisany wyłącznie do B2B store view.
- [ ] Firma testowa ma status Active, użytkownika, rolę, kontakt i domyślne adresy.
- [ ] Produkt testowy jest aktywny, przypisany do website, widoczny dla firmy i ma poprawną cenę B2B.
- [ ] Klient może zalogować się, wyszukać SKU, użyć quick order i dodać produkt do koszyka.
- [ ] Checkout pokazuje tylko dopuszczalne metody dostawy i płatności.
- [ ] Limit i reguła akceptacji działają zgodnie z polityką firmy, jeśli te funkcje są używane.
- [ ] Dokument oraz PDF RFQ generują się i są dostępne wyłącznie dla właściwej firmy.
- [ ] RFQ można wysłać, zaakceptować i przekazać do procesu utworzenia zamówienia.
- [ ] Integracje mają osobne tokeny i ograniczone ACL, jeśli są używane.
9. Najczęstsze problemy
| Objaw | Co sprawdzić |
|---|---|
| Nie ma menu B2B | setup:upgrade, status modułów, cache oraz ACL administratora. |
| Firma lub klient nie widzi B2B | Czy B2B jest aktywne dla właściwego website i czy firma ma aktywną relację z tym website. |
| Produkt nie jest widoczny albo nie ma ceny | Przypisanie produktu do website, aktywność SKU, dane MSI, reguły katalogu, cena firmy, waluta i ilość. |
| Brak metody dostawy lub płatności | Standardowa konfiguracja Magento, scope B2B store view oraz reguły B2B Checkout. |
| Nie powstaje PDF | Aktywny szablon PDF, pakiet mPDF, uprawnienia do var/, dane sprzedawcy i logi Magento. |
| RFQ nie tworzy zamówienia automatycznie | Domyślne adresy firmy, jednoznaczna płatność i dostawa; w pozostałych przypadkach użyj Backend Order Create. |
API zwraca 403 |
Token integracji nie ma wymaganego ACL; nie używaj tokenu administratora w aplikacji zewnętrznej. |
Przy zgłoszeniu do wsparcia podaj wersję Magento, wersję pakietu, kroki odtworzenia, godzinę zdarzenia, bezpiecznie zanonimizowane logi i ewentualny trace_id. Nie przesyłaj tokenów ani haseł.
10. Aktualizacja pakietu
- Zapoznaj się z informacją o wersji przekazaną przez Kowal.
- Wykonaj aktualizację najpierw na środowisku testowym.
- Wykonaj backup,
composer update kowal/metapackage-b2b-suite --with-all-dependencies,bin/magento setup:upgrade, a w produkcji także kompilację DI i deployment zasobów statycznych. - Powtórz checklistę odbiorową, ze szczególnym uwzględnieniem cen, checkoutu, dokumentów i integracji.
Nie aktualizuj pakietu przez ręczne kopiowanie plików do app/code; powoduje to problemy z Composerem oraz utrudnia późniejsze wsparcie.