HTTP stavové kódy, chybové odpovede a retry logika PSB API: ako vybudovať robustnú integráciu.
Každá API integrácia skôr či neskôr narazí na chyby. Výpadok siete, nedostupný server, nesprávne formátovaný dokument: to patrí k veci. PSB API komunikuje chyby prostredníctvom štandardných HTTP stavových kódov a štruktúrovaných JSON odpovedí. Navyše PSB má zabudovaný retry mechanizmus, ktorý automaticky rieši dočasné chyby pri doručovaní dokumentov.
V tomto článku sa dozviete, aké stavové kódy PSB vracia, ako interpretovať chybové odpovede, kedy môžete bezpečne zopakovať požiadavku a ako funguje automatický retry mechanizmus PSB.
PSB API používa štandardné HTTP stavové kódy na indikáciu výsledku požiadavky. Stavové kódy sa delia do dvoch kategórií: chyby klienta (4xx), ktoré musíte opraviť sami, a chyby servera (5xx), ktoré môžete zopakovať.
Pri 4xx chybe je problém v samotnej požiadavke. Opätovné odoslanie s rovnakými dátami vyprodukuje rovnaký výsledok. Opravte príčinu pred ďalším pokusom.
VerstuurInvoice): ponúkané PartyId nie je (pre tento typ dokumentu) na Peppol/SMPqueryRecipientParty alebo lookup.peppol.org na ponúkanom ID, potom voliteƾne skontrolujte súvisiace schemas (napríklad BE 0208 oproti 9925/BE:VAT, rovnaké základné číslo) -- zmenu EndpointID odporúčajte len pri potvrdených výsledkoch lookup. Bez výsledku pre žiadneho kandidátského ID: príjemca nie je dosiahnuteƾný na týchto identifikátoroch; klient sa musí správa u príjemcu opytať na registráciu alebo iné dodávateƾské IDqueryRecipientParty. Chybová správa: EConnect.Psb.Models.EConnectException: 'Duplicate id agencies {code} requested.' (kde {code} je kód agentúry bez úvodnéj nuly, napr. schéma 0208 → 208).API403 Access forbidden: doslovná chybová správa [API403] Access forbidden. Please check PartyId authorization and make sure the Subscription-Key is valid sa okrem iného môže objaviť pri neúspešnom odoslaní Peppol z Business Central ("delivery failed"), príčina je však všeobecná pre PSB, nie špecifická pre BC. Poradie diagnostiky:
Poznámka: zmienka o "Subscription-Key" v chybovej správe automaticky neznamená, že kľúč treba obnoviť. Autorizácia PartyId a problém s prepojením na strane platformy sú rovnako častou príčinou. Ak doručenie zlyháva aj po platnej kontrole tokenu a partyId, eskalujte na podporu eConnect, namiesto opakovaného otáčania Subscription-Key.
Validácia SBDH obálky (API400.USRMS1 / API400.USRMS2): tieto chybové kódy indikujú nesúlad medzi Peppol obálkou (SBDH) a samotným dokumentom e-faktúry. Pri USRMS1 odosielateľ alebo príjemca v obálke nezodpovedá identifikátorom v XML faktúry. Pri USRMS2 PSB nemôže nájsť rozpoznateľného odosielateľa v dokumente. Skontrolujte, či EndpointID a PartyIdentification vo vašom UBL zodpovedajú hodnotám poskytnutým pri odosielaní. PSB odmietne dokument na úrovni AS4 a vráti chybu odosielajúcemu Access Pointu.
Výnimka z pravidla „iba 5xx možno retryovať“: 429 Too Many Requests indikuje obmedzovanie počtu požiadaviek a možno ho retryovať. Počkajte a riaďte sa hlavičkou Retry-After, skôr než požiadavku znova odošlete.
Retry-After, potom zopakujte5xx chyba indikuje dočasný problém na strane servera. Samotná požiadavka môže byť správna. Spolu s 429 sú to jediné stavové kódy, pri ktorých má opakovanie zmysel.
Poznámka: endpoint na odosielanie akceptuje maximálne 24 MB na požiadavku, vrátane HTTP overheadu. Payloady prekračujúce tento limit sú odmietnuté webovým serverom s HTTP 500 namiesto 413, pretože odmietnutie nastane pred validáciou na aplikačnej vrstve. Majte to na pamäti pri base64-kódovaných prílohách: zväčšujú veľkosť súboru približne o 33 %.
API500UH počas deploymentov: chybový kód API500UH (Unhandled error) sa môže objaviť, keď PSB vykonáva internú aktualizáciu služby (Service Fabric deployment). V mnohých prípadoch bol dokument už úspešne doručený príjemcovi, ale potvrdzovací krok zlyhal kvôli migrácii. Retry mechanizmus PSB automaticky skúša dokončiť zostávajúce kroky. Ak obdržíte API500UH, skontrolujte prostredníctvom stavových udalostí, či bol dokument doručený, skôr než ho znova odošlete.
Pri 4xx chybe odpoveď obsahuje JSON telo popisujúce problém. Tieto informácie vám pomôžu rýchlo identifikovať príčinu.
{
"error": "Validation failed",
"message": "The supplied document is not valid UBL 2.1",
"details": [
"cbc:InvoiceTypeCode is missing"
]
}
Pri 5xx chybe odpoveď nie je vždy štruktúrovaná. Založte svoju retry logiku na HTTP stavovom kóde, nie na obsahu tela.
Nie každá chyba si zaslúži retry. Pravidlo je jednoduché: iba 5xx stavové kódy a sieťové timeouty stoja za opakovanie. Pri 4xx chybách musíte požiadavku upraviť pred opätovným odoslaním.
Odporúčaná stratégia retryovania je exponential backoff: začnite s krátkou čakacou dobou a zdvojnásobte ju pri každom ďalšom pokuse.
Tip: pridajte k čakacej dobe malý náhodný rozptyl (jitter). Ak po výpadku retryuje viacero klientov súčasne, jitter zabráni tomu, aby všetci zasiahli server v rovnakom okamihu.
Vždy kombinujte retry logiku s hlavičkou X-EConnect-DocumentId. Zahrnutím rovnakého documentId pri každom pokuse PSB garantuje, že dokument nebude nikdy spracovaný dvakrát. Ak PSB obdrží documentId, ktorý už bol spracovaný, vráti 409 Conflict ako potvrdenie.
Pozri Idempotency: zabránenie duplicitnému odosielaniu pre úplné vysvetlenie a príklady kódu.
Okrem retry logiky, ktorú implementujete sami, má PSB vlastný retry mechanizmus pre doručovanie dokumentov. Ak PSB skúša doručiť faktúru alebo objednávku príjemcovi a ten vráti 5xx chybu, PSB automaticky obnoví doručovanie.
PSB vykoná až 8 retry pokusov rozložených približne na 35 hodín. Pri každom pokuse PSB publikuje udalosť, takže môžete sledovať priebeh:
InvoiceSentRetryInvoiceSentErrorOrderSentRetryOrderSentErrorAk máte nakonfigurovaný webhook pre tieto témy, obdržíte notifikáciu pri každom pokuse. Po InvoiceSentError alebo OrderSentError je vyžadovaná manuálna akcia: kontaktujte príjemcu alebo eskalujte cez eConnect Support.
Tip: prihláste sa na odber tém
InvoiceSentRetryaInvoiceSentErrorprostredníctvom webhooku. Týmto spôsobom okamžite detegujete problémy s doručovaním a môžete konať proaktívne.
Pre webhooky PSB používa samostatný retry plán. Ak je váš webhook endpoint nedostupný alebo nevracia 2xx stavový kód, PSB opakuje doručenie udalosti.
HookSentRetryHookSentErrorPSB očakáva 2xx odpoveď od vášho endpointu do 100 sekúnd. Akákoľvek iná odpoveď (alebo timeout) sa počíta ako neúspešný pokus. Preto spracovávajte prichádzajúce webhooky čo najrýchlejšie, potvrďte príjem odpoveďou 200 OK a náročné spracovanie vykonávajte asynchrónne v background procese.
Poznámka: ak je váš endpoint nedostupný po dlhšiu dobu, PSB prestane retryovať po 5 dňoch. Zmeškané udalosti možno stále získať prostredníctvom batch endpointu. Pozri Batch hooks pre viac informácií.
Pre integrácie, ktoré pristúpujú k PSB z chránenej siete (firewall, proxy, zoznam povolených), musia byť povolené primárne aj failover názvy hostiteľov. everbinding.nl je staršia doména eConnect a aktivívne sa používa pre failover PSB.
psb.econnect.euapi.everbinding.nlaccp-psb.econnect.eutestapi.everbinding.nlPridajte všetky štyri názvy hostiteľov na whitelist na porte 443 (HTTPS). Bez failover názvov hostiteľov sa môže platné pripojenie PSB počas zlyhania stať nedostupným, zatiaľ čo PSB sama beží.
Retry-After, exponential backoffV skratke
Chyby klienta (4xx) vyžadujú vašu pozornosť: opravte problém v požiadavke. Chyby servera (5xx) sú dočasné a možno ich bezpečne retryovať s exponential backoff. Vždy používajte hlavičku X-EConnect-DocumentId, aby ste zabránili duplicitnému spracovaniu pri retries. PSB automaticky retryuje doručovanie dokumentov až 8-krát počas približne 35 hodín a webhooky po dobu až 5 dní.
Zobraziť kompletnú API dokumentáciu