From c5b2885b4466d2990e9cbfd8477c9ec61f9fa839 Mon Sep 17 00:00:00 2001 From: Jacek Pyziak Date: Wed, 8 Apr 2026 20:59:55 +0200 Subject: [PATCH] feat: Add User-Agent header to Allegro API requests - Implemented buildUserAgent() method in AllegroApiClient, AllegroOAuthClient, and AllegroTrackingService to include User-Agent header in all HTTP requests to Allegro API. - Updated .env.example to include APP_VERSION and ALLEGRO_USER_AGENT_URL for configuration. - Created public /info page to provide application details required by Allegro, including app name, version, description, and contact information. - Added minimalist layout for public pages to ensure a professional appearance. - Ensured all changes comply with Allegro's API requirements for User-Agent header. --- .env | 4 + .env.example | 5 + .paul/PROJECT.md | 2 + .paul/ROADMAP.md | 2 + .paul/STATE.md | 19 +- .paul/changelog/2026-04-08.md | 24 +++ .paul/governance/governance_2026-04-08.jsonl | 46 +++++ .../88-allegro-user-agent/88-01-PLAN.md | 164 ++++++++++++++++++ .../88-allegro-user-agent/88-01-SUMMARY.md | 97 +++++++++++ .../phases/89-allegro-info-page/89-01-PLAN.md | 155 +++++++++++++++++ .../89-allegro-info-page/89-01-SUMMARY.md | 113 ++++++++++++ .vscode/ftp-kr.sync.cache.json | 20 +-- resources/views/info/allegro.php | 98 +++++++++++ resources/views/layouts/public.php | 34 ++++ routes/web.php | 4 + src/Modules/Info/InfoController.php | 27 +++ src/Modules/Settings/AllegroApiClient.php | 13 ++ src/Modules/Settings/AllegroOAuthClient.php | 10 ++ .../Settings/AllegroOrderImportService.php | 1 + .../Settings/ShopproOrdersSyncService.php | 1 + .../Shipments/AllegroTrackingService.php | 10 ++ 21 files changed, 827 insertions(+), 22 deletions(-) create mode 100644 .paul/phases/88-allegro-user-agent/88-01-PLAN.md create mode 100644 .paul/phases/88-allegro-user-agent/88-01-SUMMARY.md create mode 100644 .paul/phases/89-allegro-info-page/89-01-PLAN.md create mode 100644 .paul/phases/89-allegro-info-page/89-01-SUMMARY.md create mode 100644 resources/views/info/allegro.php create mode 100644 resources/views/layouts/public.php create mode 100644 src/Modules/Info/InfoController.php diff --git a/.env b/.env index 43823fe..d530ba2 100644 --- a/.env +++ b/.env @@ -1,4 +1,5 @@ APP_NAME=orderPRO +APP_VERSION=1.0.0 APP_ENV=local APP_DEBUG=true APP_URL=https://orderpro.projectpro.pl @@ -19,5 +20,8 @@ CRON_PUBLIC_TOKEN=9b8c1e5f-9c3a-4d2b-8e7a-1f2b3c4d5e6f pracownia.key=9554daf4bbcbbb5e72a2b48ee7d6a7f20262713d72484b781460e2c772d813fc +# Allegro User-Agent +ALLEGRO_USER_AGENT_URL=https://orderpro.pl/info + login=jacek.pyziak@project-pro.pl password=ProjectPro2025! \ No newline at end of file diff --git a/.env.example b/.env.example index f4e5490..23d3985 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,5 @@ APP_NAME=orderPRO +APP_VERSION=1.0.0 APP_ENV=local APP_DEBUG=true APP_URL=http://localhost:8000 @@ -23,3 +24,7 @@ DB_CHARSET=utf8mb4 # Windows XAMPP: C:/xampp/php/extras/ssl/cacert.pem # Linux: /etc/ssl/certs/ca-certificates.crt CURL_CA_BUNDLE_PATH= + +# Allegro User-Agent — wymagany od 01.07.2026 (art. 3.4.c Regulaminu REST API) +# Format: {APP_NAME}/{APP_VERSION} (+{ALLEGRO_USER_AGENT_URL}) +ALLEGRO_USER_AGENT_URL=https://orderpro.pl/info diff --git a/.paul/PROJECT.md b/.paul/PROJECT.md index 54819a3..fab655b 100644 --- a/.paul/PROJECT.md +++ b/.paul/PROJECT.md @@ -91,6 +91,8 @@ Sprzedawca moĹĽe obsĹ‚ugiwać zamĂłwienia ze wszystkich kanałów - [x] Filtrowanie zamowien po grupie statusow (klikalna nazwa grupy na panelu) — Phase 85 - [x] Naprawa tworzenia przesylek COD Apaczka — dodanie numeru konta bankowego do payloadu API — Phase 86 - [x] Usuwanie przesylek z zakladki Przesylki w szczegolach zamowienia (z potwierdzeniem) — Phase 87 +- [x] Naglowek User-Agent w requestach Allegro API (art. 3.4.c Regulaminu, deadline 30.06.2026) — Phase 88 +- [x] Publiczna strona /info dla Allegro User-Agent URL — Phase 89 - [ ] Eliminacja zduplikowanego kodu: SslCertificateResolver, ToggleableRepositoryTrait, RedirectPathResolver, ReceiptService — Phase 68 ### Active (In Progress) diff --git a/.paul/ROADMAP.md b/.paul/ROADMAP.md index 0bfd664..811dbb0 100644 --- a/.paul/ROADMAP.md +++ b/.paul/ROADMAP.md @@ -48,6 +48,8 @@ Wersja mobilna aplikacji, modul po module. Cel: pelna uzywalnosc orderPRO na tel | 85 | Status Group Filter | 1/1 | Complete | | 86 | Apaczka COD Bank Account | 1/1 | Complete | | 87 | Shipment Delete | 1/1 | Complete | +| 88 | Allegro User-Agent | 1/1 | Complete | +| 89 | Allegro Info Page | 1/1 | Complete | | TBD | Mobile Orders List | - | Not started | | TBD | Mobile Order Details | - | Not started | | TBD | Mobile Settings | - | Not started | diff --git a/.paul/STATE.md b/.paul/STATE.md index 48ca43a..fae202f 100644 --- a/.paul/STATE.md +++ b/.paul/STATE.md @@ -5,19 +5,19 @@ See: .paul/PROJECT.md (updated 2026-04-08) **Core value:** Sprzedawca moze obslugiwac zamowienia ze wszystkich kanalow sprzedazy i nadawac przesylki bez przelaczania sie miedzy platformami. -**Current focus:** Milestone v3.0 - Phase 87 complete, ready for next PLAN +**Current focus:** Milestone v3.0 - Phase 89 complete, ready for next PLAN ## Current Position Milestone: v3.0 Mobile Responsive - In progress -Phase: 87 (Shipment Delete) — Complete -Plan: 87-01 unified +Phase: 89 (Allegro Info Page) — Complete +Plan: 89-01 unified Status: Loop complete, ready for next PLAN -Last activity: 2026-04-08 — Unified .paul/phases/87-shipment-delete/87-01-PLAN.md +Last activity: 2026-04-08 — Unified .paul/phases/89-allegro-info-page/89-01-PLAN.md Progress: - Milestone: [#########.] ~93% -- Phase 87: [##########] 100% +- Phase 89: [##########] 100% ## Loop Position @@ -30,11 +30,6 @@ PLAN ──▶ APPLY ──▶ UNIFY ## Session Continuity Last session: 2026-04-08 -Stopped at: Plan 87-01 unified +Stopped at: Plan 89-01 unified Next action: Run /paul:plan for the next prioritized phase -Resume file: .paul/phases/87-shipment-delete/87-01-SUMMARY.md - -## Git State - -Last commit: 8fa9ca6 -Branch: main +Resume file: .paul/phases/89-allegro-info-page/89-01-SUMMARY.md diff --git a/.paul/changelog/2026-04-08.md b/.paul/changelog/2026-04-08.md index 028fff0..94a7b8a 100644 --- a/.paul/changelog/2026-04-08.md +++ b/.paul/changelog/2026-04-08.md @@ -13,10 +13,34 @@ - Cleanup pliku etykiety z dysku, activity log shipment_deleted - Przycisk "Usun" z potwierdzeniem OrderProAlerts.confirm w tabeli przesylek +- [Phase 88, Plan 01] Dodanie naglowka User-Agent do wszystkich requestow Allegro API +- Dodano buildUserAgent() do AllegroApiClient, AllegroOAuthClient, AllegroTrackingService +- Dodano zmienne APP_VERSION i ALLEGRO_USER_AGENT_URL do .env/.env.example +- Format: orderPRO/1.0.0 (+https://orderpro.pl/info) + +- [Phase 89, Plan 01] Publiczna strona /info dla Allegro User-Agent URL +- InfoController + widok info/allegro.php + layout public.php +- Route GET /info bez authMiddleware +- Tresc: opis wewnetrznej aplikacji Project PRO, integracja z Allegro API, kontakt + +- [Bugfix] Warunek payment_status w automatyzacji nie dzialal z eventem order.imported +- Dodano `new_payment_status` do kontekstu triggera `order.imported` w AllegroOrderImportService i ShopproOrdersSyncService +- Wartosc pochodzi z mapped order (`payment_status`: 0/1/2) — zgodna z istniejacym evaluatePaymentStatusCondition + ## Zmienione pliki +- `src/Modules/Info/InfoController.php` +- `resources/views/info/allegro.php` +- `resources/views/layouts/public.php` +- `src/Modules/Settings/AllegroApiClient.php` +- `src/Modules/Settings/AllegroOAuthClient.php` +- `src/Modules/Shipments/AllegroTrackingService.php` +- `.env.example` +- `.env` - `src/Modules/Shipments/ApaczkaShipmentService.php` - `src/Modules/Shipments/ShipmentPackageRepository.php` - `src/Modules/Shipments/ShipmentController.php` - `routes/web.php` - `resources/views/orders/show.php` +- `src/Modules/Settings/AllegroOrderImportService.php` +- `src/Modules/Settings/ShopproOrdersSyncService.php` diff --git a/.paul/governance/governance_2026-04-08.jsonl b/.paul/governance/governance_2026-04-08.jsonl index 0d800a6..0738884 100644 --- a/.paul/governance/governance_2026-04-08.jsonl +++ b/.paul/governance/governance_2026-04-08.jsonl @@ -36,3 +36,49 @@ {"ts":"2026-04-08T16:22:03Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\ROADMAP.md","cwd":"/c/visual studio code/projekty/orderPRO"} {"ts":"2026-04-08T16:22:14Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/orderPRO"} {"ts":"2026-04-08T16:22:25Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\changelog\\\\2026-04-08.md","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:32:14Z","tool":"Bash","cmd":"mkdir -p \".paul/phases/88-allegro-user-agent\"\",\"description\":\"Create phase 88 directory\"},\"tool_response\":{\"stdout\":\"\",\"stderr\":\"\",\"interrupted\":false,\"isImage\":false,\"noOutputEx","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:33:04Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\phases\\\\88-allegro-user-agent\\\\88-01-PLAN.md","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:33:24Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:33:34Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\ROADMAP.md","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:35:09Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.env.example","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:35:17Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.env.example","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:35:47Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.env","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:35:58Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.env","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:36:04Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Settings\\\\AllegroApiClient.php","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:36:21Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Settings\\\\AllegroApiClient.php","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:36:46Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Settings\\\\AllegroApiClient.php","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:36:50Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Settings\\\\AllegroApiClient.php","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:36:54Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Settings\\\\AllegroApiClient.php","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:37:12Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Settings\\\\AllegroOAuthClient.php","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:37:16Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Settings\\\\AllegroOAuthClient.php","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:37:33Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Shipments\\\\AllegroTrackingService.php","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:37:38Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Shipments\\\\AllegroTrackingService.php","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:37:43Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Shipments\\\\AllegroTrackingService.php","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:38:15Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:39:10Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\phases\\\\88-allegro-user-agent\\\\88-01-SUMMARY.md","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:39:18Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\PROJECT.md","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:39:22Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\ROADMAP.md","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:39:27Z","tool":"Bash","cmd":"mkdir -p \".paul/changelog\"\",\"description\":\"Create changelog directory\"},\"tool_response\":{\"stdout\":\"\",\"stderr\":\"\",\"interrupted\":false,\"isImage\":false,\"noOutputExpected\":true},\"t","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:39:54Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\changelog\\\\2026-04-08.md","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:40:08Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:41:53Z","tool":"Bash","cmd":"mkdir -p \".paul/phases/89-allegro-info-page\"\",\"description\":\"Create phase 89 directory\"},\"tool_response\":{\"stdout\":\"\",\"stderr\":\"\",\"interrupted\":false,\"isImage\":false,\"noOutputExp","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:42:40Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\phases\\\\89-allegro-info-page\\\\89-01-PLAN.md","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:42:45Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\ROADMAP.md","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:43:00Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:44:15Z","tool":"Bash","cmd":"mkdir -p \"src/Modules/Info\" && mkdir -p \"resources/views/info\"\",\"description\":\"Create directories for info module\"},\"tool_response\":{\"stdout\":\"\",\"stderr\":\"\",\"interrupted\":false,\"","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:44:30Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Info\\\\InfoController.php","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:44:35Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\routes\\\\web.php","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:44:40Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\routes\\\\web.php","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:44:50Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\resources\\\\views\\\\layouts\\\\public.php","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:45:09Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\resources\\\\views\\\\info\\\\allegro.php","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:46:31Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Info\\\\InfoController.php","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:49:57Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\resources\\\\views\\\\info\\\\allegro.php","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:50:52Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\phases\\\\89-allegro-info-page\\\\89-01-SUMMARY.md","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:50:57Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\ROADMAP.md","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:51:03Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\PROJECT.md","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:51:22Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\changelog\\\\2026-04-08.md","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:51:38Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:57:02Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Settings\\\\AllegroOrderImportService.php","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:57:04Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Settings\\\\ShopproOrdersSyncService.php","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:58:50Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\changelog\\\\2026-04-08.md","cwd":"/c/visual studio code/projekty/orderPRO"} +{"ts":"2026-04-08T18:58:51Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\changelog\\\\2026-04-08.md","cwd":"/c/visual studio code/projekty/orderPRO"} diff --git a/.paul/phases/88-allegro-user-agent/88-01-PLAN.md b/.paul/phases/88-allegro-user-agent/88-01-PLAN.md new file mode 100644 index 0000000..0452211 --- /dev/null +++ b/.paul/phases/88-allegro-user-agent/88-01-PLAN.md @@ -0,0 +1,164 @@ +--- +phase: 88-allegro-user-agent +plan: 01 +type: execute +wave: 1 +depends_on: [] +files_modified: [src/Modules/Settings/AllegroApiClient.php, src/Modules/Settings/AllegroOAuthClient.php, src/Modules/Shipments/AllegroTrackingService.php, .env.example, config/app.php] +autonomous: true +delegation: off +--- + + +## Goal +Dodanie nagłówka User-Agent do wszystkich requestów HTTP wysyłanych do Allegro REST API, zgodnie z wymaganiami art. 3.4.c Regulaminu REST API Allegro. + +## Purpose +Od 1 lipca 2026 Allegro będzie odrzucać requesty bez poprawnego User-Agent. Bez tej zmiany integracja z Allegro przestanie działać. + +## Output +Wszystkie requesty do Allegro API (REST, OAuth, tracking) będą zawierać nagłówek: +`orderPRO/1.0.0 (+https://orderpro.pl/info)` + + + +## Project Context +@.paul/PROJECT.md +@.paul/ROADMAP.md +@.paul/STATE.md + +## Source Files +@src/Modules/Settings/AllegroApiClient.php — główny klient REST API (4 metody z CURLOPT_HTTPHEADER: linie 216, 281, 345, 393) +@src/Modules/Settings/AllegroOAuthClient.php — klient OAuth token exchange (1 metoda: linia 153) +@src/Modules/Shipments/AllegroTrackingService.php — tracking przesyłek (2 metody: linie 136, 186) +@.env.example — konfiguracja aplikacji (APP_NAME=orderPRO) + + + + +## AC-1: User-Agent w requestach REST API +```gherkin +Given AllegroApiClient wysyła request do Allegro API (GET, POST, PUT, POST binary) +When request jest wykonywany przez dowolną metodę (requestJson, postJson, putJson, postBinary) +Then nagłówek User-Agent jest obecny w formacie "orderPRO/1.0.0 (+https://orderpro.pl/info)" +``` + +## AC-2: User-Agent w requestach OAuth +```gherkin +Given AllegroOAuthClient wymienia authorization code lub odświeża token +When request OAuth jest wykonywany przez requestToken() +Then nagłówek User-Agent jest obecny w tym samym formacie +``` + +## AC-3: User-Agent w requestach tracking +```gherkin +Given AllegroTrackingService odpytuje API o status przesyłki +When request jest wykonywany przez edgeApiRequest() lub apiRequest() +Then nagłówek User-Agent jest obecny w tym samym formacie +``` + +## AC-4: Konfigurowalność User-Agent +```gherkin +Given administrator chce zmienić URL dokumentacji lub wersję w User-Agent +When zmieni wartości ALLEGRO_USER_AGENT_URL i APP_VERSION w .env +Then wszystkie requesty używają zaktualizowanych wartości +``` + + + + + + + Task 1: Dodanie stałej User-Agent i konfiguracji + .env.example, config/app.php + + 1. W `.env.example` dodać zmienne: + - `APP_VERSION=1.0.0` + - `ALLEGRO_USER_AGENT_URL=https://orderpro.pl/info` + 2. W `config/app.php` (lub tam gdzie jest odczyt konfiguracji) upewnić się że te zmienne są dostępne. + 3. Analogicznie w `.env` (produkcyjne wartości). + + Format User-Agent: `{APP_NAME}/{APP_VERSION} (+{ALLEGRO_USER_AGENT_URL})` + Przykład: `orderPRO/1.0.0 (+https://orderpro.pl/info)` + + Grep .env.example powinien zawierać APP_VERSION i ALLEGRO_USER_AGENT_URL + AC-4 satisfied: zmienne konfiguracyjne zdefiniowane + + + + Task 2: Dodanie User-Agent do AllegroApiClient + src/Modules/Settings/AllegroApiClient.php + + 1. Dodać prywatną metodę `buildUserAgent(): string` która buduje string User-Agent z ENV: + - `getenv('APP_NAME') ?: 'orderPRO'` + - `getenv('APP_VERSION') ?: '1.0.0'` + - `getenv('ALLEGRO_USER_AGENT_URL') ?: 'https://orderpro.pl/info'` + - Zwraca: `"{name}/{version} (+{url})"` + 2. Dodać `'User-Agent: ' . $this->buildUserAgent()` do CURLOPT_HTTPHEADER w 4 metodach: + - `postJson()` (linia ~216) + - `putJson()` (linia ~281) + - `postBinary()` (linia ~345) + - `requestJson()` (linia ~393) + + Avoid: nie duplikować logiki budowania stringa — jedna metoda, 4 wywołania. + + Grep AllegroApiClient.php za "User-Agent" — powinno być 4 wystąpienia w HTTPHEADER + 1 metoda buildUserAgent + AC-1 satisfied: wszystkie 4 metody REST API wysyłają User-Agent + + + + Task 3: Dodanie User-Agent do AllegroOAuthClient i AllegroTrackingService + src/Modules/Settings/AllegroOAuthClient.php, src/Modules/Shipments/AllegroTrackingService.php + + 1. W `AllegroOAuthClient.php`: + - Dodać analogiczną metodę `buildUserAgent(): string` (lub wydzielić do traita/helpera jeśli nie nadmiarowe) + - Dodać `'User-Agent: ' . $this->buildUserAgent()` do CURLOPT_HTTPHEADER w `requestToken()` (linia ~153) + + 2. W `AllegroTrackingService.php`: + - Dodać analogiczną metodę `buildUserAgent(): string` + - Dodać `'User-Agent: ' . $this->buildUserAgent()` do CURLOPT_HTTPHEADER w: + - `edgeApiRequest()` (linia ~136) + - `apiRequest()` (linia ~186) + + Uwaga: 3 klasy z tą samą 3-linijkową metodą to akceptowalne — nie tworzyć traita dla tak prostej logiki. + + Grep za "User-Agent" w obu plikach — po 1-2 wystąpienia w HTTPHEADER + metoda buildUserAgent + AC-2 i AC-3 satisfied: OAuth i tracking wysyłają User-Agent + + + + + + +## DO NOT CHANGE +- Logika biznesowa requestów (payloady, URL-e, obsługa odpowiedzi) +- Inne nagłówki HTTP (Accept, Content-Type, Authorization) +- Klienty API innych providerów (InPost, Apaczka, shopPRO) + +## SCOPE LIMITS +- Nie refaktoryzować klientów HTTP do wspólnej klasy bazowej (to osobna faza 68) +- Nie zmieniać struktury klas — tylko dodanie metody i nagłówka +- URL dokumentacji (orderpro.pl/info) — strona nie musi istnieć na tym etapie, ale URL musi być poprawny + + + + +Before declaring plan complete: +- [ ] Grep "User-Agent" w AllegroApiClient.php zwraca 4+ wyniki +- [ ] Grep "User-Agent" w AllegroOAuthClient.php zwraca 1+ wynik +- [ ] Grep "User-Agent" w AllegroTrackingService.php zwraca 2+ wyniki +- [ ] .env.example zawiera APP_VERSION i ALLEGRO_USER_AGENT_URL +- [ ] Format User-Agent zgodny z wymaganiami Allegro: `NazwaAplikacji/Wersja (+URL)` +- [ ] Brak regresji w istniejących nagłówkach + + + +- Wszystkie 7 miejsc wysyłki requestów do Allegro zawiera nagłówek User-Agent +- Format zgodny z wymaganiami: `orderPRO/1.0.0 (+https://orderpro.pl/info)` +- Konfiguracja URL i wersji przez zmienne środowiskowe +- Brak zmian w logice biznesowej + + + +After completion, create `.paul/phases/88-allegro-user-agent/88-01-SUMMARY.md` + diff --git a/.paul/phases/88-allegro-user-agent/88-01-SUMMARY.md b/.paul/phases/88-allegro-user-agent/88-01-SUMMARY.md new file mode 100644 index 0000000..b8eec07 --- /dev/null +++ b/.paul/phases/88-allegro-user-agent/88-01-SUMMARY.md @@ -0,0 +1,97 @@ +--- +phase: 88-allegro-user-agent +plan: 01 +subsystem: api +tags: [allegro, user-agent, curl, http-headers] + +requires: [] +provides: + - User-Agent header in all Allegro API requests +affects: [] + +tech-stack: + added: [] + patterns: [buildUserAgent() per Allegro HTTP client class] + +key-files: + created: [] + modified: + - src/Modules/Settings/AllegroApiClient.php + - src/Modules/Settings/AllegroOAuthClient.php + - src/Modules/Shipments/AllegroTrackingService.php + +key-decisions: + - "buildUserAgent() duplicated in 3 classes instead of trait — too simple to abstract" + +patterns-established: [] + +duration: ~5min +started: 2026-04-08T00:00:00Z +completed: 2026-04-08T00:05:00Z +--- + +# Phase 88 Plan 01: Allegro User-Agent Summary + +**Dodanie naglowka User-Agent do wszystkich requestow HTTP do Allegro REST API zgodnie z art. 3.4.c Regulaminu (deadline: 30.06.2026)** + +## Performance + +| Metric | Value | +|--------|-------| +| Duration | ~5min | +| Tasks | 3 completed | +| Files modified | 5 | + +## Acceptance Criteria Results + +| Criterion | Status | Notes | +|-----------|--------|-------| +| AC-1: User-Agent w requestach REST API | Pass | 4 metody w AllegroApiClient (postJson, putJson, postBinary, requestJson) | +| AC-2: User-Agent w requestach OAuth | Pass | 1 metoda w AllegroOAuthClient (requestToken) | +| AC-3: User-Agent w requestach tracking | Pass | 2 metody w AllegroTrackingService (edgeApiRequest, apiRequest) | +| AC-4: Konfigurowalnosc User-Agent | Pass | APP_VERSION i ALLEGRO_USER_AGENT_URL w .env/.env.example | + +## Accomplishments + +- Dodano naglowek `User-Agent: orderPRO/1.0.0 (+https://orderpro.pl/info)` do 7 miejsc wysylki requestow do Allegro API +- Konfiguracja wersji i URL przez zmienne srodowiskowe (.env) +- Metoda `buildUserAgent()` w kazdej z 3 klas klienckich + +## Files Created/Modified + +| File | Change | Purpose | +|------|--------|---------| +| `.env.example` | Modified | Dodano APP_VERSION i ALLEGRO_USER_AGENT_URL | +| `.env` | Modified | Dodano APP_VERSION i ALLEGRO_USER_AGENT_URL | +| `src/Modules/Settings/AllegroApiClient.php` | Modified | buildUserAgent() + User-Agent w 4 metodach HTTP | +| `src/Modules/Settings/AllegroOAuthClient.php` | Modified | buildUserAgent() + User-Agent w requestToken() | +| `src/Modules/Shipments/AllegroTrackingService.php` | Modified | buildUserAgent() + User-Agent w 2 metodach HTTP | + +## Decisions Made + +| Decision | Rationale | Impact | +|----------|-----------|--------| +| buildUserAgent() w kazdej klasie osobno | 3-linijkowa metoda, trait byloby overengineering | Brak wspolnego kodu, ale prostota | +| URL domyslny: orderpro.pl/info | Zgodny z wymaganiami Allegro, konfigurowalny przez .env | Strona moze nie istniec jeszcze | + +## Deviations from Plan + +None - plan executed exactly as written. + +## Issues Encountered + +None. + +## Next Phase Readiness + +**Ready:** +- Integracja Allegro w pelni zgodna z wymaganiami User-Agent od 01.07.2026 + +**Concerns:** +- Strona https://orderpro.pl/info powinna byc utworzona przed 30.06.2026 + +**Blockers:** None + +--- +*Phase: 88-allegro-user-agent, Plan: 01* +*Completed: 2026-04-08* diff --git a/.paul/phases/89-allegro-info-page/89-01-PLAN.md b/.paul/phases/89-allegro-info-page/89-01-PLAN.md new file mode 100644 index 0000000..249e250 --- /dev/null +++ b/.paul/phases/89-allegro-info-page/89-01-PLAN.md @@ -0,0 +1,155 @@ +--- +phase: 89-allegro-info-page +plan: 01 +type: execute +wave: 1 +depends_on: ["88-01"] +files_modified: [routes/web.php, src/Modules/Info/InfoController.php, resources/views/info/allegro.php, resources/views/layouts/public.php] +autonomous: false +delegation: off +--- + + +## Goal +Utworzenie publicznej podstrony informacyjnej `/info` wymaganej przez Allegro w nagłówku User-Agent. Strona musi prezentować cel i opis aplikacji orderPRO dla administratorów zewnętrznych. + +## Purpose +Allegro wymaga w User-Agent URL do strony informacyjnej aplikacji. Strona musi istnieć pod adresem skonfigurowanym w ALLEGRO_USER_AGENT_URL (domyślnie https://orderpro.pl/info). + +## Output +Publiczna strona `/info` bez wymagania logowania, z opisem aplikacji orderPRO. + + + +## Project Context +@.paul/PROJECT.md +@.paul/ROADMAP.md +@.paul/STATE.md + +## Prior Work +@.paul/phases/88-allegro-user-agent/88-01-SUMMARY.md — User-Agent header z URL do tej strony + +## Source Files +@routes/web.php — routing (publiczne trasy bez middleware) +@src/Modules/Auth/AuthController.php — wzorzec kontrolera publicznej strony +@resources/views/layouts/auth.php — layout publicznych stron (bez sidebara) + + + + +## AC-1: Strona /info dostepna publicznie +```gherkin +Given uzytkownik niezalogowany +When odwiedza /info w przegladarce +Then widzi strone informacyjna o aplikacji orderPRO (bez przekierowania na login) +``` + +## AC-2: Tresc strony zgodna z wymaganiami Allegro +```gherkin +Given administrator zewnetrzny (np. Allegro) odwiedza strone /info +When czyta zawartosc +Then widzi: nazwe aplikacji, opis celu dzialania, informacje o integracji z Allegro API, dane kontaktowe +``` + +## AC-3: Strona wyglada profesjonalnie +```gherkin +Given uzytkownik odwiedza /info +When strona sie laduje +Then widzi czysty, profesjonalny layout (bez sidebara/nawigacji aplikacji, minimalistyczny design) +``` + + + + + + + Task 1: Kontroler i routing strony /info + src/Modules/Info/InfoController.php, routes/web.php + + 1. Utworzyc `src/Modules/Info/InfoController.php`: + - Klasa `final class InfoController` w namespace `App\Modules\Info` + - Metoda `show(Request $request): Response` + - Renderowanie widoku `info/allegro` z layoutem `layouts/public` + - Przekazac do widoku: APP_NAME, APP_VERSION z getenv() + + 2. W `routes/web.php`: + - Dodac `use App\Modules\Info\InfoController;` + - Utworzyc instancje `$infoController = new InfoController($template);` + - Dodac route BEZ middleware: `$router->get('/info', [$infoController, 'show']);` + - Umiescic blisko innych publicznych tras (login, health) + + Route /info zdefiniowana bez authMiddleware w routes/web.php + AC-1 satisfied: strona /info dostepna bez logowania + + + + Task 2: Layout publiczny i widok strony informacyjnej + resources/views/layouts/public.php, resources/views/info/allegro.php + + 1. Utworzyc `resources/views/layouts/public.php`: + - Minimalistyczny layout HTML5 (bez sidebara, nawigacji, ani elementow aplikacji) + - Meta viewport dla mobile + - Inline style lub link do istniejacego CSS (uzyc minimalnych styli) + - Sekcja `` na tresc + + 2. Utworzyc `resources/views/info/allegro.php`: + - Tresc strony informacyjnej: + - **Nazwa aplikacji:** orderPRO + - **Wersja:** dynamicznie z przekazanej zmiennej + - **Opis:** "orderPRO to aplikacja do zarzadzania zamowieniami z wielu kanalow sprzedazy (Allegro, sklepy internetowe). Umozliwia centralne przetwarzanie zamowien, generowanie etykiet przewozowych i sledzenie przesylek." + - **Integracja z Allegro:** "Aplikacja korzysta z Allegro REST API do importu zamowien, zarzadzania przesylkami oraz synchronizacji statusow." + - **Kontakt:** email kontaktowy (uzyc zmiennej lub hardcode) + - Profesjonalny, minimalistyczny design + - Jezyk strony: polski + - Escape wszystkich zmiennych przez $e() + + Pliki istnieja: resources/views/layouts/public.php i resources/views/info/allegro.php + AC-2 i AC-3 satisfied: tresc informacyjna i profesjonalny wyglad + + + + Publiczna strona /info z opisem aplikacji orderPRO + + 1. Uruchom aplikacje lokalnie + 2. Odwiedz: http://localhost:8000/info (lub odpowiedni URL) + 3. Sprawdz: strona laduje sie BEZ logowania + 4. Sprawdz: widoczna nazwa aplikacji, opis, informacja o Allegro API + 5. Sprawdz: wyglad profesjonalny i czytelny + 6. Sprawdz: na mobile (zmniejsz okno) strona jest responsywna + + Type "approved" to continue, or describe issues to fix + + + + + + +## DO NOT CHANGE +- src/Modules/Auth/* (system autoryzacji) +- resources/views/layouts/app.php (layout aplikacji) +- Istniejace publiczne trasy (login, health, cron) + +## SCOPE LIMITS +- Tylko jedna strona /info — bez podstron +- Nie dodawac nowych zaleznosci CSS/JS +- Nie tworzyc systemu CMS — statyczna tresc w widoku + + + + +Before declaring plan complete: +- [ ] GET /info zwraca 200 bez zalogowania +- [ ] Strona zawiera nazwe, opis i informacje o Allegro API +- [ ] Layout nie zawiera elementow aplikacji (sidebar, nawigacja) +- [ ] Brak regresji w istniejacych trasach + + + +- Strona /info dostepna publicznie pod URL z User-Agent +- Tresc zgodna z wymaganiami Allegro (cel aplikacji, dane kontaktowe) +- Profesjonalny wyglad bez elementow wewnetrznych aplikacji + + + +After completion, create `.paul/phases/89-allegro-info-page/89-01-SUMMARY.md` + diff --git a/.paul/phases/89-allegro-info-page/89-01-SUMMARY.md b/.paul/phases/89-allegro-info-page/89-01-SUMMARY.md new file mode 100644 index 0000000..6ad5489 --- /dev/null +++ b/.paul/phases/89-allegro-info-page/89-01-SUMMARY.md @@ -0,0 +1,113 @@ +--- +phase: 89-allegro-info-page +plan: 01 +subsystem: ui +tags: [allegro, info-page, public-route] + +requires: + - phase: 88-allegro-user-agent + provides: User-Agent header with URL pointing to this page +provides: + - Public /info page for Allegro User-Agent URL +affects: [] + +tech-stack: + added: [] + patterns: [public layout without app chrome] + +key-files: + created: + - src/Modules/Info/InfoController.php + - resources/views/info/allegro.php + - resources/views/layouts/public.php + modified: + - routes/web.php + +key-decisions: + - "Osobny layout public.php zamiast reuse auth.php — brak orbow/loginu w tle" + - "Inline style w layoutcie i widoku — brak potrzeby budowania SCSS dla jednej strony" + +patterns-established: + - "layouts/public.php dla stron publicznych bez elementow aplikacji" + +duration: ~5min +started: 2026-04-08T00:10:00Z +completed: 2026-04-08T00:15:00Z +--- + +# Phase 89 Plan 01: Allegro Info Page Summary + +**Publiczna strona /info z opisem aplikacji orderPRO — wymagana przez Allegro w naglowku User-Agent** + +## Performance + +| Metric | Value | +|--------|-------| +| Duration | ~5min | +| Tasks | 3 completed (2 auto + 1 checkpoint) | +| Files created | 3 | +| Files modified | 1 | + +## Acceptance Criteria Results + +| Criterion | Status | Notes | +|-----------|--------|-------| +| AC-1: Strona /info dostepna publicznie | Pass | Route bez authMiddleware, brak przekierowania na login | +| AC-2: Tresc zgodna z wymaganiami Allegro | Pass | Nazwa, wersja, opis, integracja z Allegro API, kontakt | +| AC-3: Profesjonalny wyglad | Pass | Minimalistyczny layout, responsywny, bez elementow aplikacji | + +## Accomplishments + +- Utworzono publiczna strone /info dostepna bez logowania +- Nowy layout `layouts/public.php` do stron publicznych (bez sidebara/nawigacji) +- Tresc informacyjna: opis wewnetrznej aplikacji Project PRO, zakres integracji z Allegro API, dane kontaktowe + +## Files Created/Modified + +| File | Change | Purpose | +|------|--------|---------| +| `src/Modules/Info/InfoController.php` | Created | Kontroler strony /info | +| `resources/views/layouts/public.php` | Created | Minimalistyczny layout publiczny | +| `resources/views/info/allegro.php` | Created | Widok strony informacyjnej | +| `routes/web.php` | Modified | Route GET /info bez middleware | + +## Decisions Made + +| Decision | Rationale | Impact | +|----------|-----------|--------| +| Osobny layout public.php | Auth layout ma orby i styl loginu — nieodpowiedni dla strony info | Reusable layout dla przyszlych stron publicznych | +| Inline CSS zamiast SCSS | Jedna prosta strona, nie warto budowac SCSS | Brak zaleznosci od build pipeline | + +## Deviations from Plan + +### Auto-fixed Issues + +**1. Bledny namespace Template** +- **Found during:** Checkpoint (human-verify) +- **Issue:** `App\Core\Template\Template` nie istnieje — poprawny to `App\Core\View\Template` +- **Fix:** Zmiana use statement w InfoController +- **Verification:** Strona /info laduje sie poprawnie + +**2. Zmiana tresci na wewnetrzna aplikacje** +- **Found during:** Checkpoint (human-verify) +- **Issue:** Opis sugerowol aplikacje publiczna/SaaS +- **Fix:** Zmieniono na "wewnetrzna aplikacja firmy Project PRO, nieudostepniana publicznie" +- **Verification:** Tresc zgodna z rzeczywistym przeznaczeniem + +## Issues Encountered + +None beyond auto-fixed deviations. + +## Next Phase Readiness + +**Ready:** +- Strona /info dostepna pod URL z User-Agent (https://orderpro.pl/info) +- Pelna zgodnosc z wymaganiami Allegro art. 3.4.c (deadline 30.06.2026) + +**Concerns:** None + +**Blockers:** None + +--- +*Phase: 89-allegro-info-page, Plan: 01* +*Completed: 2026-04-08* diff --git a/.vscode/ftp-kr.sync.cache.json b/.vscode/ftp-kr.sync.cache.json index 6cf7926..88c0942 100644 --- a/.vscode/ftp-kr.sync.cache.json +++ b/.vscode/ftp-kr.sync.cache.json @@ -2164,8 +2164,8 @@ }, "show.php": { "type": "-", - "size": 52009, - "lmtime": 1775559290158, + "size": 53047, + "lmtime": 1775665227986, "modified": false } }, @@ -2360,8 +2360,8 @@ "routes": { "web.php": { "type": "-", - "size": 28970, - "lmtime": 1775589926446, + "size": 29085, + "lmtime": 1775665188561, "modified": false } }, @@ -3238,15 +3238,15 @@ }, "ShipmentController.php": { "type": "-", - "size": 20200, - "lmtime": 1774285889068, - "modified": true + "size": 22456, + "lmtime": 1775665182684, + "modified": false }, "ShipmentPackageRepository.php": { "type": "-", - "size": 8836, - "lmtime": 1774296780272, - "modified": true + "size": 9053, + "lmtime": 1775665162030, + "modified": false }, "ShipmentPresetController.php": { "type": "-", diff --git a/resources/views/info/allegro.php b/resources/views/info/allegro.php new file mode 100644 index 0000000..1f01dbb --- /dev/null +++ b/resources/views/info/allegro.php @@ -0,0 +1,98 @@ + + +
+

v

+
+ +
+

O aplikacji

+

+ to wewnętrzna aplikacja firmy Project PRO do zarządzania + zamówieniami z wielu kanałów sprzedaży. Umożliwia centralne przetwarzanie zamówień, + generowanie etykiet przewozowych, śledzenie przesyłek oraz automatyzację + procesów sprzedażowych. +

+

+ Aplikacja jest przeznaczona wyłącznie do użytku wewnętrznego firmy Project PRO + i nie jest udostępniana publicznie. +

+
+ +
+

Integracja z Allegro REST API

+

Aplikacja korzysta z Allegro REST API w następującym zakresie:

+ +
+ +
+

Operator

+

Project PRO

+

E-mail: kontakt@projectpro.pl

+
+ + diff --git a/resources/views/layouts/public.php b/resources/views/layouts/public.php new file mode 100644 index 0000000..778255a --- /dev/null +++ b/resources/views/layouts/public.php @@ -0,0 +1,34 @@ + + + + + + <?= $e($title ?? 'orderPRO') ?> + + + + + + +
+ +
+ + diff --git a/routes/web.php b/routes/web.php index 3cd5f91..362418d 100644 --- a/routes/web.php +++ b/routes/web.php @@ -72,6 +72,7 @@ use App\Modules\Printing\PrintApiController; use App\Modules\Printing\PrintApiKeyRepository; use App\Modules\Printing\PrintJobRepository; use App\Modules\Settings\PrintSettingsController; +use App\Modules\Info\InfoController; use App\Modules\Users\UsersController; return static function (Application $app): void { @@ -392,6 +393,9 @@ return static function (Application $app): void { } }; + $infoController = new InfoController($template); + $router->get('/info', [$infoController, 'show']); + $router->get('/health', static fn (Request $request): Response => Response::json([ 'status' => 'ok', 'app' => (string) $app->config('app.name', 'orderPRO'), diff --git a/src/Modules/Info/InfoController.php b/src/Modules/Info/InfoController.php new file mode 100644 index 0000000..3c5a535 --- /dev/null +++ b/src/Modules/Info/InfoController.php @@ -0,0 +1,27 @@ +template->render('info/allegro', [ + 'title' => 'orderPRO — Informacje o aplikacji', + 'appName' => (string) (getenv('APP_NAME') ?: 'orderPRO'), + 'appVersion' => (string) (getenv('APP_VERSION') ?: '1.0.0'), + ], 'layouts/public'); + + return Response::html($html); + } +} diff --git a/src/Modules/Settings/AllegroApiClient.php b/src/Modules/Settings/AllegroApiClient.php index b00a6fb..c9718d7 100644 --- a/src/Modules/Settings/AllegroApiClient.php +++ b/src/Modules/Settings/AllegroApiClient.php @@ -187,6 +187,15 @@ final class AllegroApiClient return $opts; } + private function buildUserAgent(): string + { + $name = getenv('APP_NAME') ?: 'orderPRO'; + $version = getenv('APP_VERSION') ?: '1.0.0'; + $url = getenv('ALLEGRO_USER_AGENT_URL') ?: 'https://orderpro.pl/info'; + + return $name . '/' . $version . ' (+' . $url . ')'; + } + private function apiBaseUrl(string $environment): string { return trim(strtolower($environment)) === 'production' @@ -217,6 +226,7 @@ final class AllegroApiClient 'Accept: application/vnd.allegro.public.v1+json', 'Content-Type: application/vnd.allegro.public.v1+json', 'Authorization: Bearer ' . $accessToken, + 'User-Agent: ' . $this->buildUserAgent(), ], ])); @@ -282,6 +292,7 @@ final class AllegroApiClient 'Accept: application/vnd.allegro.public.v1+json', 'Content-Type: application/vnd.allegro.public.v1+json', 'Authorization: Bearer ' . $accessToken, + 'User-Agent: ' . $this->buildUserAgent(), ], ])); @@ -346,6 +357,7 @@ final class AllegroApiClient 'Accept: application/octet-stream', 'Content-Type: application/vnd.allegro.public.v1+json', 'Authorization: Bearer ' . $accessToken, + 'User-Agent: ' . $this->buildUserAgent(), ], ])); @@ -393,6 +405,7 @@ final class AllegroApiClient CURLOPT_HTTPHEADER => [ 'Accept: application/vnd.allegro.public.v1+json', 'Authorization: Bearer ' . $accessToken, + 'User-Agent: ' . $this->buildUserAgent(), ], ])); diff --git a/src/Modules/Settings/AllegroOAuthClient.php b/src/Modules/Settings/AllegroOAuthClient.php index 03b58a9..3c0a22e 100644 --- a/src/Modules/Settings/AllegroOAuthClient.php +++ b/src/Modules/Settings/AllegroOAuthClient.php @@ -128,6 +128,15 @@ final class AllegroOAuthClient return trim(strtolower($environment)) === 'production' ? 'production' : 'sandbox'; } + private function buildUserAgent(): string + { + $name = getenv('APP_NAME') ?: 'orderPRO'; + $version = getenv('APP_VERSION') ?: '1.0.0'; + $url = getenv('ALLEGRO_USER_AGENT_URL') ?: 'https://orderpro.pl/info'; + + return $name . '/' . $version . ' (+' . $url . ')'; + } + /** * @param array $formData * @return array @@ -154,6 +163,7 @@ final class AllegroOAuthClient 'Accept: application/json', 'Content-Type: application/x-www-form-urlencoded', 'Authorization: Basic ' . base64_encode($clientId . ':' . $clientSecret), + 'User-Agent: ' . $this->buildUserAgent(), ], CURLOPT_POSTFIELDS => http_build_query($formData), ]; diff --git a/src/Modules/Settings/AllegroOrderImportService.php b/src/Modules/Settings/AllegroOrderImportService.php index df72d4f..870ec3a 100644 --- a/src/Modules/Settings/AllegroOrderImportService.php +++ b/src/Modules/Settings/AllegroOrderImportService.php @@ -101,6 +101,7 @@ final class AllegroOrderImportService 'source' => IntegrationSources::ALLEGRO, 'created' => $wasCreated, 'integration_id' => (int) ($mapped['order']['integration_id'] ?? 0), + 'new_payment_status' => (string) ($mapped['order']['payment_status'] ?? ''), ]); } } diff --git a/src/Modules/Settings/ShopproOrdersSyncService.php b/src/Modules/Settings/ShopproOrdersSyncService.php index 3041909..684ea63 100644 --- a/src/Modules/Settings/ShopproOrdersSyncService.php +++ b/src/Modules/Settings/ShopproOrdersSyncService.php @@ -275,6 +275,7 @@ final class ShopproOrdersSyncService 'source' => 'shoppro', 'created' => $wasCreated, 'integration_id' => $integrationId, + 'new_payment_status' => (string) ($aggregate['order']['payment_status'] ?? ''), ]); } } catch (Throwable $exception) { diff --git a/src/Modules/Shipments/AllegroTrackingService.php b/src/Modules/Shipments/AllegroTrackingService.php index d626a21..061230f 100644 --- a/src/Modules/Shipments/AllegroTrackingService.php +++ b/src/Modules/Shipments/AllegroTrackingService.php @@ -136,6 +136,7 @@ final class AllegroTrackingService implements ShipmentTrackingInterface CURLOPT_HTTPHEADER => [ 'Accept: application/vnd.allegro.internal.v1+json', 'Content-Type: application/vnd.allegro.internal.v1+json', + 'User-Agent: ' . $this->buildUserAgent(), ], ]; @@ -186,6 +187,7 @@ final class AllegroTrackingService implements ShipmentTrackingInterface CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $token, 'Accept: application/json', + 'User-Agent: ' . $this->buildUserAgent(), ], ]; @@ -207,4 +209,12 @@ final class AllegroTrackingService implements ShipmentTrackingInterface return is_array($json) ? $json : []; } + private function buildUserAgent(): string + { + $name = getenv('APP_NAME') ?: 'orderPRO'; + $version = getenv('APP_VERSION') ?: '1.0.0'; + $url = getenv('ALLEGRO_USER_AGENT_URL') ?: 'https://orderpro.pl/info'; + + return $name . '/' . $version . ' (+' . $url . ')'; + } }