Closed Javorxdd closed 11 months ago
@Javorxdd Dobrý den, odpověď 422 Unprocessable entity
s tuto chybouvou hláškou API typicky vrací, když není možné danou akci vykonat nad daným dokladem, například protože je zálohovka už zaplacená, nebo se nejedná o zálohovku.
Pošlete prosím detaily na podpora@fakturoid.cz - zejména o jaký konkrétní účet a doklad se jednalo - na základě těchto infomrací by mělo být možné zjistit, pro API vrátilo právě tuto odpověď.
@edariedl Dobrý den,
poprosím Vás, aby jste si znovu přečetl nadpis a text toho vlákna. Tímto se tak vyhneme možné budoucí hádce. Nic o 422 Unprocessable entity nevím.
@Javorxdd Dobrý den,
omlouvám se za nedostatečné vysvětlení.
Před odpovědí jsem prověřoval logy i zdrojové kódy Fakturoidu. Logy neukazovaly žádný status kód 500 Internal serve error při volání invoices/id/fire.json?event=pay_proforma
. Stejně tak podle zdrojových kódů Fakturoid neumí vrátit tělo odpovědi {"errors":{"event":"pay_proforma cannot be fired"}}
a zároveň status kód 500 Internal server error. S touto chybou se vždy vrací status kód 422 Unprocessable entity. Neevidujeme ani žádné produkční výjimky z volání pay_proforma
.
PHP knihovna vyhodí výjimku Fakturoid\Exception
vždy když se z API vrátí status kód 400 a vyšší. Proto jsem předpokládal, že šlo u status kódu spíš o přehlédnutí. Za to se omlouvám.
Pro důkladnější prověření opravdu potřebujeme, abyste nám napsal na podpora@fakturoid.cz s detaily o jaký doklad se jednalo a kdy přesně se požadavek posílal. Bez toho není možné prověřit co přesně se stalo.
Již jsem posílal error paní do chatu, když jsem s ní něco řešil. Tato chyba se mi ukázala vždy, když jsem vytvářel fakturu ve stylu: „pay_proforma.“
Zde přikládám error z konzole:
2023/12/15 14:17:37 [error] 32#32: *3479 FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught Fakturoid\Exception: {"errors":{"event":"pay_proforma cannot be fired"}} in /home/container/webroot/vendor/fakturoid/fakturoid-php/lib/Fakturoid/Request.php:93 Stack trace:
Tato výjimka je naprosto v pořádku objeví se vždy, když server vráti 4xx nebo 5xx status kód. Důležité je, co uvidíte, pokud ji odchytíte přes try ... catch
try {
$subject = $f->createSubject(array('name' => '', 'email' => 'aloha@pokus.cz'));
} catch (Fakturoid\Exception $e) {
$e->getCode(); // 422
$e->getMessage(); // '{"errors":{"name":["je povinná položka","je příliš krátký/á/é (min. 2 znaků)"]}}'
}
Tyto výjimky tak při implemetnaci PHP knihovny musíte odchytávat a zpracovávat. Samotný stacktrace pro tuto výjimky není důležitý. Pro nalezení chyby musíme vědět o jaký endpoint šlo, případně jaká data se odesílala, o jaké konkrétní se jednalo doklady a tak podobně.
Dohledal jsem si konverzaci z dnešní podpory a na základě účtu prověřil, proč tuto odpověď ze serveru dostáváte.
pay_proforma
je možné volat pouze na faktury, které mají proforma=true
, pokud toto neplatí, API vrátí 422 a v těle vrátí chybu, kterou jste popsal výše. Prověřil jsem konkrétně Vaši situaci a problém je v tom, že faktura, na kterou pay_proforma
volate není proforma. Zkuste místo pay_proforma
použít obyčejné pay
, to by to mělo vyřešit.
Dejte prosím vědět, jestli se to povedlo.
A bude ta faktura při použití atributu „pay“ vytvořená jako zaplacená, nebo ne?
Vytvoření a zaplacení faktury jsou vždy 2 API požadavky:
/api/v3/accounts/{slug}/invoices.json
/api/v3/accounts/{slug}/invoices/{id}/fire.json?event=pay
Já bych ji právě potřeboval vytvořit. Zaplacenou posílám jinak.
S tím prosím napište na podpora@fakturoid.cz a popište, čeho se snažíte dosáhnout a přidat i kontext proč ať Vám můžeme poradit přímo pro Vaši konkrétní situaci.
Zdravím,
po vytvoření faktury jakožto: pay_proforma dostávám nepochopitelný kód 500, ikdyž je faktura vytvořená a přijde mi do mailu. Chyba: [error] 26#26: *1764 FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught Fakturoid\Exception: {"errors":{"event":"pay_proforma cannot be fired"}}