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.
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.
.png.022b5452a8f28f552bc9430097a16da2.png)