Kowal Data Layer dla Magento 2
25,00 € 25,00 €
Kowal B2B Suite został zaprojektowany jako profesjonalna warstwa B2B dla Magento 2 Open Source. Jego zadaniem jest nie tylko dodanie kilku ekranów dla firm, ale stworzenie kompletnego środowiska sprzedaży hurtowej i kontraktowej, które może działać samodzielnie albo jako część większego ekosystemu handlowego.
Pakiet opiera się na podstawowej zasadzie: Magento pozostaje źródłem produktów, kategorii, stanów magazynowych, koszyka, zamówień i store view, a Kowal B2B Suite dodaje brakującą logikę biznesową B2B. Dzięki temu wdrożenie wykorzystuje sprawdzone mechanizmy Magento, a jednocześnie zyskuje funkcje typowe dla portali B2B: zarządzanie kontrahentami, użytkownikami firmowymi, indywidualnymi cenami, widocznością katalogu, limitami kupieckimi, dokumentami handlowymi, zapytaniami ofertowymi i integracjami.
Architektura pakietu jest modułowa. Każdy obszar B2B ma własną odpowiedzialność, własne kontrakty i własne punkty rozszerzeń. Pozwala to wdrażać system etapami, rozwijać go o kolejne funkcje i bezpiecznie integrować z ERP, PIM, WMS, CRM albo systemami księgowymi.
Kowal B2B Suite jest projektowany dla firm, które potrzebują kontroli nad procesem sprzedaży B2B, ale nie chcą utrzymywać osobnego systemu oderwanego od Magento. Jeden katalog, jedna platforma, wiele kanałów sprzedaży.
Sprzedaż B2B działa w kontekście wybranego website_id. Oznacza to, że funkcje B2B można aktywować dla konkretnego website, bez wpływu na pozostałe kanały B2C. To właściwy model dla firm, które chcą utrzymać jeden system e-commerce, jeden katalog produktów i jedną infrastrukturę techniczną.
Pakiet dodaje domenę firm: kontrahentów, relacje firma–website, użytkowników firmowych, role, uprawnienia, adresy, kontakty i audyt zmian. Firma ma dostęp tylko do przypisanego kanału B2B, co porządkuje bezpieczeństwo danych i upraszcza wdrożenia wielokanałowe.
B2B rzadko działa na jednej publicznej cenie. Kowal B2B Suite wspiera cenniki, ceny kontraktowe, progi ilościowe, indeks cen i reguły widoczności katalogu. Klient widzi produkty i ceny zgodne z jego relacją handlową.
Kupujący B2B nie zawsze przegląda sklep jak klient detaliczny. Często zna SKU, zamawia cyklicznie i oczekuje szybkiego działania. Pakiet dodaje szybkie zamówienia, listy zakupowe i walidację pozycji po SKU.
Limity kupieckie, terminy płatności, rezerwacja wykorzystania limitu i status kredytowy firmy pomagają kontrolować ryzyko sprzedaży z odroczoną płatnością. Moduł jest przygotowany jako fundament pod walidację checkoutu i integrację z finansami.
RFQ pozwala obsłużyć zapytania ofertowe, pozycje oferty, komentarze, statusy, ceny oferowane, termin ważności i historię zmian. To istotne w sprzedaży kontraktowej, gdzie finalna cena lub warunki wymagają akceptacji handlowca.
Reguły approval umożliwiają blokowanie zamówień wymagających akceptacji, np. po przekroczeniu określonego progu kwotowego. System zapisuje requesty, approverów i decyzje, tworząc podstawę pod audyt procesu zakupowego.
Kontrahent może otrzymać dostęp do dokumentów handlowych powiązanych z firmą i website: faktur, korekt, dokumentów WZ i potwierdzeń zamówień. Dostęp jest kontrolowany przez kontekst B2B.
Pakiet zawiera warstwę integracyjną z profilami, mapowaniem identyfikatorów zewnętrznych, kolejkami, idempotencją, retry, logami i błędami synchronizacji. Konkretne adaptery ERP/PIM/WMS/CRM mogą być dodawane jako osobne rozszerzenia.
Kowal B2B Suite dostarcza warstwę REST API dla administracji, integracji i procesów systemowych oraz GraphQL jako fasadę dla frontendu i przyszłych kanałów API. Logika domenowa pozostaje w serwisach B2B, a API nie duplikuje zasad biznesowych.
Kowal B2B Suite jest przeznaczony dla:
website_id, więc nie miesza kanałów B2C i B2B.Fundament całego pakietu. Definiuje, czy B2B jest aktywne dla danego website, rozwiązuje kontekst website_id, dostarcza bazowe kontrakty, wyjątki, konfigurację, ACL i logger.
Model firm B2B: kontrahenci, relacje z website, użytkownicy firmowi, role, uprawnienia, adresy, kontakty i audyt. Moduł pilnuje, aby firma działała wyłącznie w przypisanym kanale B2B.
Panel administracyjny B2B w Magento Admin. Dostarcza menu, dashboard, grid firm i formularze operujące na serwisach domenowych.
REST API dla procesów B2B. Udostępnia endpointy dla firm, produktów, cen, widoczności katalogu, importu/eksportu, szybkich zamówień, dokumentów, limitów, approval, zamówień, RFQ i integracji.
Moduł cen B2B. Obsługuje cenniki, ceny kontraktowe, progi ilościowe, indeks cen i resolver ceny dla konkretnej firmy, website, SKU, waluty i ilości.
Widoczność katalogu B2B. Pozwala ograniczać produkty i kategorie per firma oraz website, buduje indeks widoczności i filtruje frontendowe kolekcje produktów.
Import i eksport danych B2B. Zapewnia profile, zadania, logi wierszy, tryb dry-run oraz fundament pod kolejne adaptery danych.
Szybkie zamawianie po SKU i listy zakupowe. Moduł waliduje widoczność, dostępność i cenę B2B, a następnie zapisuje listy zakupowe dla firm.
Dostęp do dokumentów handlowych: faktur, korekt, WZ i potwierdzeń zamówień. Dokumenty są przypisane do firmy i website, z kontrolą dostępu oraz logiem synchronizacji.
Limity kupieckie, warunki płatności, rezerwacje ekspozycji kredytowej i status kredytowy firmy. Moduł tworzy podstawę pod bezpieczne zamówienia z odroczoną płatnością.
Workflow akceptacji zamówień. Reguły mogą działać per firma, website, waluta i próg kwotowy. System zapisuje approverów, requesty i decyzje.
Integracja checkoutu Magento z regułami B2B. Waliduje firmę, uprawnienia, widoczność produktów, ceny B2B, limit kupiecki i approval, bez wpływu na website B2C.
RFQ i oferty handlowe. Obsługuje zapytania ofertowe, pozycje, komentarze, statusy, ceny negocjowane, ważność oferty i historię zmian.
Infrastruktura integracyjna dla ERP, PIM, WMS, CRM i systemów księgowych. Dostarcza profile, mapowania zewnętrznych ID, kolejki, retry, idempotencję, logi i błędy synchronizacji.
Warstwa GraphQL dla frontendu i kanałów API. Udostępnia odczyty i mutacje B2B jako fasadę nad istniejącymi serwisami domenowymi.
Klasyczny frontend Magento oparty o Magento/blank, przygotowany pod widoki B2B: dashboard firmy, szybkie zamówienia, listy zakupowe, dokumenty i elementy UX portalu kontrahenta.
Kowal B2B Suite jest rozwijany jako jeden pakiet Composer składający się z modułów Magento 2 i theme. Root metapackage może wymagać wszystkich gotowych komponentów, a logika pozostaje rozbita na niezależne moduły o jasnych granicach.
W praktyce oznacza to:
Najważniejszą decyzją architektoniczną pakietu jest działanie B2B per website_id.
Jeżeli B2B jest aktywne dla danego website, wszystkie jego store view działają jako B2B. Firmy, ceny, widoczność katalogu, limity, dokumenty, RFQ, approval i integracje są walidowane w tym kontekście.
Jeżeli website nie ma aktywnego B2B, moduły nie powinny zmieniać zachowania klasycznego sklepu B2C.
Pakiet nie zakłada jednego konkretnego ERP. Zamiast tego dostarcza warstwę integracyjną, która pozwala tworzyć adaptery do różnych systemów:
Mechanizmy idempotencji, mapowania identyfikatorów, kolejek, retry i logów są projektowane jako wspólny fundament dla integracji.
Kowal B2B Suite jest projektowany w podejściu API-first. Funkcje biznesowe są dostępne przez kontrakty PHP, REST API oraz GraphQL.
Dzięki temu pakiet może obsłużyć:
Pakiet opiera się na jawnej walidacji:
To ogranicza ryzyko przypadkowego dostępu do danych innej firmy albo innego kanału sprzedaży.
Ten dokument jest przeznaczony dla programistów i zespołów IT po stronie klienta B2B, którzy chcą zintegrować własny system zakupowy, ERP, WMS, aplikację wewnętrzną albo middleware ze sklepem B2B opartym o Kowal B2B API.
Dokument opisuje praktyczne użycie API w procesach sprzedażowo-zakupowych pomiędzy klientem B2B a sklepem B2B:
Dokument nie opisuje instalacji modułu ani wewnętrznej architektury sklepu. Te elementy obsługuje administrator sklepu lub zespół wdrożeniowy.
Przed rozpoczęciem integracji poproś administratora sklepu B2B o:
| Dane | Opis | Przykład |
|---|---|---|
baseUrl |
Adres API sklepu | https://b2b.example.com/rest/V1 |
token |
Token integracyjny lub token klienta | Bearer eyJ... |
websiteId |
Identyfikator kanału B2B | 1 |
companyId |
Identyfikator firmy B2B klienta | 10 |
customerId |
Opcjonalny identyfikator użytkownika firmy | 25 |
currency |
Waluta rozliczeniowa | PLN |
| lista uprawnień API | Zakres endpointów dostępnych dla integracji | produkty, ceny, dokumenty, RFQ |
Bez websiteId i companyId większość operacji B2B nie będzie możliwa, ponieważ API izoluje dane per kanał sprzedaży i per firma.
W dokumentacji endpointy są zapisywane skrótowo:
/V1/kowal-b2b/...
W wywołaniu użyj pełnego adresu:
https://b2b.example.com/rest/V1/kowal-b2b/...
Jeżeli sklep używa kodów store view w adresie API, administrator może przekazać wariant:
https://b2b.example.com/rest/{store_code}/V1/kowal-b2b/...
API przyjmuje i zwraca JSON.
Standardowe nagłówki:
Authorization: Bearer <token>
Content-Type: application/json
Accept: application/json
Dla metod GET wystarczy Authorization i Accept.
W zapytaniach sprzedażowych prawie zawsze występują:
websiteId — kanał B2B,companyId — firma klienta B2B,currency — waluta,sku — kod produktu,qty — ilość.Przykład:
GET /V1/kowal-b2b/companies/10/products/B2B-SKU-001/price?websiteId=1¤cy=PLN&qty=5
API nie powinno domyślnie zgadywać website ani firmy. To zabezpiecza instalacje, w których jeden sklep obsługuje równolegle B2C i B2B.
Dla operacji zapisu, które mogą być ponawiane po timeoutach, stosuj nagłówek:
Idempotency-Key: unique-business-operation-id
Przykład:
Idempotency-Key: erp-rfq-2026-000123
Zastosowanie:
Wartość klucza powinna być unikalna dla operacji biznesowej, a nie dla pojedynczej próby HTTP.
API korzysta ze standardowego mechanizmu tokenów sklepu.
W praktyce integrator klienta B2B powinien otrzymać gotowy token od administratora sklepu albo proces jego uzyskania.
curl -X GET "$BASE_URL/kowal-b2b/websites/$WEBSITE_ID/config" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json"
Token powinien mieć tylko te uprawnienia, które są potrzebne danej integracji.
Przykłady zakresów:
| Integracja | Wymagane obszary API |
|---|---|
| system zakupowy klienta | produkty, ceny, widoczność, quick order, RFQ |
| ERP klienta | produkty, ceny, dokumenty, zamówienia, limity |
| portal analityczny | produkty, ceny, dokumenty, zamówienia |
| automatyzacja dokumentów | dokumenty, pliki dokumentów |
Jeżeli endpoint zwraca błąd autoryzacji, najpierw sprawdź zakres tokena u administratora sklepu.
Ustaw zmienne pomocnicze:
export BASE_URL="https://b2b.example.com/rest/V1"
export TOKEN="paste-token-here"
export WEBSITE_ID=1
export COMPANY_ID=10
export CUSTOMER_ID=25
export SKU="B2B-SKU-001"
export CURRENCY="PLN"
curl -X GET "$BASE_URL/kowal-b2b/websites/$WEBSITE_ID/config" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json"
Cel:
websiteId,curl -X GET "$BASE_URL/kowal-b2b/products/$SKU?websiteId=$WEBSITE_ID" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json"
Cel:
curl -X GET "$BASE_URL/kowal-b2b/products/$SKU/availability?websiteId=$WEBSITE_ID" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json"
Cel:
curl -X GET "$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"
Cel:
curl -X GET "$BASE_URL/kowal-b2b/companies/$COMPANY_ID/products/$SKU/visibility?websiteId=$WEBSITE_ID" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json"
Cel:
curl -X POST "$BASE_URL/kowal-b2b/companies/$COMPANY_ID/quick-order/validate" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"websiteId": 1,
"currency": "PLN",
"items": [
{
"sku": "B2B-SKU-001",
"qty": 5
},
{
"sku": "B2B-SKU-002",
"qty": 2
}
]
}'
Cel:
Typowy proces automatyzacji zakupów wygląda tak:
companyId, websiteId i walutę.Rekomendacja: nie pobieraj ceny i widoczności wyłącznie pojedynczymi requestami, jeśli użytkownik importuje duży plik SKU. Najpierw użyj walidacji quick order.
GET /V1/kowal-b2b/products?websiteId=...
Zastosowanie:
GET /V1/kowal-b2b/products/:sku?websiteId=...
Zastosowanie:
GET /V1/kowal-b2b/products/:sku/availability?websiteId=...
Zastosowanie:
GET /V1/kowal-b2b/companies/:companyId/products/:sku/price?websiteId=...¤cy=...&qty=...
Zastosowanie:
GET /V1/kowal-b2b/companies/:companyId/products/:sku/visibility?websiteId=...
Zastosowanie:
POST /V1/kowal-b2b/companies/:companyId/quick-order/validate
Body:
{
"websiteId": 1,
"currency": "PLN",
"items": [
{
"sku": "B2B-SKU-001",
"qty": 5
}
]
}
Zastosowanie:
GET /V1/kowal-b2b/companies/:companyId/shopping-lists?websiteId=...
Zastosowanie:
POST /V1/kowal-b2b/companies/:companyId/shopping-lists
Przykład:
{
"websiteId": 1,
"name": "Stałe zamówienie magazynowe",
"customerId": 25,
"isDefault": false
}
POST /V1/kowal-b2b/shopping-lists/:listId/items
Przykład:
{
"currency": "PLN",
"items": [
{
"sku": "B2B-SKU-001",
"qty": 5
}
]
}
RFQ pozwala klientowi B2B wysłać zapytanie ofertowe, a sprzedawcy przygotować odpowiedź cenową.
POST /V1/kowal-b2b/quotes
Przykład:
{
"request": {
"websiteId": 1,
"companyId": 10,
"customerId": 25,
"externalId": "CLIENT-RFQ-2026-0001",
"title": "Zapytanie ofertowe na produkty magazynowe",
"currency": "PLN",
"customerNote": "Prosimy o ofertę dla ilości kwartalnych.",
"metadata": {
"source": "client-erp"
}
}
}
POST /V1/kowal-b2b/quotes/items
Przykład:
{
"request": {
"quoteId": 100,
"sku": "B2B-SKU-001",
"qty": 100,
"requestedPrice": null,
"comment": "Cena dla dostawy cyklicznej"
}
}
POST /V1/kowal-b2b/quotes/:quoteId/submit
Przykład:
{
"request": {
"customerId": 25,
"message": "Zapytanie gotowe do wyceny."
}
}
GET /V1/kowal-b2b/quotes/:quoteId
GET /V1/kowal-b2b/quotes/:quoteId/items
GET /V1/kowal-b2b/quotes/:quoteId/comments
GET /V1/kowal-b2b/quotes/:quoteId/history
Zastosowanie:
API dokumentów pozwala klientowi pobierać dokumenty przypisane do jego firmy.
Typowe dokumenty:
GET /V1/kowal-b2b/companies/:companyId/documents?websiteId=...&documentType=...
Przykład:
curl -X GET "$BASE_URL/kowal-b2b/companies/$COMPANY_ID/documents?websiteId=$WEBSITE_ID&documentType=invoice" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json"
GET /V1/kowal-b2b/documents/:documentId?companyId=...&websiteId=...
GET /V1/kowal-b2b/documents/:documentId/files?companyId=...&websiteId=...
Zastosowanie:
GET /V1/kowal-b2b/companies/:companyId/credit/status?websiteId=...¤cy=...
Zastosowanie:
GET /V1/kowal-b2b/payment-terms?websiteId=...
Zastosowanie:
Jeżeli firma korzysta z workflow akceptacji, API pozwala sprawdzić, czy dana wartość koszyka wymaga zatwierdzenia.
GET /V1/kowal-b2b/companies/:companyId/approval/required?websiteId=...&grandTotal=...¤cy=...
Zastosowanie:
GET /V1/kowal-b2b/companies/:companyId/approval/requests?websiteId=...&status=...
GET /V1/kowal-b2b/approval/requests/:requestId/decisions
API kontekstu zamówień pozwala odczytać informacje B2B powiązane ze standardowym zamówieniem sklepu.
GET /V1/kowal-b2b/orders/:orderId/b2b-context
GET /V1/kowal-b2b/companies/:companyId/orders/b2b-context?websiteId=...&approvalStatus=...
Zastosowanie:
API zwraca standardowe odpowiedzi HTTP.
Najczęstsze statusy:
| HTTP | Znaczenie | Typowa przyczyna |
|---|---|---|
200 |
Operacja poprawna | Dane zostały zwrócone |
400 |
Błędne dane wejściowe | Brak websiteId, błędna waluta, błędny payload |
401 |
Brak autoryzacji | Brak tokena albo token wygasł |
403 |
Brak uprawnienia | Token nie ma dostępu do endpointu albo firmy |
404 |
Nie znaleziono | Firma, produkt, dokument albo RFQ nie istnieje w danym kontekście |
409 |
Konflikt | Duplikat operacji, konflikt statusu, niepoprawne przejście workflow |
422 |
Błąd walidacji biznesowej | Produkt niewidoczny, brak ceny, brak aktywnej relacji firmy |
500 |
Błąd serwera | Błąd techniczny po stronie sklepu |
Najważniejsze kody domenowe:
| Kod | Znaczenie |
|---|---|
b2b.website.missing |
Brakuje websiteId |
b2b.website.disabled |
B2B nie jest aktywne dla website |
b2b.company.not_found |
Firma nie istnieje |
b2b.company.not_assigned_to_website |
Firma nie ma aktywnej relacji z website |
b2b.product.not_visible |
Produkt nie jest widoczny dla firmy |
b2b.price.not_found |
Brak ceny B2B |
b2b.credit.limit_exceeded |
Przekroczony limit kupiecki |
b2b.approval.required |
Operacja wymaga akceptacji |
Przykład odpowiedzi błędu:
{
"code": "b2b.product.not_visible",
"message": "Product is not visible for selected company.",
"details": {
"website_id": 1,
"company_id": 10,
"sku": "B2B-SKU-001"
}
}
websiteId, companyId i currency w konfiguracji integracji.Idempotency-Key dla operacji zapisu.Przed uruchomieniem produkcyjnym wykonaj testy:
401 albo 403,qty=1,websiteId,companyId.| Metoda | Endpoint | Zastosowanie |
|---|---|---|
GET |
/V1/kowal-b2b/websites/:websiteId/config |
Sprawdzenie konfiguracji B2B website |
GET |
/V1/kowal-b2b/websites/:websiteId/features |
Sprawdzenie dostępnych funkcji B2B |
| Metoda | Endpoint | Zastosowanie |
|---|---|---|
GET |
/V1/kowal-b2b/products?websiteId=... |
Lista produktów |
GET |
/V1/kowal-b2b/products/:sku?websiteId=... |
Produkt po SKU |
GET |
/V1/kowal-b2b/products/:sku/availability?websiteId=... |
Dostępność SKU |
GET |
/V1/kowal-b2b/products/:sku/b2b-status?websiteId=... |
Status B2B produktu |
GET |
/V1/kowal-b2b/companies/:companyId/products/:sku/price?websiteId=...¤cy=...&qty=... |
Cena B2B |
GET |
/V1/kowal-b2b/companies/:companyId/products/:sku/visibility?websiteId=... |
Widoczność SKU |
| Metoda | Endpoint | Zastosowanie |
|---|---|---|
POST |
/V1/kowal-b2b/companies/:companyId/quick-order/validate |
Walidacja wielu SKU |
GET |
/V1/kowal-b2b/companies/:companyId/shopping-lists?websiteId=... |
Listy zakupowe firmy |
POST |
/V1/kowal-b2b/companies/:companyId/shopping-lists |
Utworzenie listy zakupowej |
GET |
/V1/kowal-b2b/shopping-lists/:listId/items |
Pozycje listy |
POST |
/V1/kowal-b2b/shopping-lists/:listId/items |
Dodanie pozycji do listy |
| Metoda | Endpoint | Zastosowanie |
|---|---|---|
GET |
/V1/kowal-b2b/companies/:companyId/quotes?websiteId=...&status=... |
Lista RFQ/ofert firmy |
POST |
/V1/kowal-b2b/quotes |
Utworzenie RFQ |
GET |
/V1/kowal-b2b/quotes/:quoteId |
Szczegóły RFQ |
POST |
/V1/kowal-b2b/quotes/items |
Dodanie pozycji RFQ |
POST |
/V1/kowal-b2b/quotes/:quoteId/submit |
Złożenie RFQ |
POST |
/V1/kowal-b2b/quotes/:quoteId/accept |
Akceptacja oferty |
POST |
/V1/kowal-b2b/quotes/:quoteId/reject |
Odrzucenie oferty |
GET |
/V1/kowal-b2b/quotes/:quoteId/history |
Historia statusów |
| Metoda | Endpoint | Zastosowanie |
|---|---|---|
GET |
/V1/kowal-b2b/companies/:companyId/documents?websiteId=...&documentType=... |
Dokumenty firmy |
GET |
/V1/kowal-b2b/documents/:documentId?companyId=...&websiteId=... |
Szczegóły dokumentu |
GET |
/V1/kowal-b2b/documents/:documentId/files?companyId=...&websiteId=... |
Pliki dokumentu |
GET |
/V1/kowal-b2b/companies/:companyId/credit/status?websiteId=...¤cy=... |
Status limitu kupieckiego |
GET |
/V1/kowal-b2b/payment-terms?websiteId=... |
Warunki płatności |
GET |
/V1/kowal-b2b/orders/:orderId/b2b-context |
Kontekst B2B zamówienia |
GET |
/V1/kowal-b2b/companies/:companyId/orders/b2b-context?websiteId=...&approvalStatus=... |
Zamówienia firmy z kontekstem B2B |
Dokument koncentruje się na integracji zakupowej po stronie klienta B2B. Opisuje praktyczne użycie API, wymagane identyfikatory, przykłady requestów, obsługę błędów i typowe scenariusze automatyzacji.
Informacje wdrożeniowe sklepu, konfiguracja panelu administracyjnego i szczegóły techniczne instalacji są obsługiwane osobno przez zespół utrzymujący sklep B2B.