Profesjonalny system B2B dla Magento 2 Open Source
- SKU
- M2-B2B
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
Rozwijaj portal kontrahentów z firmami, rolami, cenami, katalogami, RFQ, limitami, dokumentami i integracjami. Aktywuj logikę B2B dla wybranych website i dopasuj proces do swoich zasad handlowych.
16 modułów i motyw · Website scope · REST i GraphQL
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.
Co zyskuje Twój sklep?
Poznaj funkcje, zastosowanie i ustawienia modułu.
Poznaj moduł
KOWAL B2B SUITE · MAGENTO 2 OPEN SOURCE
Profesjonalny system B2B bez przechodzenia na Adobe Commerce
Kowal B2B Suite rozbudowuje Magento 2 Open Source o funkcje potrzebne w sprzedaży hurtowej i kontraktowej.
Obsługuj firmy, użytkowników, indywidualne ceny, szybkie zamówienia, limity kupieckie, akceptacje, oferty, dokumenty i integracje — w jednym środowisku Magento.
Firmy i role · Ceny i katalogi · RFQ · Kredyt kupiecki · Dokumenty · Integracje
Sprzedaż B2B dopasowana do Twoich zasad handlowych
Każdy kontrahent może otrzymać własne ceny, katalog, warunki płatności, limity oraz użytkowników z różnymi uprawnieniami.
System wspiera zarówno prosty model hurtowy, jak i rozbudowane procesy zakupowe z wieloetapową akceptacją i integracją z ERP, PIM, WMS lub CRM.
Najważniejsze obszary platformy B2B
Przenieś codzienną obsługę kontrahentów z maili, arkuszy i ręcznych ustaleń bezpośrednio do Magento.
Firmy, użytkownicy i role zakupowe
Jedna firma może mieć wielu użytkowników, adresy i osoby odpowiedzialne za zakupy. Role określają, kto może zamawiać, zatwierdzać lub przeglądać dane.
Indywidualne ceny i katalogi
Każdy kontrahent może otrzymać własny katalog, ceny kontraktowe, progi ilościowe i zasady zakupowe. Klient widzi ofertę przeznaczoną dla jego firmy.
Szybkie zamówienia i listy zakupowe
Klienci mogą sprawnie składać duże zamówienia po SKU, korzystać z list zakupowych i importować pozycje zamiast wyszukiwać każdy produkt osobno.
RFQ, oferty i akceptacje
Proces ofertowy może obejmować negocjowane ceny, termin ważności i indywidualne warunki. Zamówienia mogą przechodzić przez akceptację zależną od wartości lub roli użytkownika.
Kontrola finansowa bez pracy w arkuszach
Limity kupieckie, wykorzystanie kredytu i terminy płatności pomagają kontrolować sprzedaż z odroczoną płatnością.
Klient ma dostęp do dokumentów, a zespół widzi warunki handlowe i stan procesu w jednym miejscu.
Dokumenty w portalu klienta
- faktury i korekty,
- WZ i potwierdzenia,
- oferty PDF,
- dokumenty z Magento lub systemu ERP.
Jak wygląda wdrożenie?
Platformę można wdrażać etapami. Najpierw porządkujemy zasady handlowe, później odwzorowujemy je w Magento i integrujemy z systemami firmy.
1. Model sprzedaży
Ustalamy klientów, kanały, cenniki, płatności, ograniczenia i źródła danych.
2. Reguły dla firm
Konfigurujemy użytkowników, ceny, katalog, adresy, limity i role zakupowe.
3. Proces zakupu
Wdrażamy szybkie zamówienia, oferty, akceptacje, dokumenty i zasady checkoutu.
4. Integracje i testy
Łączymy ERP, PIM, WMS lub CRM, testujemy scenariusze i przygotowujemy zespół do pracy.
Integracje z systemami firmy
Dane o klientach, cenach, produktach, zamówieniach i dokumentach mogą być wymieniane z ERP, PIM, WMS, CRM, EDI oraz systemami zakupowymi kontrahentów.
Synchronizacja może obejmować limity kupieckie, warunki płatności, statusy zamówień i dokumenty. Historia zadań i błędów ułatwia kontrolę procesu.
B2B, które rozwija się razem z biznesem
Kowal B2B Suite jest rozwiązaniem dla hurtowni, dystrybutorów, producentów i firm prowadzących sprzedaż kontraktową.
Możesz rozpocząć od firm, cen i katalogu, a następnie rozbudować platformę o szybkie zamówienia, RFQ, limity, akceptacje, dokumenty i integracje.
Jedno Magento. Jeden katalog. Jeden proces sprzedażowy B2C i B2B.
Jeden pakiet, modułowa architektura
kowal/metapackage-b2b-suite dostarcza pliki 16 modułów B2B oraz motywu frontend/Kowal/b2b. Pakiet główny rejestruje je w autoload i zastępuje nazwy podpakietów, więc instalacja suite nie wymaga osobnego repozytorium dla każdego modułu.
Wdrożenie jest projektowane dla Magento Open Source 2.4.9 i PHP 8.3. Zakres aktywowanych modułów, kompatybilność motywu i scenariusze procesu trzeba sprawdzić w docelowej instalacji.
Website i model dostępu firmy
Funkcje B2B działają w kontekście wybranego website_id. Firma musi mieć aktywną relację z tym kanałem, a role określają dostęp do zakupu, użytkowników, ofert i dokumentów.
Pierwszy model firmy zakłada jedno przypisane website. Sprzedaż B2C może korzystać z tej samej instalacji, lecz aktywacja B2B i dostęp do firm pozostają rozdzielone konfiguracją kanałów.
Quick Order, akceptacje i wdrożenie etapowe
Szybkie zamówienie sprawdza SKU, ilość, przypisanie do website, widoczność dla firmy i cenę B2B. Listy zakupowe oraz logi importu pomagają obsługiwać powtarzalne zamówienia.
Reguły approval uwzględniają firmę, website, walutę i próg. Bieżący request pending jest zamykany decyzją approve, reject albo cancel. Wieloetapowy obieg trzeba uzgodnić i zweryfikować jako konkretny zakres wdrożenia.
Dokumenty i bezpieczny dostęp
Dokumenty są przypisane do firmy oraz website. Pliki PDF znajdują się w var/kowal_b2b_documents i są pobierane przez kontroler sprawdzający dostęp.
Źródłem może być Magento Sales lub tryb hybrydowy Magento + API. Pakiet obejmuje dokumenty zamówień, faktur, wysyłek i korekt oraz wspólny renderer PDF; synchronizacja dokumentów z zewnętrznego systemu wymaga odpowiedniego adaptera.
Integracje wymagają adapterów i źródeł danych
Warstwa Integration dostarcza profile, mapowanie identyfikatorów, zadania, retry, logi i dead letter queue. Konkretny ERP, PIM, WMS lub CRM jest podłączany adapterem implementującym SyncAdapterInterface.
Przed startem ustal źródło prawdy dla firm, cen, stanów, zamówień i dokumentów. REST i GraphQL stanowią punkty integracji; instalacja pakietu nie łączy automatycznie wszystkich systemów firmy.
Instalacja przez Composer
Pakiet kowal/metapackage-b2b-suite, moduł Kowal_B2BBase. Po skonfigurowaniu dostępu do repozytorium Kowal zainstaluj pakiet, włącz moduł, zaktualizuj Magento i wyczyść cache. W produkcji uwzględnij kompilację i wdrożenie treści statycznych zgodnie z procesem sklepu.
Od konfiguracji do efektu
1. Ustalasz model handlowy
Definiujesz firmy, kanały, ceny i źródła danych.
2. Konfigurujesz proces B2B
Przypisujesz role, katalog, warunki oraz akceptacje.
3. Łączysz systemy i wdrażasz
Dobierasz adaptery i sprawdzasz pełne scenariusze.
Portal zamówień dla kontrahenta
Firma jest przypisana do aktywnego website B2B. Jej użytkownik korzysta z katalogu i ceny zgodnej z ustalonymi warunkami, dodaje pozycje po SKU oraz składa zamówienie.
W zależności od konfiguracji proces uwzględnia limit i akceptację. Dokumenty oraz integracje pozostają powiązane z firmą i właściwym kanałem sprzedaży.
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.
Więcej informacji
| Zgodność z szablonem | 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.