@extends('layouts.app') @section('title', 'KSeF – Auth & Faktury') @php // dane z uwierzytelniania (kroki 1-3) $result = $result ?? session('ksef_result') ?? null; $error = $error ?? session('ksef_error') ?? null; // dane z wysyłki faktury / UPO (kroki 4-5) $invoiceResult = $invoiceResult ?? session('ksef_invoice_result') ?? null; $invoiceError = $invoiceError ?? session('ksef_invoice_error') ?? null; // lista plików faktur (może być ["FA1.xml","FA2.xml"] albo [["name"=>"FA1.xml"], ...]) $invoiceFiles = $invoiceFiles ?? []; // batch summary (z sendAllInvoices) $batch = (is_array($invoiceResult) && isset($invoiceResult['batch'])) ? $invoiceResult['batch'] : null; // helper do nazwy pliku niezależnie od formatu $fileNameOf = function($file) { if (is_array($file)) return $file['name'] ?? ($file['filename'] ?? ''); return is_string($file) ? basename($file) : ''; }; @endphp @section('content')
1) challenge → 2) unsigned AuthTokenRequest.xml → 3) podpis XAdES + redeem tokenów → 4) wysyłka faktury XML (szyfrowanie AES/RSA, sesja online) → 5) pobranie UPO dla wysłanej faktury.
{{-- Błąd auth --}} @if (!empty($error))
Uruchamia pełny proces dla każdej faktury z storage/faktury_xml:
challenge → unsigned → podpis XAdES → auth+redeem → wysyłka → UPO → zapis → przeniesienie do wyslane/.
{{ $invoiceResult['message'] }}
@endif @if (!empty($batch['ok']))| Plik | Session ref | Invoice ref | Ścieżka UPO | Przeniesiono do |
|---|---|---|---|---|
{{ $ok['file'] ?? '' }} |
{{ $ok['sessionReference'] ?? '' }} |
{{ $ok['invoiceReference'] ?? '' }} |
{{ $ok['upoPath'] ?? '' }} |
{{ $ok['movedTo'] ?? '' }} |
| Plik | Komunikat | Trace (dev) |
|---|---|---|
{{ $err['file'] ?? '' }} |
{{ $err['error'] ?? '' }} |
@if (!empty($err['trace']))
pokaż{{ $err['trace'] }} |
Ten krok:
- pobiera challenge z KSeF,
- buduje AuthTokenRequest XML na podstawie konfiguracji zapisanej w systemie,
- zapisuje plik unsigned XML do storage/app.
{{ $result['challenge'] }}{{ $result['timestamp'] }}
(challenge ważny ~10 min)
{{ $result['xml'] }}
@endif
{{ $result['signedPath'] }}{{ $result['signedXml'] }}
@endif
{{ $result['referenceNumber'] }}{{ $result['authenticationToken'] }}{{ $result['authenticationTokenValidUntil'] }}{{ $result['accessToken'] }}{{ $result['accessTokenValidUntil'] }}{{ $result['refreshToken'] }}{{ $result['refreshTokenValidUntil'] }}{{ json_encode($result['raw'], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) }}
Używamy accessToken z kroku 3. Tworzymy sesję online w KSeF, szyfrujemy fakturę AES-256, klucz AES szyfrujemy RSA/OAEP kluczem MF, wrzucamy fakturę i zamykamy sesję.
{{-- Formularz wyboru faktury --}} {{-- Wynik wysyłki pojedynczej faktury --}} @if (!empty($invoiceResult) && isset($invoiceResult['result'])) @php $r = $invoiceResult['result']; $sessionRefForUpo = $r['sessionReferenceNumber'] ?? null; $invoiceRefForUpo = $r['detailsSend']['json']['invoiceReferenceNumber'] ?? $r['detailsSend']['json']['referenceNumber'] ?? $r['detailsSend']['json']['elementReferenceNumber'] ?? null; @endphp{{ $r['sessionReferenceNumber'] }}{{ $r['statusOpen'] }}{{ $r['statusSend'] }}{{ $r['statusClose'] }}{{ json_encode($r, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) }}
UPO jest dostępne pod
/api/v2/sessions/{referenceNumber}/invoices/{invoiceReferenceNumber}/upo.
{{ $invoiceResult['upoSessionReferenceNumber'] }}{{ $invoiceResult['upoInvoiceReferenceNumber'] }}{{ $invoiceResult['upoXml'] }}