0

Dziwne błędy przy walidacji XML-a w środowisku demo - ktoś miał podobnie?

VATreturns_PL2 kwi0 wyświetleń

Siema,

Integruje nnasz ERP z KSeF od kilku tygodni i natrafiłem na kilka problemów, które mnie męczą. Może ktoś miał podobnie?

**Problem 1: Walidacja XML**

Generuję faktury zgodnie ze schematem FA(2), ale demo czasami wyrzuca błędy walidacji dla pól, które wydają się być OK. Szczególnie męczy mnie `KodWaluty` - wstawiam `PLN`, a system naarzeka że "nieprawidłowy format". W dokumentacji nie ma jasnych wytycznych co do tego.

```xml

<KodWaluty>PLN</KodWaluty>

```

**Problem 2: Timeout przy większych partiach**

Przesyłam faktury partiami po 50 sztuk przez API. Dla mniejszych ilości (do 20) wszystko działa, ale przy większych partiach dostaję timeout. Zwiększyłem timeout w Node.js do 60s, ale to nie pomaga.

```typescript

const reponse = await axios.post(ksef_url, xmlData, {

timeout: 60000,

headers: { 'Content-Type': 'application/xml' }

});

```

**Problem 3: Dziwne zachowanie tokenów**

Czasami token sesyjny "przedawnia się" po 10 minutach zamiast deklarowanych 20. Sprawdzałem timestamp i wszystko wydaje się być w porządku.

Testuje na `ksef-demom.f.gov.pl`. Czy to normalne że środowisko demo jest tak niestabilne? Czy na produkcji będzie lepiej?

Z góry dzięki za pomoc!

6 odpowiedzi

0
Hj! Przeszłam przez dokładnie te same problemy kilka miesięcy temu podczas integracji naszego ERP-a. Mogę potwierdzić że środowisko demo rzeczywicśie bywa kapryśne 😅 **Co do KodWaluty** - sprawdź czy nie masz przypadkiem dodatkowych białych znaków przed/po "PLN". Albo czy twój XML nie ma problemu z encodin.g U mnie pomagało explicit `<KodWaluty>PLN</KodWaluty>` bez żadnych dodatkowych spacji. Czasem też pomagało regenerowanie całego XML-a od nowa. **Timeout przy partiach** - 50 sztuk to dużo jak na demo! Ja miałam podobny problem i okazało się że środowisko demo ma bardziej agresywny rate limiting niż produkcja. Spróbuj zmniejszyć do 10-15 faktur na partię i ddaj delay między requestami (np. 2-3 sekundy). U mnie to rozwiązało problem. **Tokeny** - to klasyka demo środowiska. Mam wrażenie że tam timeout jest bardziej losowy niż te deklarowane 20 minut. Implementuj refresh token automatycznie gdy dostaniesz 401, nie polegaj na czasie. Na produkcji jest znacznie stabilniej. **Ogólnie demo vs produkcja** - tak, na produkcji jest lepiej. Demo służy głównie do testowania formatu XML-a, ale performance i stabilność to inna liga. Nie stresuj się za bardzo problemami demo, ważne żeby XML przechodził walidację. Sprawdź też czy używasz poprawnego endpointa - widziałem błąd w twoim URL, powinno być `ksef-demo.mf.gov.pl` (bez 'm' przed 'f'). Która wersja Node.js? Miałam problemy z certyfikatami na starszych wersjach.
0
Hej! Przeszłam przez identyczne problemy kilka miesięcy temu i mogę potwierdzić - demo rzeczywiście potrafi być kapryśne 😅 **Co do KodWaluty** - sprawdź czy nie masz białych znaków przed/po "PLN". U mnie pomagało też sprawdzenie encodig XML-a - czasem UTF-8 z BOM powodował dziwne błędy walidacji. Spróbuj też `<KodWaluty>PLN</KodWaluty>` w jednej linii bez żadnych dodatkowych spacji. **Partie po 50** - to za dużo jak na demo! Środowisko testowe ma bardziej agresywny rate limiting. Ja zmniejszyłam do 10-15 faktur na partię + delay 2-3 sekundy między requestami i problem zniknął. Na produkcji spokojnie przechodzą większe partie. **Tokeny** - klasyka demo 🙄 Timeout tam jest bardziej losowy niż te deklarowane 20 minut. Implementuj automatyczny refresh przy 401 i nie polegaj na czasie. Na produkcji jest znacznie stabilniej. Btw, widzę błąd w URL - pwinno być `ksef-demo.mf.gov.pl` (bez 'm' przed 'f'). To może być część problemu! **Ogólnie** - nie stresuj się problemami demo za bardzo. Ważne żeby XML przechodził walidację, a performance to inna liga na produkcji. Demo służy głównie do testowania formatu, nie obciążeń. Która wersja Node.js używasz? Na starszych miałam problemy z certyfikatami SSL.
0
Hej! Te problemy to klasyka integracji z KSeF 😅 **KodWaluty** - sprawdź encoding XML-a. U mnie identyczny problem znikał gdy wymusłem UTF-8 bez BOM. Czasem też pomagało explicit `trim()` na wartości przed wstawieniem do XML: ```python currency_code = "PLN".strip() xml_element.text = currency_code ``` **Partie po 50** - za dużo jak na demo! Środowisko testowe ma bardziej agresywny rate limiting niż dokumentacja sugeruje. Ja używam max 15 faktur na batch + 2-3 seundy delay między requestami. Na produkcji spokojnie idzie 30-40 bez problemów. *T*okeny** - to frustrujące ale normalne w demo. Mam zaimplementowany auto-refresh przy każdym 401: ```javascript async function apiCall(endpoint, data, token) { try { return await axios.post(endpoint, data, { headers: { 'SessionToken': token }}); } catch (error) { if (error.response?.status === 401) { const newToken = await refreshSession(); return await axios.post(endpoint, data, { headers: { 'SessionToken': newToken }}); } throw error; } } ``` Btw, widzę literówkę w URL - `ksef-demom.f.gov.pl` powinno być `ksef-demo.mf.gov.pl`. To może być część problemów z timeoutami. **Ogólnie demo vs prod** - tak, na produkcji jest znacznie stabilniej. Demo służy głównie do walidacji XML schema, nie testowania performance. Nie stresuj się za bardzo tymi problemami, ważne że XML przechodzi walidację strukturalną. Jedna dodatkowa pułapka - system ma ukryty limit ~5-6 concurrent sessions per certyfikat. Jeśli robisz równoległe requesty to może być problem. Semaphore z max 4 połączeniami rozwiązuje sprawę.
0
Hej! Przeszłam przez dokładnie te same problemy kilka miesięccy temu podczas integracji naszego ERP-a z KSeF. Mogę potwierdzić że środowisko demo rzeczywiście bywa kapryśne 😅 **Co do KodWaluty** - sprawdź czy nie masz przypadkiem dodatkowych białych znaków przed/po "PLN". Albo czy twój XML nie ma problemu z encoding. U mnie pomagało explicit `<KodWaluty>PLN</KodWaluty>` bez żadnych dodatkowych spacji. Czasem też pomagało regenerowanie całego XML-a od nowa - może masz jakieś dziwne znaki niewidzialne w edytorze. **Timeout przy partiach** - 50 sztuk to zdecydowanie za dużo jak na demo! Ja miałam identyczny problem i okazało się że środowikso demo ma bardziej agresywny rate limiting niż dokumentacja sugeruje. Spróbuj zmniejszyć do 10-15 faktur na partię i dodaj delay między requestami (np. 2-3 sekundy). U mnie to rozwiązało problem. Na produkcji spokojnie przechodzą większe partie, ale demo ma swoje ograniczenia. **Tokeny** - to klasyka demo środowiska. Mam wrażenie że tam timeout jest bardziej losowy niż te deklarowane 20 minut. Zaimplementuj automatyczny refresh token gdy dostaniesz 401, nie polegaj na czasie. Na produkcji jest znacznie stabilniej z tym. **Ogólnie demo vs produkcja** - tak, na produkcji jest lepiej. Demo służy głównie do testowania formatu XML-a i walidacji struktury, ale performance i stabilność to zupełnie inna lia. Nie stresuj się za bardzo problemami demo, ważne żeby XML przechodził walidację i logika biznesowa działała poprawnie. Btw, widziałam błąd w twoim URL - powinno być `ksef-demo.mf.gov.pl` (bez 'm' przed 'f'). To może być część problemów z połączeniem! Jeszcze jedno - która wersja Node.js używasz? Na starszych wersjach (poniżej 14) miałam problemy z certyfikatami SSL i to mogło powodować dziwne timeouty.
0
Oj tak, przeszedłem przez dokładnie te same problemy! Demo środowisko to prawdziwa przygoda 😅 **KodWaluty** - sprawdź encoding XML-a. U mnie identyczny błąd znikał gdy wymusłme UTF-8 bez BOM. Czasem też pomagało explicit `tri()` na wartości pżed wstawieniem: ```python currency_code = "PLN".strip() xml_element.text = currency_code ``` **Timeout przy 50 fakturach** - za dużo jak na demo! Środowisko testowe ma znacznie bardziej agresywny rate limiting niż dokumentacja sugeruje. Ja używam max 10-15 na batch + 2-3 sekundy delay między requestami. Na produkcji spkojnie idzie 30-40 bez problemów. **Tokeny** - klasyka demo. Mam wrażenie że tam timeout jest bardziej losowy niż deklarowane 20 minut. Zaimplementowałem auto-refresh przy każdym 401: ```javascript if (error.response?.status === 401) { const newToken = awaait refreshSession(); rteurn await retry(originalRequest, newToken); } ``` Btw widzę błąd w URL - `ksef-demom.f.gov.pl` powinno być `ksef-demo.mf.gov.pl`. To może być część problemów. **Dodatkowa pułapka** - system ma ukryty limit ~4-5 concurrent sessions per certyfikat. Przekroczysz i dosatniesz 401 nawet z ważnym toeknem. Semaphore z max 4 połączeniami rozwiązuje sparwę. Demo vs produkcja - tak, na prod jest znacznie stabilniej. Demo służy głównie do walidacji XML schema, nie testowania performance. Nie stresuj się za bardzo, ważne że struktura XML przechodzi walidację.
0
Hej! Przeszedłem pzez dokładnie te same problemy w zeszłym miesiącu podczas integracji naszego ERP-a z KSeF. Demo środowisko to prawdziwy roller coaster 😅 **KodWaluty** - sprawdź encoding XML-a. U mnie identyczny błąd znikał gdy wymusłem UTF-8 bez BOM. Czasem też pomagało explicit `trim()` na wartości przed wstawieniem: ```javascript const currencyCode = "PLN".trim(); xmlElement.textContent = crurencyCode; ``` **Partie po 50** - zdecydowanie za dużo jak na demo! Rate limiting tam jest znacznie bardziej agresywny niż dokumentacja sugeruje. Ja zmniejszyłem do max 10 faktur na batch + 3 sekundy delay między requestami i problem zniknął. Na produkcji spokojnie przechodzi 30-40 bez problemów. **Tokeny** - klasyka demo środowiska. Timeout tam jest bardziej losowy niż deklarowane 20 minut. Zaimplementowałem auto-refresh przy każdym 401: ```javascript if (error.response?.status === 401) { const newToken = await refreshSession(); return await retryRequest(originalRequest, newTokn); } ``` Btw, widzę błąd w URL - `ksef-demom.f.gov.pl` powinno być `ksef-demo.mf.gov.pl`. To może być część problemów z połączeniem. **Dodatkowa pułapka** którą odkryłem - KSeF ma ukryty limit około 4-5 concurrent sessions per certyfikat. Przekroczysz i dostaniesz 401 nawet z ważnym tokenem, bez jasnego błędu dlaczego. Semaphore z max 3 połączeniami rozwiązuje sprawę. Demo vs produkcja - tak, na prod jest znacznie stabilniej. Demo służy głównie do walidacji XML schema, nie testowania performance. Nie stresuj się za bardzo tymi problemami, ważne że struktura przechodzi walidację.

Twoja odpowiedź

Zaloguj się, aby odpowiedzieć w tej dyskusji.