Hibakezelés, hibakódok
Ha egy Számla Agent kérés nem sikerül, az ok szinte mindig a kérés adataiban vagy a fiók beállításaiban van. Ugyanazt a kérést újra elküldeni ilyenkor nem segít, sőt, a Számlázz.hu ki is tilthatja a fiókot. Ezért a kassza minden hibát egyetlen típusba, a SzamlazzError-ba gyűjt, és megmondja, milyen kategóriába esik, és mit érdemes tenni.
A SzamlazzError#
Minden kassza metódus SzamlazzError-t dob. A isSzamlazzError() típusőrrel biztonságosan szűkítheted a catch ágban kapott értéket:
| Mező | Típus | Leírás |
|---|---|---|
message | string | Magyar hibaüzenet. A Számlázz.hu kódját [57] alakban az elejére teszi. |
code | number | undefined | A Számlázz.hu hibakódja. Kliensoldali hibánál nincs. |
category | SzamlazzErrorCategory | A hiba kategóriája, lásd lent. |
retryable | boolean | true karbantartásnál, hálózati hibánál és időtúllépésnél. |
hint | string | undefined | Magyar javítási tipp, ha ismert. |
action | AgentAction | undefined | A művelet, például createInvoice. |
httpStatus | number | undefined | A válasz HTTP státusza. |
rawResponse | string | undefined | A nyers válasz első 2000 karaktere. PDF-nél nincs. |
isDuplicate, isNotFound | boolean | Rövidítés a duplicate és a not_found kategóriára. |
Amit a kassza újrapróbál#
A kassza csak ott próbálkozik újra, ahol ez nem okozhat dupla bizonylatot: lekérdezéseknél, a befizetések felülírásánál, és a callId-val védett nyugtáknál. Csak a retryable hibáknál teszi ezt (maintenance, network, timeout), alapból háromszor, 1, majd 2 másodperc várakozással. A számlakészítést soha nem küldi újra.
| kassza metódus | Agent form mező | Automatikus újrapróbálás |
|---|---|---|
invoices.create(), invoices.preview() | action-xmlagentxmlfile | soha |
invoices.reverse() | action-szamla_agent_st | soha |
invoices.registerPayment(), invoices.clearPayments() | action-szamla_agent_kifiz | csak felülíró (additive: false) hívásnál |
invoices.getPdf(), verifyCredentials() | action-szamla_agent_pdf | igen |
invoices.get(), invoices.find() | action-szamla_agent_xml | igen |
invoices.deleteProforma() | action-szamla_agent_dijbekero_torlese | soha |
receipts.create() | action-szamla_agent_nyugta_create | csak callId megadásával |
receipts.reverse() | action-szamla_agent_nyugta_storno | csak callId megadásával |
receipts.get(), receipts.find() | action-szamla_agent_nyugta_get | igen |
receipts.send() | action-szamla_agent_nyugta_send | soha |
taxpayer.query() | action-szamla_agent_taxpayer | igen |
A próbálkozások számát a maxAttempts, a várakozást a retryDelayMs opcióval állíthatod. A maxAttempts értéke 5 fölé nem mehet, mert a Számlázz.hu ennyit enged egy kérésre.
Bizonytalan kimenet: számla készült vagy nem?#
Hálózati hiba vagy időtúllépés után nem tudhatod, hogy a Számlázz.hu megkapta-e a kérést. Az 56-os hibánál (partial_success) a számla biztosan elkészült, csak az értesítő e-mail nem ment ki. A 71-es és 152-es hibánál (duplicate) a rendelésszámmal már készült számla.
Mindegyik esetben ugyanaz a helyes lépés: kérdezd le a számlát a rendelésszám alapján, mielőtt újra kiállítanád. Ehhez minden számlánál adj meg orderNumber-t.
Idempotens számlázás hiba után
Részleges siker (56) után a find megtalálja a számlát, dupla számla nem készül.
Hol jelez hibát a Számlázz.hu?#
A Számla Agent műveletenként és válaszverziónként máshogy jelez hibát. A kassza mindet ugyanúgy kezeli:
- Fejlécben: a
szlahu_errorés aszlahu_error_codefejléc URL-kódolt üzenetet és kódot tartalmaz. - Szöveges válaszban: a törzs
[ERR]jelöléssel kezdődik, utána jön az üzenet és egy Java stack trace. A kassza csak az üzenetet és a kódot tartja meg. - XML-ben: a
<sikeres>false</sikeres>mellett<hibakod>és<hibauzenet>elem van. - HTTP státusszal: az 5xx válaszból
network, minden más ismeretlen formátumbólunexpected_responsekategóriájú hiba lesz.
Kliensoldali validáció#
Sok hibát a kassza már a kérés előtt észrevesz: hiányzó egységár, ismeretlen áfakulcs, kisbetűs nyugta előtag, túl sok vagy túl nagy melléklet. Ilyenkor validation kategóriájú hibát kapsz code nélkül, és kérés sem megy a Számlázz.hu-hoz.
Validációs hibák
Kliensoldali és szerveroldali hibák kategóriával, kóddal és javítási tippel.
Tesztfiók#
Fejlesztéshez használj Számlázz.hu tesztfiókot. A tesztfiókban 10 percenként legfeljebb 500 számla készíthető, ezért automata tesztekhez inkább a mock klienst használd, az nem hív hálózatot.
Hibakategóriák#
| error.category | Jelentés | Érdemes újrapróbálni? |
|---|---|---|
validation | Hibás adat: a kassza a kérés előtt utasította el, vagy a Számlázz.hu nem fogadta el. | Nem. Javítsd a bemenetet. |
duplicate | A rendelésszám vagy a hívásazonosító már foglalt, a bizonylat valószínűleg létezik. | Nem. Kérdezd le a meglévőt. |
partial_success | A bizonylat elkészült, csak egy mellékhatás (az e-mail) hiúsult meg. | Soha. Ne állítsd ki újra. |
not_found | Nincs ilyen bizonylat. | Nem. |
auth | Hibás Agent kulcs, vagy böngészős bejelentkezés zavarja az Agentet. | Nem. Javítsd a hitelesítést. |
account | Előfizetés, e-számla vagy fiókbeállítás miatti hiba, embernek kell beavatkoznia. | Nem. |
maintenance | A Számlázz.hu karbantart (1-es kód). | Lekérdezésnél a kassza magától újrapróbál. |
network | Hálózati hiba vagy 5xx válasz. Írásnál a kimenet bizonytalan. | Lekérdezésnél igen. Írásnál előbb keress rendelésszámra. |
timeout | Nem jött válasz az időkorláton belül. Írásnál a kimenet bizonytalan. | Mint a network. |
configuration | Hiányzó vagy hibás kliensbeállítás, például nincs Agent kulcs. | Nem. Javítsd a konfigurációt. |
unexpected_response | A Számlázz.hu ismeretlen formátumban válaszolt. | Nem. Jelentsd a hibát. |
unknown | Kód nélküli vagy ismeretlen kódú hiba a Számlázz.hu-tól. | Nem. |
Hibakódok#
Az alábbi táblázat a kassza által ismert Számlázz.hu hibakódokat mutatja. Az ismeretlen kódú hiba unknown kategóriát kap, de a Számlázz.hu eredeti üzenete ilyenkor is megmarad a message mezőben.
| Kód | Kategória | Jelentés | Mit tegyél? |
|---|---|---|---|
| 1 | maintenance | Rendszerkarbantartás, kérem próbálja meg pár perc múlva. | A Számlázz.hu oldalán van karbantartás, néhány perc múlva próbáld újra. |
| 3 | auth | Sikertelen bejelentkezés. | Ellenőrizd az Agent kulcsot. Csak kisbetűs kulcsot fogad el a rendszer. |
| 7 | not_found | Hiányzó adat: ismeretlen számlaszám, rendelésszám vagy külső azonosító. | – |
| 49 | account | A tanúsítvány használatához jelszó szükséges. | Az e-számla tanúsítványához tartozó jelszót a Számlázz.hu felületén kell beállítani. |
| 52 | validation | Az áfakulcs nem értelmezhető. | Használd a VatRate típusban felsorolt áfakulcsok egyikét. |
| 53 | validation | Hiányzó XML fájl. | Az XML-t fájlként kell elküldeni multipart/form-data kérésben. |
| 54 | account | E-számla készítés nincs engedélyezve. | Az előfizetési csomag nem tartalmazza az e-számlát, vagy nincs tanúsítvány. Próbáld eInvoice: false beállítással. |
| 55 | account | E-számla aláírása sikertelen. | A tanúsítvány lejárt, vagy az időbélyeg szerver nem érhető el. |
| 56 | partial_success | A bizonylat elkészült, de az értesítő e-mail kiküldése sikertelen. | NE állítsd ki újra a bizonylatot. Kérdezd le rendelésszám vagy külső azonosító alapján, és küldd ki az e-mailt később. |
| 57 | validation | XML beolvasási hiba. | A küldött XML nem felel meg az XSD-nek. A részleteket a hibaüzenet tartalmazza. |
| 71 | duplicate | Már létező rendelésszám. | A fiókban be van kapcsolva a rendelésszám ismétlődés tiltása. Ez a bizonylat valószínűleg már elkészült. |
| 135 | auth | Számla Agent futtatásához lépj ki a Számlázz.hu rendszerből a böngészőben. | – |
| 136 | account | Bejelentkezési hiba, lépj be a Számlázz.hu rendszerébe böngészőn keresztül. | Lejárt előfizetés vagy rendezetlen díj. Ellenőrizd a Szolgáltatáscsomagom menüpontot. |
| 152 | duplicate | Már létező rendelésszám. | A fiókban be van kapcsolva a rendelésszám ismétlődés tiltása. Ez a bizonylat valószínűleg már elkészült. |
| 164 | auth | A funkciót csak egyetlen fiókhoz hozzáférő felhasználó használhatja. | Használj Agent kulcsot felhasználónév és jelszó helyett. |
| 202 | validation | A megadott számlaszám előtag nem megfelelő. | Csak a Beállítások / Előtagok menüpontban rögzített előtag használható. |
| 250 | account | A meghatalmazás nincs elfogadva. | A könyvelői vagy aggregátor meghatalmazást a Számlázz.hu felületén kell elfogadni. |
| 259 | validation | A tétel nettó értéke nem megfelelő. | Használd a tételeknél a netUnitPrice vagy grossUnitPrice mezőt, és hagyd, hogy a csomag számolja ki az összegeket. |
| 260 | validation | A tétel áfa értéke nem megfelelő. | Használd a tételeknél a netUnitPrice vagy grossUnitPrice mezőt, és hagyd, hogy a csomag számolja ki az összegeket. |
| 261 | validation | A tétel bruttó értéke nem megfelelő. | Használd a tételeknél a netUnitPrice vagy grossUnitPrice mezőt, és hagyd, hogy a csomag számolja ki az összegeket. |
| 262 | validation | A tétel nettó értéke nem megfelelő. | Használd a tételeknél a netUnitPrice vagy grossUnitPrice mezőt, és hagyd, hogy a csomag számolja ki az összegeket. |
| 263 | validation | A tétel áfa értéke nem megfelelő. | Használd a tételeknél a netUnitPrice vagy grossUnitPrice mezőt, és hagyd, hogy a csomag számolja ki az összegeket. |
| 264 | validation | A tétel bruttó értéke nem megfelelő. | Használd a tételeknél a netUnitPrice vagy grossUnitPrice mezőt, és hagyd, hogy a csomag számolja ki az összegeket. |
| 335 | not_found | A hivatkozott díjbekérő nem található. | – |
| 336 | validation | A nyugta előtag már számlákhoz használatban van. | Nyugtához olyan előtag kell, amit számlán még nem használtál. |
| 337 | validation | A nyugta előtag formátuma hibás. | Az előtag csak nagybetűt és számot tartalmazhat. |
| 338 | duplicate | A hívásazonosító már létezik. | Ezzel a callId-val már készült nyugta, kérdezd le a meglévőt. |
| 339 | not_found | A nyugtaszám nem létezik. | – |
| 340 | validation | A kifizetett összeg eltér a bruttó végösszegtől. | – |
| 352 | validation | A számla kelte csak a mai nap lehet. | A dátumot magyar idő (Europe/Budapest) szerint kell megadni, nem UTC szerint. |
| 363 | validation | A tétel bruttó értékének egész számnak kell lennie. | Forintos nyugtán a bruttó egész szám, a nettó és az áfa legfeljebb 2 tizedes, és a nettó + áfa pontosan a bruttó. |
| 364 | validation | A tétel nettó értéke maximum 2 tizedes jegyet tartalmazhat. | Forintos nyugtán a bruttó egész szám, a nettó és az áfa legfeljebb 2 tizedes, és a nettó + áfa pontosan a bruttó. |
| 365 | validation | A tétel áfa értéke maximum 2 tizedes jegyet tartalmazhat. | Forintos nyugtán a bruttó egész szám, a nettó és az áfa legfeljebb 2 tizedes, és a nettó + áfa pontosan a bruttó. |
| 395 | validation | Érvénytelen áfakulcs. | Használd a VatRate típusban felsorolt áfakulcsok egyikét. |
| 396 | validation | A megadott dátum túl korai. | A kelte és a teljesítés dátuma nem lehet a lezárt időszakban. |
| 537 | validation | Egy tételhez legfeljebb 400 adattörlő kód adható. | – |
| 538 | account | Adattörlő kód demo- és tesztfiókban nem használható. | – |
| 539 | account | Nincs bekapcsolva az adattörlő kód használata. | A számlázási beállításokban kapcsold be az adattörlő kódot. |
| 551 | validation | Egyszerűsített számlakép OSS vagy nem magyar adószám mellett nem használható. | Az egyszerűsített számlakép (simpleItems) szabályait lásd a docs utazásszervezőknek szóló oldalán. |
| 552 | validation | Egyszerűsített számlaképen legfeljebb két tétel adható meg. | Az egyszerűsített számlakép (simpleItems) szabályait lásd a docs utazásszervezőknek szóló oldalán. |
| 553 | validation | Egyszerűsített számlakép esetén érvénytelen adókulcs. | Az egyszerűsített számlakép (simpleItems) szabályait lásd a docs utazásszervezőknek szóló oldalán. |
| 554 | validation | Egyszerűsített számlaképű számla nem helyesbíthető. | Az egyszerűsített számlakép (simpleItems) szabályait lásd a docs utazásszervezőknek szóló oldalán. |
| 555 | validation | Egyszerűsített számlaképen a tételek áfakulcsai nem különbözhetnek. | Az egyszerűsített számlakép (simpleItems) szabályait lásd a docs utazásszervezőknek szóló oldalán. |
| 556 | validation | Egyszerűsített számlakép szállítólevélen és helyesbítő számlán nem használható. | Az egyszerűsített számlakép (simpleItems) szabályait lásd a docs utazásszervezőknek szóló oldalán. |