Download the PHP package labapawel/ksef-api without Composer
On this page you can find all versions of the php package labapawel/ksef-api. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download labapawel/ksef-api
More information about labapawel/ksef-api
Files in labapawel/ksef-api
Package ksef-api
Short Description Komponent Laravel do integracji z API KSeF — uwierzytelnianie, wysyłanie faktur, pobieranie danych, przechowywanie zaszyfrowanych poświadczeń i dokumentów.
License MIT
Homepage https://github.com/labapawel/ksef-api
Informations about the package ksef-api
KsefApi
Komponent Laravel do integracji z API KSeF.
Repozytorium/paczka: labapawel/ksef-api
Quick Start
Zakres
Aktualny szkielet paczki zawiera:
- provider Laravel z publikacją konfiguracji i migracji
- plik konfiguracyjny paczki:
config/ksef.php - migracje dla tabel:
ksef_environments,ksef_credentials,ksef_invoices - seeder dla domyślnych środowisk KSeF:
KsefEnvironmentSeeder - Modele Eloquent:
KsefEnvironment,CredentialiInvoicez Scopes i metodami pomocniczymi - bazowe klasy placeholder: kontrakty/klienty/repozytoria/DTO
- serwisy wysokiego poziomu:
AuthenticationService
Wymagania
- PHP
^8.2 - Laravel
^10 | ^11 | ^12 - rozszerzenia PHP:
curl,json,openssl
Instalacja
Publikacja konfiguracji
Publikacja migracji i seeders
Paczka rejestruje też migracje przez loadMigrationsFrom, więc publikacja migracji jest opcjonalna.
Załadowanie domyślnych środowisk
Aby załadować 3 domyślne środowiska (test, demo, prod):
Lub po opublikowaniu seeders:
Generowanie klucza szyfrowania
Pakiet używa standardowego mechanizmu Laravel Encryption z kluczem APP_KEY.
⚠️ UWAGA: Klucz APP_KEY służy do szyfrowania poświadczeń. Po zaszyfrowaniu danych zmiana klucza uniemożliwi ich odczyt!
⚠️ Ostrzeżenie: Zmiana klucza APP_KEY po zaszyfrowaniu danych w bazie uniemożliwi ich odczyt! Zawsze twórz backup klucza przed jego zmianą.
Zmienne środowiskowe
Przykładowe wartości .env:
Konfiguracje środowisk (environment + api_url) są przechowywane w tabeli ksef_environments, co pozwala na obsługę wielu środowisk bez potrzeby zmian w .env. Poświadczenia są przechowywane w ksef_credentials z certyfikatem i innymi danymi wrażliwymi (kolumny certificate_encrypted, private_key_encrypted, certificate_password_encrypted).
Opis parametrów
| Parametr | Wymagany | Domyślna wartość | Opis |
|---|---|---|---|
KSEF_CHALLENGE_TOKEN_LIFETIME |
❌ | 10 |
Czas ważności challenge tokena w minutach. Po tym czasie wymagane ponowne logowanie. |
KSEF_API_TIMEOUT |
❌ | 30 |
Timeout dla żądań HTTP do API KSeF w sekundach. |
KSEF_CREDENTIALS_TABLE |
❌ | ksef_credentials |
Nazwa tabeli w bazie danych dla poświadczeń KSeF. |
KSEF_ENVIRONMENTS_TABLE |
❌ | ksef_environments |
Nazwa tabeli w bazie danych dla konfiguracji środowisk KSeF. |
KSEF_INVOICES_TABLE |
❌ | ksef_invoices |
Nazwa tabeli w bazie danych dla faktur. |
Środowiska KSeF
Pakiet przechowuje konfiguracje środowisk w tabeli ksef_environments, co pozwala na obsługę wielu środowisk (test, demo, prod) bez potrzeby konfigurowania wartości w .env.
Domyślne środowiska
Po uruchomieniu migracji i seedera, w bazie będą dostępne trzy środowiska:
Seeder
Aby załadować domyślne środowiska do bazy:
Lub dodaj do DatabaseSeeder:
Ręczne dodanie środowiska
Powiązanie poświadczeń ze środowiskiem
Każde poświadczenie jest powiązane z jednym środowiskiem przez ksef_environment_id:
Autentykacja
Logowanie do KSeF
Paczka automatycznie zarządza challenge tokenami i access tokenami.
Używając AuthenticationService (rekomendowane)
Używając KsefAuthClient (niski poziom)
Challenge Token Lifecycle
Pakiet automatycznie zarządza challenge tokenami:
- Pierwszy request — API zwraca nowy challenge token (ważny przez N minut, domyślnie 10)
- Challenge token przechowywany — zapisany w bazie w
ksef_token_encrypted - Challenge token wygasa — jeśli upłynęło N minut od otrzymania
- Automatyczne odświeżenie — przy następnym logowaniu pobierany jest nowy token
Czas ważności challenge tokena kontroluje parametr .env:
Poświadczenia w bazie danych
Wszystkie dane są automatycznie szyfrowane i przechowywane w tabeli ksef_credentials:
Model danych
Diagram relacji
ksef_environments
Tabela przechowuje konfiguracje środowisk (test, demo, prod):
environment: Unikatowy identyfikator środowiska (test,demo,prod)api_url: URL endpointa API KSeF dla tego środowiskadescription: Opis środowiska (opcjonalnie)is_active: Status aktywności środowiska
Relacja: Jedno środowisko może mieć wiele poświadczeń (1:N)
ksef_credentials
Tabela przechowuje zaszyfrowane dane wrażliwe KSeF dla pary ksef_environment_id + nip:
- identyfikatory:
ksef_environment_id(foreign key doksef_environments),nip - legacy pola:
environment,api_url(dla backward compatibility) - zaszyfrowane: token KSeF (challenge), access token, refresh token
- zaszyfrowane: certyfikat, klucz prywatny, hasło do certyfikatu
- lifecycle:
challenge_token_received_at,challenge_token_expires_at,token_expires_at - uprawnienia:
scopes,permissions(json) - metadane: dodatkowe
meta(json)
ksef_invoices
Tabela przechowuje metadane biznesowe faktury oraz zaszyfrowany XML:
- jawne/wyszukiwalne: kierunek, numer i data faktury, NIP/nazwa sprzedawcy i nabywcy
- pola integracyjne: numer KSeF, numer referencyjny, status
- zaszyfrowany payload: pełny XML (
xml_encrypted)
Modele Eloquent
Paczka udostępnia modele Eloquent z potężnymi scopes i metodami pomocniczymi.
Model KsefEnvironment
Przechowuje konfiguracje środowisk KSeF.
Model Credential
Przechowuje poświadczenia KSeF dla pary environment + nip.
Model Invoice
Przechowuje metadane faktury oraz zaszyfrowany XML.
Planowane API (szkielet gotowy)
Labapawel\\KsefApi\\Clients\\KsefAuthClientLabapawel\\KsefApi\\Clients\\KsefInvoiceClientLabapawel\\KsefApi\\Repositories\\CredentialRepositoryLabapawel\\KsefApi\\Repositories\\InvoiceRepositoryLabapawel\\KsefApi\\Support\\EncryptionServiceLabapawel\\KsefApi\\Support\\XmlInvoiceParser
Szyfrowanie
Modele Credential i Invoice automatycznie szyfrują wrażliwe dane za pomocą Laravel Encryption (AES-256-CBC) używając klucza APP_KEY z głównej konfiguracji aplikacji.
Klucz szyfrowania: APP_KEY z pliku .env Twojej aplikacji Laravel
Algorytm: AES-256-CBC z HMAC SHA-256 (Laravel Encryption)
Model Credential szyfruje:
ksef_token_encrypted— Token wyzwania KSeFaccess_token_encrypted— JWT token dostępurefresh_token_encrypted— JWT token odświeżającycertificate_encrypted— Certyfikat X.509private_key_encrypted— Klucz prywatny RSAcertificate_password_encrypted— Hasło do certyfikatu
Model Invoice szyfruje:
xml_encrypted— Pełna zawartość faktury w formacie XMLsignature_encrypted— Podpis XAdES faktury
Szyfrowanie/deszyfrowanie odbywa się automatycznie podczas odczytu i zapisu:
⚠️ Wymagania:
- Aplikacja Laravel musi mieć wygenerowany
APP_KEY(automatycznie przezphp artisan key:generate) - Nie zmieniaj
APP_KEYpo zapisaniu zaszyfrowanych danych (dane staną się niedostępne) - Backup klucza
APP_KEYw bezpiecznym miejscu (poza repozytorium)
Uwagi bezpieczeństwa
Klucz szyfrowania (APP_KEY)
- Generowanie: Użyj
php artisan key:generatedo wygenerowania silnego klucza - Przechowywanie: Nigdy nie commituj
APP_KEYdo repozytorium git - Backup: Przechowuj kopię zapasową klucza w bezpiecznym magazynie (Vault, AWS Secrets Manager, itp.)
- Różne środowiska: Używaj osobnych kluczy dla test/demo/prod
- Rotacja: Zmiana
APP_KEYwymaga ponownego zaszyfrowania wszystkich danych w bazie
Certyfikaty i klucze prywatne
- Przechowuj zaszyfrowane w bazie danych (automatyczne przez pakiet)
- Klucze prywatne nigdy nie opuszczają serwera
- Używaj silnych haseł do certyfikatów (min. 16 znaków)
- Osobne certyfikaty dla każdego środowiska KSeF
Separacja środowisk
- TEST, DEMO, PROD - całkowicie oddzielne bazy danych
- Różne certyfikaty dla każdego środowiska
- Nigdy nie mieszaj tokenów między środowiskami
- Różne klucze
APP_KEYdla każdego środowiska
Dostęp do bazy danych
- Ogranicz dostęp do tabel
ksef_credentialsiksef_invoices - Monitoruj logi dostępu do zaszyfrowanych danych
- Regularnie audytuj uprawnienia użytkowników bazy danych
Backup i recovery
- Backupuj dane w postaci zaszyfrowanej
- Zachowaj bezpieczne kopie klucza
APP_KEY(offline, w sejfie/vault) - Testuj procedury odzyskiwania danych
- Dokumentuj proces rotacji kluczy
Typowe użycie
Przechowywanie poświadczeń
Rejestrowanie faktury
Wyszukiwanie faktur
Development
Po sklonowaniu uruchom:
Testowanie
Paczka zawiera kompleksowy zestaw testów dla modeli Eloquent.
Instalacja zależności testowych
Uruchamianie testów
Struktura testów
tests/TestCase.php— Bazowa klasa testowa z konfiguracją środowiska testowegotests/Unit/Models/CredentialTest.php— 17 testów dla modelu Credentialtests/Unit/Models/InvoiceTest.php— 25 testów dla modelu Invoicetests/Unit/Models/PackageInstallationTest.php— Testy instalacji paczkitests/Fixtures/DataFactory.php— Fabryka testowych danych ułatwiająca tworzenie instancji testowych
Używanie DataFactory w testach
Fabryka DataFactory zawiera pomocne metody do tworzenia testowych instancji:
Szyfrowanie i Bezpieczeństwo
Dane zaszyfrowane
Pakiet automatycznie szyfruje wszystkie wrażliwe dane za pomocą Laravel Encryption (AES-256-CBC):
Model Credential:
ksef_token_encrypted— Challenge token z KSeF APIaccess_token_encrypted— JWT access tokenrefresh_token_encrypted— JWT refresh tokencertificate_encrypted— Certyfikat X.509private_key_encrypted— Klucz prywatny RSAcertificate_password_encrypted— Hasło do certyfikatu
Model Invoice:
xml_encrypted— Pełny XML fakturysignature_encrypted— Podpis XAdES
Klucz szyfrowania
- Algorytm: AES-256-CBC
- Klucz:
APP_KEYz konfiguracji Laravel - Inicjalizacja:
php artisan key:generate
Bezpieczeństwo producyjnego
⚠️ Krytyczne:
- Nigdy nie commituj
APP_KEYdo repozytorium — używaj.env - Zawsze konfiguruj
APP_KEYw.env.production - Backup klucza przed rotacją — zmiana klucza uczyni dane niezrozumiałymi
- HTTPS — komunikacja z API KSeF zawsze po HTTPS
- Certifikaty — przechowuj certyfikaty KSeF bezpiecznie poza repozytorium
- Database credentials — chroni dostęp do bazy z poświadczeniami
Przykładowe bezpieczne środowisko
Architektura
Warstwa aplikacji
Przepływ autentykacji
Troubleshooting
Problem: "Brak poświadczeń w bazie dla NIP XXX"
Przyczyna: Poświadczenia nie zostały zapisane w bazie danych.
Rozwiązanie:
Problem: "Zmiana klucza APP_KEY uczyni dane niezrozumiałymi"
Przyczyna: Zmieniłeś APP_KEY v1 na v2 — istniejące dane były szyfrowane kluczem v1.
Rozwiązanie:
Problem: "cURL error 60: SSL certificate problem"
Przyczyna: Weryfikacja SSL w KsefAuthClient jest wyłączona ('verify' => false).
Rozwiązanie (production):
Problem: "UNIQUE constraint failed: ksef_credentials.ksef_environment_id, nip"
Przyczyna: Próbujesz stworzyć drugi rekord dla tej samej pary (środowisko + nip).
Rozwiązanie:
FAQ
P: Czy mogę używać różne certyfikaty dla tego samego NIP w różnych środowiskach?
O: Tak! Jeśli masz:
- Certyfikat A → demo (nip + demo + cert_A)
- Certyfikat B → prod (nip + prod + cert_B)
System automatycznie wybierze poprawny rekord na podstawie środowiska.
P: Czy access_token jest automatycznie odświeżany?
O: Nie w obecnej wersji. Musisz ręcznie wywoływać $auth->login() gdy token wygaśnie. Jeśli challenge token jest jeszcze ważny, logowanie jest szybkie.
P: Co zrobić ze starymi poświadczeniami (legacy environment/api_url)?
O: Pola environment i api_url w ksef_credentials są opcjonalne dla backward compatibility. Nowe projekty powinny używać relacji:
P: Czy mogę migrować istniejące kredencje z kolumn na foreign key?
O: Tak, wykonaj artisan command (jeśli istnieje) lub ręcznie:
P: Jaka jest maksymalna wielkość faktury (XML)?
O: Praktycznie bez limitu — kolumna xml_encrypted to longText (4GB w MySQL). Realistycznie: faktury XML są zwykle < 1MB.
P: Czy mogę wyłączyć automatyczne szyfrowanie pól?
O: Nie z modelu Eloquent — szyfrowanie jest wbudowane. Jeśli chcesz przechowywać dane niezaszyfrowane, musisz zmienić migracje i usunąć $encrypted z modeli.
P: Czy paczka obsługuje offline mode (offline KSeF)?
O: Nie w obecnej wersji. Offline mode wymaga lokalnego certyfikatu i jest obsługiwany przez dedykowany KSeF offline API.
Licencja
MIT License — patrz plik LICENSE
Wkład (Contributing)
Zapraszamy do współtworzenia! Zgłaszaj issues i pull requests na: https://github.com/labapawel/ksef-api
Kontakt i Wsparcie
- Issues: https://github.com/labapawel/ksef-api/issues
- Email: [email protected]
- GitHub: https://github.com/labapawel
Ostatnia aktualizacja: 2026-03-04
Wersja: 1.0.0
Status: Stable Release
$invoice = DataFactory::createA
All versions of ksef-api with dependencies
ext-curl Version *
ext-json Version *
ext-openssl Version *
illuminate/support Version ^10.0|^11.0|^12.0