HTTP stavové kódy, chybové odpovědi a retry logika PSB API: jak vybudovat robustní integraci.
Každá API integrace dříve nebo později narazí na chyby. Výpadek sítě, nedostupný server, nesprávně formátovaný dokument: to patří k věci. PSB API komunikuje chyby prostřednictvím standardních HTTP stavových kódů a strukturovaných JSON odpovědí. Navíc PSB má zabudovaný retry mechanismus, který automaticky řeší dočasné chyby při doručování dokumentů.
V tomto článku se dozvíte, jaké stavové kódy PSB vrací, jak interpretovat chybové odpovědi, kdy můžete bezpečně zopakovat požadavek a jak funguje automatický retry mechanismus PSB.
PSB API používá standardní HTTP stavové kódy k indikaci výsledku požadavku. Stavové kódy se dělí do dvou kategorií: chyby klienta (4xx), které musíte opravit sami, a chyby serveru (5xx), které můžete zopakovat.
Při 4xx chybě je problém v samotném požadavku. Opětovné odeslání se stejnými daty vyprodukuje stejný výsledek. Opravte příčinu před dalším pokusem.
VerstuurInvoice): nabízené PartyId není (pro tento typ dokumentu) na Peppol/SMPqueryRecipientParty nebo lookup.peppol.org na nabízeném ID, poté volitelně zkontrolujte související schemas (například BE 0208 versus 9925/BE:VAT, stejné základní číslo) -- změnu EndpointID doporučte jen při potvrzeném výsledku lookup. Žádný výsledek u žádného kandidátského ID: příjemce není dosažitelný na těchto identifikátorech; klient se musí u příjemce zeptat na registraci nebo jiné dodávací IDapplication/json, kde je vyžadovánqueryRecipientParty. Chybová zpráva: EConnect.Psb.Models.EConnectException: 'Duplicate id agencies {code} requested.' (kde {code} je kód agentury bez úvodní nuly, např. schéma 0208 → 208).API403 Access forbidden: doslovná chybová zpráva [API403] Access forbidden. Please check PartyId authorization and make sure the Subscription-Key is valid se mimo jiné může objevit při neúspěšném odeslání Peppol z Business Central ("delivery failed"), příčina je ale obecná pro PSB, nikoli specifická pro BC. Pořadí diagnózy:
Poznámka: zmínka o "Subscription-Key" v chybové zprávě automaticky neznamená, že klíč je třeba obnovit. Autorizace PartyId a problém s propojením na straně platformy jsou stejně častou příčinou. Pokud doručení nadále selhává i po platné kontrole tokenu a partyId, eskalujte na podporu eConnect, místo opakovaného otáčení Subscription-Key.
Validace SBDH obálky (API400.USRMS1 / API400.USRMS2): tyto chybové kódy indikují nesoulad mezi Peppol obálkou (SBDH) a samotným dokumentem e-faktury. U USRMS1 odesílatel nebo příjemce v obálce neodpovídá identifikátorům v XML faktury. U USRMS2 PSB nemůže najít rozpoznatelného odesílatele v dokumentu. Zkontrolujte, zda EndpointID a PartyIdentification ve vašem UBL odpovídají hodnotám poskytnutým při odesílání. PSB odmítne dokument na úrovni AS4 a vrátí chybu odesílajícímu Access Pointu.
Výjimka z pravidla „pouze 5xx lze retryovat“: 429 Too Many Requests indikuje omezování počtu požadavků a lze jej retryovat. Počkejte a respektujte hlavičku Retry-After, než požadavek znovu odesláte.
Retry-After, poté opakujte5xx chyba indikuje dočasný problém na straně serveru. Samotný požadavek může být správný. Spolu s 429 jsou to jediné stavové kódy, u kterých má opakování smysl.
Poznámka: endpoint pro odesílání akceptuje maximálně 24 MB na požadavek, včetně HTTP overheadu. Payloady překračující tento limit jsou odmítnuty webovým serverem s HTTP 500 místo 413, protože odmítnutí nastane před validací na aplikační vrstvě. Mějte to na paměti u base64-kódovaných příloh: zvětšují velikost souboru přibližně o 33 %.
API500UH během deploymentů: chybový kód API500UH (Unhandled error) se může objevit, když PSB provádí interní aktualizaci služby (Service Fabric deployment). V mnoha případech byl dokument již úspěšně doručen příjemci, ale potvrzovací krok selhal kvůli migraci. Retry mechanismus PSB automaticky pokouší dokončit zbývající kroky. Pokud obdržíte API500UH, zkontrolujte prostřednictvím stavových událostí, zda byl dokument doručen, než jej znovu odešlete.
Při 4xx chybě odpověď obsahuje JSON tělo popisující problém. Tyto informace vám pomohou rychle identifikovat příčinu.
{
"error": "Validation failed",
"message": "The supplied document is not valid UBL 2.1",
"details": [
"cbc:InvoiceTypeCode is missing"
]
}
Při 5xx chybě odpověď není vždy strukturovaná. Založte svou retry logiku na HTTP stavovém kódu, nikoli na obsahu těla.
Ne každá chyba si zaslouží retry. Pravidlo je jednoduché: pouze 5xx stavové kódy a síťové timeouty stojí za opakování. Při 4xx chybách musíte požadavek upravit před opětovným odesláním.
Doporučená strategie retryování je exponential backoff: začněte s krátkou čekací dobou a zdvojnásobte ji při každém dalším pokusu.
Tip: přidejte k čekací době malý náhodný rozptyl (jitter). Pokud po výpadku retryuje více klientů současně, jitter zabrání tomu, aby všichni zasáhli server ve stejný okamžik.
Vždy kombinujte retry logiku s hlavičkou X-EConnect-DocumentId. Zahrnutím stejného documentId při každém pokusu PSB garantuje, že dokument nebude nikdy zpracován dvakrát. Pokud PSB obdrží documentId, který již byl zpracován, vrátí 409 Conflict jako potvrzení.
Viz Idempotency: zabránění duplicitnímu odesílání pro úplné vysvětlení a příklady kódu.
Kromě retry logiky, kterou implementujete sami, má PSB vlastní retry mechanismus pro doručování dokumentů. Pokud PSB pokouší doručit fakturu nebo objednávku příjemci a ten vrátí 5xx chybu, PSB automaticky obnoví doručování.
PSB provede až 8 retry pokusů rozložených přibližně na 35 hodin. Při každém pokusu PSB publikuje událost, takže můžete sledovat průběh:
InvoiceSentRetryInvoiceSentErrorOrderSentRetryOrderSentErrorPokud máte nakonfigurovaný webhook pro tato témata, obdržíte notifikaci při každém pokusu. Po InvoiceSentError nebo OrderSentError je vyžadována manuální akce: kontaktujte příjemce nebo eskalujte přes eConnect Support.
Tip: přihlaste se k odběru témat
InvoiceSentRetryaInvoiceSentErrorprostřednictvím webhooku. Tímto způsobem okamžitě detekujete problémy s doručováním a můžete jednat proaktivně.
Pro webhooky PSB používá samostatný retry plán. Pokud je váš webhook endpoint nedostupný nebo nevrátí 2xx stavový kód, PSB opakuje doručení události.
HookSentRetryHookSentErrorPSB očekává 2xx odpověď od vašeho endpointu do 100 sekund. Jakákoliv jiná odpověď (nebo timeout) se počítá jako neúspěšný pokus. Proto zpracovávejte příchozí webhooky co nejrychleji, potvrďte příjem odpovědí 200 OK a náročné zpracování provádějte asynchronně v background procesu.
Poznámka: pokud je váš endpoint nedostupný po delší dobu, PSB přestane retryovat po 5 dnech. Zmeškané události lze stále získat prostřednictvím batch endpointu. Viz Batch hooks pro více informací.
U integrací, které přistupují k PSB z chráněné sítě (firewall, proxy, seznam povolených), musí být povoleny jak primární, tak failover názvy hostitelů. everbinding.nl je starší doména eConnect a je aktivně používána pro failover PSB.
psb.econnect.euapi.everbinding.nlaccp-psb.econnect.eutestapi.everbinding.nlPřidávejte všechny čtyři názvy hostitelů na whitelist na portu 443 (HTTPS). Bez názvů hostitelů failover se může platné připojení PSB během selhání strom stat nedostupné, zatímco PSB sama funguje.
Retry-After, exponential backoffVe zkratce
Chyby klienta (4xx) vyžadují vaši pozornost: opravte problém v požadavku. Chyby serveru (5xx) jsou dočasné a lze je bezpečně retryovat s exponential backoff. Vždy používejte hlavičku X-EConnect-DocumentId, abyste zabránili duplicitnímu zpracování při retries. PSB automaticky retryuje doručování dokumentů až 8krát během přibližně 35 hodin a webhooky po dobu až 5 dní.
Zobrazit kompletní API dokumentaci