Dziwna sytuacja. We wtorek popołudniu przestał działać skrypt, który wyciąga zamówienia z allegro i wrzuca do aplikacji. Skrypt ten był napisany rok temu i działał bez zarzutów.
Okazuje się że po uruchomieniu skryptu dostaje error
php cron_start.php action=allegro sklep=1 rray(2) { ["text"]=> string(3675) "object(SoapFault)#113 (9) { ["message":protected]=> string(27) "Error Fetching http headers" ["string":"Exception":private]=> string(0) "" ["code":protected]=> int(0) ["file":protected]=> string(69) "../public_html/lib/allegro.php" ["line":protected]=> int(4611) ["trace":"Exception":private]=> array(4) { [0]=> array(4) { ["function"]=> string(11) "__doRequest" ["class"]=> string(10) "SoapClient" ["type"]=> string(2) "->" ["args"]=> array(5) { [0]=> string(480) "<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://webapi.allegro.pl/service.php"><SOAP-ENV:Body><ns1:DoGetTransactionsIDsRequest><ns1:sessionHandle>9fe5a8e8c4d83fccc6dba7a1c6a56fca8d65f211846f2f//03_1</ns1:sessionHandle><ns1:itemsIdArray><ns1:item>6654534481</ns1:item></ns1:itemsIdArray><ns1:userRole>seller</ns1:userRole></ns1:DoGetTransactionsIDsRequest></SOAP-ENV:Body></SOAP-ENV:Envelope> " [1]=> string(37) "https://webapi.allegro.pl/service.php" [2]=> string(21) "#doGetTransactionsIDs" [3]=> int(1) [4]=> int(0) } } [1]=> array(6) { ["file"]=> string(69) ".../public_html/lib/allegro.php" ["line"]=> int(4611) ["function"]=> string(10) "__soapCall" ["class"]=> string(10) "SoapClient" ["type"]=> string(2) "->" ["args"]=> array(3) { [0]=> string(20) "doGetTransactionsIDs" [1]=> array(1) { [0]=> object(DoGetTransactionsIDsRequest)#112 (4) { ["sessionHandle"]=> string(52) "9fe5a8e8c4d83fccc6dba7a1c6a56fca8d65f211846f2f//03_1" ["itemsIdArray"]=> array(1) { [0]=> string(10) "6654534481" } ["userRole"]=> string(6) "seller" ["shipmentIdArray"]=> NULL } } [2]=> array(2) { ["uri"]=> string(37) "https://webapi.allegro.pl/service.php" ["soapaction"]=> string(0) "" } } } [2]=> array(6) { ["file"]=> string(74) "../public_html/cron_allegro_get.php" ["line"]=> int(191) ["function"]=> string(20) "doGetTransactionsIDs" ["class"]=> string(7) "allegro" ["type"]=> string(2) "->" ["args"]=> array(1) { [0]=> object(DoGetTransactionsIDsRequest)#112 (4) { ["sessionHandle"]=> string(52) "9fe5a8e8c4d83fccc6dba7a1c6a56fca8d65f211846f2f//03_1" ["itemsIdArray"]=> array(1) { [0]=> string(10) "6654534481" } ["userRole"]=> string(6) "seller" ["shipmentIdArray"]=> NULL } } } [3]=> array(4) { ["file"]=> string(74) "../public_html/cron_allegro_get.php" ["line"]=> int(503) ["function"]=> string(10) "getAllegro" ["args"]=> array(4) { [0]=> &int(1) [1]=> &string(8) "*****" [2]=> &string(8) "*****" [3]=> &string(8) "*****" } } } ["previous":"Exception":private]=> NULL ["faultstring"]=> string(27) "Error Fetching http headers" ["faultcode"]=> string(4) "HTTP" } " ["code"]=> int(200) }
Szukając w internecie znalazłem że może to powodować timeout więc zwiększyłem czas default_socket_timeout z 60 na 600 ale to nie pomogło.
A tutaj część funkcji która pobiera dane
function getAllegro($sklep,$login,$haslo,$api) { try { $allegro = new Allegro(ALLEGRO_WSDL); $DoQuerySysStatusRequest = new DoQuerySysStatusRequest(); $DoQuerySysStatusRequest->sysvar = 3; $DoQuerySysStatusRequest->countryId = 1; $DoQuerySysStatusRequest->webapiKey = $api; $DoLoginRequest = new DoLoginRequest(); $DoLoginRequest->userLogin = $login; // string $DoLoginRequest->userPassword = $haslo; // string $DoLoginRequest->countryCode = 1; // int $DoLoginRequest->webapiKey = $api; // string $DoLoginRequest->localVersion = $allegro->doQuerySysStatus($DoQuerySysStatusRequest)->verKey; // long $key = $allegro->doLogin($DoLoginRequest)->sessionHandlePart; $doMyAccountItemsCount = new DoMyAccountItemsCountRequest(); $doMyAccountItemsCount->sessionHandle = $key; $doMyAccountItemsCount->accountType = 'sold'; $count = $allegro->doMyAccountItemsCount($doMyAccountItemsCount)->myaccountItemsCount; $doGetShipmentDataRequest = new DoGetShipmentDataRequest(); $doGetShipmentDataRequest->countryId = 1; $doGetShipmentDataRequest->webapiKey = $api; $doGetShipmentDataRequest = $allegro->doGetShipmentData($doGetShipmentDataRequest); foreach($doGetShipmentDataRequest->shipmentDataList->item as $w) { $wysylki[$w->shipmentId] = iconv('utf-8','iso-8859-2',$w->shipmentName); } $doMyAccount2 = new DoMyAccount2Request(); $doMyAccount2->sessionHandle = $key; /* Wybrany typ zakładki Mojego Allegro (bid - oferty z zakładki Licytuję * won - oferty z zakładki Kupione * not_won - oferty z zakładki Niekupione * watch - oferty z zakładki Obserwowane: Trwające * watch_cl - oferty z zakładki Obserwowane: Zakończone, * sell - oferty z zakładki Sprzedaję, * sold - oferty z zakładki Sprzedane, * not_sold - aoferty z zakładki Niesprzedane, * future - oferty z zakładki Do wystawienia). */ $off = 0; $doMyAccount2->accountType = 'sold'; $doMyAccount2->limit = 25; while($count > 0) { $doMyAccount2->offset = $off; $acc = $allegro->doMyAccount2($doMyAccount2); foreach($acc->myaccountList->item as $it) { { $itemy[] = $it->myAccountArray->item[0] . ''; } { $itemy[] = $it->item[0] . ''; } /*$itemy_dane[$it->myAccountArray->item[0] . ''] = array( 'nazwa' => iconv('utf-8','iso-8859-2',$it->myAccountArray->item[9] . ''), 'cena' => round((float)$it->myAccountArray->item[4], 2), //'ilosc' => ((int)$it->myAccountArray->item[10]), );*/ } $off+=25; $count-=25; } $doGetPostBuyData = new DoGetPostBuyDataRequest(); $doGetPostBuyData->sessionHandle = $key; $doGetTransactionsIDs = new DoGetTransactionsIDsRequest(); $doGetTransactionsIDs->sessionHandle = $key; $doGetTransactionsIDs->userRole = 'seller'; ...
Znajomy programista patrząc na to sugerował aby zmienić
$off = 0;
na
$off = 3000;
offset od którego API ma pobierać zamówienia w sumie jest ich ok 3500
Po tej zmianie skrypt ruszył. Ale pobiera dane wybiórczo. Nowych zamówień jest ok 200 nie pobranych. Mam na przykład ostatnie zamówienie a z kilku godzin wcześniej brakuje.