5.3 KiB
Plan integracji MojeGS1 API - przypisywanie EAN z poziomu orderPRO
Cel
Przycisk "Przypisz EAN z GS1" na stronie szczegółów produktu (/products/{id}), który automatycznie generuje kolejny EAN z puli GS1, rejestruje produkt w MojeGS1 i zapisuje EAN lokalnie.
API MojeGS1 v2
- Base URL:
https://mojegs1.pl/api/v2 - Auth: HTTP Basic (login + hasło)
- Spec:
/api/v2/swagger/external-api/swagger.json
Endpointy używane:
GET /api/v2/products?page[offset]=X&page[limit]=100&sort=name— lista produktów (paginacja)GET /api/v2/products/{Gtin}— pojedynczy produktPUT /api/v2/products/{Gtin}— utwórz/aktualizuj produkt
Wymagane pola PUT:
brandName(2-200 znaków) — markagpcCode(8-cyfrowy int) — kod klasyfikacji GPCnetContent(number) +netContentUnit(string: szt, kg, g, l, ml, m, cm, mm, m2, m3)status— "ACT" / "WIT" / "HID"targetMarket— array, np. ["PL"]descriptionLanguage— "PL"description— opis (20-4000 znaków, opcjonalne ale zalecane)commonName— nazwa zwyczajowa (do 150 znaków)
Struktura request PUT:
{
"data": {
"type": "products",
"id": "{GTIN-13}",
"attributes": {
"brandName": "marianek.pl",
"commonName": "Nazwa produktu",
"gpcCode": 10008365,
"netContent": 1,
"netContentUnit": "szt",
"status": "ACT",
"targetMarket": ["PL"],
"descriptionLanguage": "PL"
}
}
}
Stan konta GS1
- 461 produktów zarejestrowanych
- Główny prefiks:
590532390(9 cyfr, 451 produktów, ciągła sekwencja 000-450) - Drugi prefiks:
590531617(10 produktów, starsze) - Najwyższy GTIN:
5905323904507(item 450) - Następny wolny:
5905323904514(item 451) - Max capacity: 1000 produktów (item 000-999)
Dane dostępowe API
- Login:
user_85c27342-bc97-4f42-8890-f6b27d3233c4 - Hasło:
K3sawGA3X?L?e^bJ$ZqyhieFG)w#c8f+?V^z - UWAGA: dane przechowywane w tabeli
app_settings, NIE w kodzie
Plan implementacji
Krok 1: Tabela app_settings — migracja
Plik: database/migrations/20260224_000013_add_gs1_settings.sql
Dodać rekordy do app_settings:
gs1_api_login— login APIgs1_api_password— hasło API (zaszyfrowane lub plain — zależy od obecnego wzorca)gs1_prefix— prefiks GS1 (domyślnie590532390)gs1_default_brand— domyślna marka (domyślniemarianek.pl)gs1_default_gpc_code— domyślny kod GPC (domyślnie10008365)
Sprawdzić czy tabela app_settings już istnieje (migracja 000012).
Krok 2: Strona ustawień GS1
Plik widoku: resources/views/settings/gs1.php
Pliki PHP: zmiana w SettingsController.php — dodać metody gs1() i gs1Save()
Route: GET /settings/gs1 + POST /settings/gs1
Formularz z polami: login, hasło, prefiks, domyślna marka, domyślny kod GPC. Przycisk "Test połączenia" (opcjonalnie).
Krok 3: Klient MojeGS1
Plik: src/Modules/GS1/MojeGS1Client.php
Metody:
listProducts(int $page, int $limit): array— lista produktówgetProduct(string $gtin): ?array— pojedynczy produktupsertProduct(string $gtin, array $attributes): array— PUT produktfindHighestGtin(string $prefix): ?string— paginuje i szuka max GTIN z prefiksugenerateNextEan(string $prefix): string— oblicza kolejny EAN z cyfrą kontrolną
Statyczna metoda:
calculateEan13CheckDigit(string $partial12): int
Krok 4: Serwis GS1
Plik: src/Modules/GS1/GS1Service.php
Metoda: assignEanToProduct(int $productId): array
- Pobierz produkt z orderPRO (sprawdź czy nie ma już EAN)
- Pobierz ustawienia GS1 z app_settings
- Znajdź najwyższy GTIN w GS1 API
- Wygeneruj następny EAN
- Zarejestruj w GS1 (PUT) z danymi produktu (nazwa, marka, gpcCode)
- Zaktualizuj EAN w produkcie orderPRO
- Zwróć nowy EAN
Krok 5: Controller endpoint
Plik: src/Modules/Products/ProductsController.php
Nowa metoda: assignGs1Ean(Request $request): Response
Route: POST /products/{id}/assign-ean
- Walidacja CSRF
- Wywołanie GS1Service::assignEanToProduct
- Flash success/error
- Redirect back do
/products/{id}
Krok 6: Widok — przycisk na stronie produktu
Plik: resources/views/products/show.php
Dodać przycisk "Przypisz EAN z GS1" widoczny gdy $product['ean'] jest pusty.
Formularz POST do /products/{id}/assign-ean.
Krok 7: Tłumaczenia
Plik: resources/lang/pl.php
Dodać klucze:
products.gs1.assign_ean— "Przypisz EAN z GS1"products.gs1.ean_assigned— "EAN :ean został przypisany i zarejestrowany w GS1."products.gs1.already_has_ean— "Produkt ma już przypisany EAN."products.gs1.error— "Błąd podczas przypisywania EAN z GS1."settings.gs1.*— etykiety formularza ustawień
Krok 8: Routing
Plik: routes/web.php
Dodać:
POST /products/{id}/assign-ean→ ProductsController::assignGs1EanGET /settings/gs1→ SettingsController::gs1POST /settings/gs1→ SettingsController::gs1Save
Zależności
AppSettingsRepository— już istnieje (migracja 000012), sprawdzić APIProductRepository— metoda update EAN (sprawdzić czy istnieje)- Curl extension — wymagany (prawdopodobnie już jest)
Kolejność prac
1 → 3 → 4 → 5 → 6 → 7 → 8 → 2 (ustawienia na końcu, na początku hardcode credentials do testów) Praktycznie: 3 → 4 → 5 → 6 → 7 → 8 (migracja i ustawienia mogą być równolegle)