PolkurierApiClient rozszerzony do pelnego kontraktu (7 metod):
createShipment/getLabel/getStatus/cancelOrder/getAvailableCarriers/
getInpostParcelMachines/getCourierPoints. Wspolny call() parsuje
envelope {status, response}. Kontrakt zweryfikowany na oficjalnej
dokumentacji PDF v1.11.
PolkurierShipmentService (implements ShipmentProviderInterface)
orchestruje pelen flow: normalizeShipmentType (lowercase), split
ulicy, build recipient/sender/pickup, COD z bank account z
company_settings, extractOrderNumber/extractTrackingNumber
priorytetujace SDK Order entity (number, waybills[0].number).
PolkurierTrackingService (implements ShipmentTrackingInterface)
mapuje statusy O/P/A/WP/D/Z/W przez delivery_status_mappings.
UI panel polkurier w prepare.php z dynamiczna lista uslug z
available_carriers. Bez dedykowanego selektora punktu — operator
wpisuje receiver_point_id w istniejace pole w sekcji Adres odbiorcy.
Migracja 20260514_000115 seedujaca 7 wpisow delivery_status_mappings
z oficjalnej tabeli ORDER_STATUS (O/P/A/WP/D/Z/W).
Live test #114/#115 zakonczony sukcesem po 4 iteracjach
(ReferenceError -> uppercase shipmenttype -> orderno parsing ->
A4/A6 etykieta). Rozmiar etykiety A4/A6 sterowany w panelu klienta
polkurier.pl, NIE przez API.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
5.4 KiB
5.4 KiB
2026-05-14
Co zrobiono
- [Phase 127, Plan 01] polkurier.pl Integration Foundation — pojedyncza globalna konfiguracja brokera kurierskiego polkurier (login + Token API zaszyfrowany przez
IntegrationSecretCipher), karta w hubie integracji obok Apaczki, realny test polaczenia przezapimetod=test_auth_api. Zweryfikowane na zywym koncie operatora (Autoryzacja: 1). - Task 1: Migracja DDL (
polkurier_integration_settings+ seedintegrations.type='polkurier') +PolkurierIntegrationRepository(single-instance, mirror HostedSMS/SMSPLANET). - Task 2:
PolkurierApiClient(POST dohttps://api.polkurier.pl/, JSON envelope{authorization, apimetod, data}) +PolkurierIntegrationController+ widok formularza + 3 routy + i18n. - Task 3: Wpiecie polkuriera do
IntegrationsHubController(buildPolkurierRow(), kolejnosc: po Apaczce) + aktualizacja.paul/codebase/{db_schema,architecture,tech_changelog}.md. - Auto-fix (live debugging):
status='success'zamiast'ok'(ResponseStatus z SDK),Content-Type: application/jsonbez charset suffix (polkurier strict), parser bledu z polaresponseenvelope'a. - Scope deviation vs PLAN: kolumna
logindodana (API wymaga login+token), kolumnaenvironmentpominieta (polkurier nie ma sandbox).
Zmienione pliki
database/migrations/20260514_000114_create_polkurier_integration_settings.sqlsrc/Modules/Settings/PolkurierIntegrationRepository.phpsrc/Modules/Settings/PolkurierApiClient.phpsrc/Modules/Settings/PolkurierIntegrationController.phpresources/views/settings/polkurier.phproutes/web.phpsrc/Modules/Settings/IntegrationsHubController.phpresources/lang/pl.php.paul/codebase/db_schema.md.paul/codebase/architecture.md.paul/codebase/tech_changelog.md.paul/STATE.md.paul/ROADMAP.md.paul/phases/127-polkurier-integration-foundation/127-01-PLAN.md.paul/phases/127-polkurier-integration-foundation/127-01-SUMMARY.md
Co zrobiono (cd.)
- [Phase 128, Plan 01] polkurier ShipmentService + TrackingService + UI prepare panel + delivery_status_mappings seed. polkurier zarejestrowany jako 4. provider w
ShipmentProviderRegistry(obok allegro_wza/apaczka/inpost). Operator tworzy paczki z/orders/{id}/shipment/prepare, etykieta A6 generowana, cron tracking gotowy do mapowania O/P/A/WP/D/Z/W → created/confirmed/cancelled/in_transit/delivered/returned/problem. - Task 1:
PolkurierApiClientrozszerzony z stubów Phase 127 do 7 metod (createShipment/getLabel/getStatus/cancelOrder/getAvailableCarriers/getInpostParcelMachines/getCourierPoints). Wspólny prywatnycall($apimetod, $data, $login, $token)parsuje envelope{status, response}. Kontrakt zweryfikowany na oficjalnej dokumentacji PDF v1.11 (pobrana i zachowana w.paul/phases/128-polkurier-shipment-service/polkurier-api-docs.txt). - Task 2:
PolkurierShipmentService(~520 LOC, implements ShipmentProviderInterface) +PolkurierTrackingService(~110 LOC, implements ShipmentTrackingInterface).normalizeShipmentType()mapuje legacy PACKAGE/BOX/PARCEL na lowercase zbiór polkuriera.extractOrderNumber/extractTrackingNumberpriorytetują SDK Order entity (number,waybills[0].number). - Task 3: Wiring
routes/web.php+CronHandlerFactory+ShipmentController.prepare/create(rozszerzony oservice_code/pickup_*w form data). UI panel "polkurier" wprepare.phpz dynamiczną listą usług + JS toggle.DeliveryStatus::trackingUrlfallback dla provider='polkurier'. - Task 4 (checkpoint live test #114/#115): 4 iteracje — ReferenceError w JS
clearHiddenFields→ uppercaseshipmenttype→ parsingnumbervsorderno→ A4 vs A6 etykieta. Każda iteracja autopoprawiona w tej samej sesji APPLY. - Task 5: Migracja
20260514_000115_seed_polkurier_delivery_status_mappings.sqlz 7 wpisami z oficjalnej tabeli ORDER_STATUS PDF v1.11 (O/P/A/WP/D/Z/W). IdempotentnaON DUPLICATE KEY UPDATE. - Task 6: Aktualizacja
.paul/codebase/{architecture,db_schema,tech_changelog}.mdz sekcją Phase 128. - Scope removal vs PLAN: UI selektor punktów paczkomatowych usunięty (operator zgłosił duplikat z polem "Punkt odbioru" w sekcji Adres odbiorcy).
lookupPickupPoints+ AJAX route + JS handler usunięte.getInpostParcelMachines/getCourierPointszostawione jako stuby na przyszłą fazę paczkomatów UI. - Decyzja: rozmiar etykiety A4/A6 sterowany w panelu klienta polkurier.pl, NIE przez API (zweryfikowane w PDF v1.11). Operator zmienia preferencje konta jednorazowo.
Zmienione pliki (cd.)
src/Modules/Settings/PolkurierApiClient.php(rozszerzenie z stubów do 7 metod)src/Modules/Shipments/PolkurierShipmentService.php(nowy plik)src/Modules/Shipments/PolkurierTrackingService.php(nowy plik)src/Modules/Shipments/DeliveryStatus.php(fallback URL polkurier)src/Modules/Shipments/ShipmentController.php(polkurierServices + service_code/pickup_*)src/Modules/Cron/CronHandlerFactory.php(rejestracja PolkurierTrackingService)routes/web.php(rejestracja PolkurierShipmentService w registry)resources/views/shipments/prepare.php(panel polkurier + JS)database/migrations/20260514_000115_seed_polkurier_delivery_status_mappings.sql(nowy plik).paul/phases/128-polkurier-shipment-service/128-01-PLAN.md(nowy plik).paul/phases/128-polkurier-shipment-service/128-01-SUMMARY.md(nowy plik).paul/phases/128-polkurier-shipment-service/polkurier-api-docs.txt(nowy plik — referencyjna doca z PDF v1.11)