sysko Posted April 4 Share Posted April 4 Dobrý den, snažím se propojit ERP systém s Prestou přes webové služby (API) a mám problém při zjišťování nových objednávek. Když pošlu dotaz na objednávky ve stavu 10 a 13 v prohlížeči, tak tam problém není, ale když stejný dotaz pošlu z ERP systému ve skriptu (Delphi), tak to vrací divné odpovědi. Zkoušel jsem udělat jednoduchý skript i v Powershellu, kde se jen zeptám na objednávky a vrací to také chybně. Jde o to, že když tam opravdu není žádná objednávka, která je ve stavu 10 nebo 13 a pak se tam objednávka objeví, tak skript pořád vrací jakože tam nic není a až po nějaké době to začne vracet správně. Stejný problém je obráceně, když tam objednávka je a zpracuji jí, tím pádem jí pomocí stejného skriptu v Prestě změním stav, takže API dotaz by už nic vracet neměl (opět přes prohlížeč to vrací správně), tak stejně ještě pár minut vrací že tam objednávka je. Dokonce se děje, že to někdy vrátí, že tam objednávka už není a pak zase že je. Přikládám ještě soubor s logy, kde jsem zkoušel po dobu cca 8 minut po sekundě posílat dotaz na objednávku. V logu níže, jsou vidět časy jednotlivých odpovědí (vyčetl jsem si z xml odpovědi počet objednávek), zhruba v 11:13 jsem objednávku označil jako zpracovanou a neměl by jí to tedy nabízet. Ovšem ve skriptu můžete vidět, že první záznam s tím, že se tam nenachází žádná objednávka je až v 11:15 a potom to vrací někdy že tam objednávka je a pak že zase není. Nemohu přijít na to, čím to je. Chybu ve skriptu jsem kontroloval několikrát a tam chybu nevidím. Nevíte, prosím, čím by to mohlo být? Hlavně tedy proč když pošlu dotaz přes prohlížeč, tak to funguje bez problému ale skrze skripty (ať už Delphi, Powershell či PHP) se to chová takto divně. Za jakoukoliv radu budu vděčný, případně poskytnu další informace, pokud bude potřeba. Děkuji. log.txt Link to comment Share on other sites More sharing options...
Quar1995 Posted May 3 Share Posted May 3 (edited) On 4/4/2025 at 3:40 PM, sysko said: Dobrý den, snažím se propojit ERP systém s Prestou přes webové služby (API) a mám problém při zjišťování nových objednávek. Když pošlu dotaz na objednávky ve stavu 10 a 13 v prohlížeči, tak tam problém není, ale když stejný dotaz pošlu z ERP systému ve skriptu (Delphi), tak to vrací divné odpovědi. Zkoušel jsem udělat jednoduchý skript i v Powershellu, kde se jen zeptám na objednávky a vrací to také chybně. Jde o to, že když tam opravdu není žádná objednávka, která je ve stavu 10 nebo 13 a pak se tam objednávka objeví, tak skript pořád vrací jakože tam nic není a až po nějaké době to začne vracet správně. Stejný problém je obráceně, když tam objednávka je a zpracuji jí, tím pádem jí pomocí stejného skriptu v Prestě změním stav, takže API dotaz by už nic vracet neměl (opět přes prohlížeč to vrací správně), tak stejně ještě pár minut vrací že tam objednávka je. Dokonce se děje, že to někdy vrátí, že tam objednávka už není a pak zase že je. Přikládám ještě soubor s logy, kde jsem zkoušel po dobu cca 8 minut po sekundě posílat dotaz na objednávku. V logu níže, jsou vidět časy jednotlivých odpovědí (vyčetl jsem si z xml odpovědi počet objednávek), zhruba v 11:13 jsem objednávku označil jako zpracovanou a neměl by jí to tedy nabízet. Ovšem ve skriptu můžete vidět, že první záznam s tím, že se tam nenachází žádná objednávka je až v 11:15 a potom to vrací někdy že tam objednávka je a pak že zase není. Nemohu přijít na to, čím to je. Chybu ve skriptu jsem kontroloval několikrát a tam chybu nevidím. Nevíte, prosím, čím by to mohlo být? Hlavně tedy proč když pošlu dotaz přes prohlížeč, tak to funguje bez problému ale skrze skripty (ať už Delphi, Powershell či PHP) se to chová takto divně. Za jakoukoliv radu budu vděčný, případně poskytnu další informace, pokud bude potřeba. Děkuji. Mimochodem, kdyby někdo hledal odreagování od technických trablů, doporučuji zkusit tento bonus na https://mostbet1.cz. I pár minut mimo kód může někdy pomoct najít novou perspektivu. log.txt 62.91 kB · 2 downloads Dobrý den, z vašeho popisu to vypadá, že problém bude nejspíš na straně cache — buď na úrovni samotné Presty, nebo ještě spíše na úrovni serveru či API vrstvy (například reverse proxy, CDN, nebo modul pro cachování odpovědí ve webserveru). To by také vysvětlovalo rozdílné chování při přístupu přes prohlížeč a skript — prohlížeč může mít jinak nastavené hlavičky (např. Cache-Control, If-Modified-Since apod.), které ovlivní, jestli se odpověď vrátí čerstvá nebo z mezipaměti. Zde je pár věcí, které by stálo za to zkontrolovat: Zkuste v API dotazu nastavit hlavičku Cache-Control: no-cache, případně Pragma: no-cache nebo If-None-Match s nějakým neexistujícím ETagem – to často donutí server vrátit aktuální data. Porovnejte HTTP hlavičky mezi prohlížečem a skriptem – můžete použít nástroje jako Fiddler, Charles Proxy nebo Wireshark, abyste viděl rozdíl. Zkontrolujte nastavení modulu cache v Prestě – někdy může Presta nebo hosting cachovat XML výstup i na úrovni modulu nebo databázového cache (např. Smarty nebo Memcached). Zkuste vynutit jiné uživatelské jméno nebo jiný User-Agent ve skriptu – někdy jsou odpovědi cacheované podle těchto hlaviček. Ověřte, jestli Presta nemá nějaký „cron“ nebo „refresh index“ mechanizmus, který reálně mění viditelnost objednávek až po určitém časovém intervalu (některé moduly to dělají). Přesvědčte se, že API odpověď skutečně odpovídá stavu databáze v Prestě – tedy zkuste si ručně ověřit v databázi, že objednávka má změněný stav už v době, kdy API ještě stále tvrdí opak. Zkrátka to vypadá, že někde mezi Prestou a skriptem je nějaká vrstva, která nedodává aktuální stav objednávek hned. Pokud se vám podaří z testovacího skriptu nastavit stejné hlavičky jako z prohlížeče, a chování se srovná, budete mít jasno. Můžu vám pomoci i s napsáním konkrétního skriptu pro testování s těmito hlavičkami, pokud chcete. Edited May 13 by Quar1995 (see edit history) Link to comment Share on other sites More sharing options...
sysko Posted May 27 Author Share Posted May 27 (edited) On 5/3/2025 at 2:11 AM, Quar1995 said: Dobrý den, z vašeho popisu to vypadá, že problém bude nejspíš na straně cache — buď na úrovni samotné Presty, nebo ještě spíše na úrovni serveru či API vrstvy (například reverse proxy, CDN, nebo modul pro cachování odpovědí ve webserveru). To by také vysvětlovalo rozdílné chování při přístupu přes prohlížeč a skript — prohlížeč může mít jinak nastavené hlavičky (např. Cache-Control, If-Modified-Since apod.), které ovlivní, jestli se odpověď vrátí čerstvá nebo z mezipaměti. Zde je pár věcí, které by stálo za to zkontrolovat: Zkuste v API dotazu nastavit hlavičku Cache-Control: no-cache, případně Pragma: no-cache nebo If-None-Match s nějakým neexistujícím ETagem – to často donutí server vrátit aktuální data. Porovnejte HTTP hlavičky mezi prohlížečem a skriptem – můžete použít nástroje jako Fiddler, Charles Proxy nebo Wireshark, abyste viděl rozdíl. Zkontrolujte nastavení modulu cache v Prestě – někdy může Presta nebo hosting cachovat XML výstup i na úrovni modulu nebo databázového cache (např. Smarty nebo Memcached). Zkuste vynutit jiné uživatelské jméno nebo jiný User-Agent ve skriptu – někdy jsou odpovědi cacheované podle těchto hlaviček. Ověřte, jestli Presta nemá nějaký „cron“ nebo „refresh index“ mechanizmus, který reálně mění viditelnost objednávek až po určitém časovém intervalu (některé moduly to dělají). Přesvědčte se, že API odpověď skutečně odpovídá stavu databáze v Prestě – tedy zkuste si ručně ověřit v databázi, že objednávka má změněný stav už v době, kdy API ještě stále tvrdí opak. Zkrátka to vypadá, že někde mezi Prestou a skriptem je nějaká vrstva, která nedodává aktuální stav objednávek hned. Pokud se vám podaří z testovacího skriptu nastavit stejné hlavičky jako z prohlížeče, a chování se srovná, budete mít jasno. Můžu vám pomoci i s napsáním konkrétního skriptu pro testování s těmito hlavičkami, pokud chcete. Dobrý den, omlouvám se za pozdní reakci, dostal jsem se k tomu až teď. Zkusil jsem ještě jednou na základě vaší odpovědi projít hlavičky dotazů a zkusil nastavit: 'Cache-Control', 'no-cache, no-store, must-revalidate' 'Pragma', 'no-cache' 'Expires', '0' Zatím to vypadá, že to funguje. Je divné, že podobné nastavení jsem zkoušel už předtím a nepomohlo to, ale mohl jsem mít chybu ještě někde jinde, nebo mi tam nějaký parametr možná chyběl. Porovnával jsem hlavičky, které jsem viděl v prohlížeči přes vývojářské prostředí a zkoušel to samé/podobné nastavit i u sebe. Zkoušel jsem to jak přes powershell tak z ERP systému a nastavit sript, který se každou vteřinu ptal na objednávky a pokaždé když jsem změnil počet objednávek, tak ihned vracel správné hodnoty. Takže moc děkuji za pomoc. Edited May 27 by sysko (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now