Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z tablicą przy api allegro
Forum PHP.pl > Forum > Przedszkole
pyrekpyrek
Zacząłem bawić się webapi allegro w celu stworzenia narzędzia do pobierania informacji o sprzedanych aukcjach.

Chodzi o to że mam już napisane pobieranie wszystkich sprzedanych aukcji i api pobiera mi numery aukcji tworząc tablicę coś takiego:

  1.  
  2. print_r($ids);
  3.  
  4. [0] => 5441760890
  5. [1] => 6589976719
  6. [2] => 6589921201
  7. [3] => 6589900372
  8. )



i takie cacko:

  1. $A = $client->__soapCall('doGetPostBuyData', array('session-handle' => $session['session-handle-part'],'items-array' => array_slice($ids, 0, 25)) );


powinno mi pobrać dane z aukcji o numerach pobranych z tablicy ale o dziwo na jednym serwerze mi to działa a na innym nie.
Jeśli wpiszę z palucha numer aukcji w taki sposób

  1. $A = $client->__soapCall('doGetPostBuyData', array('session-handle' => $session['session-handle-part'],'items-array' => array(6589976719)) );



to pobiera poprawnie na obu serwerach tak jak by array_slice($ids, 0, 25) - błędnie podstawiał numery aukcji a tablicy - na moim serwerze - nie wiem czy coś w ustawieniach serwera jest nie tak??

POMOCY :-) !


nospor
Cytat
tak jak by array_slice($ids, 0, 25) - błędnie podstawiał numery aukcji a tablicy
To moze zamiast sie takjakbygdybowac, to sprawdz dokladnie co ci zwraca...

print_r(array_slice($ids, 0, 25))
I bedziesz wiedzial co sie dzieje
pyrekpyrek
pobiera poprawnie tablicę
  1.  
  2. print_r(array_slice($ids, 0, 25));
  3. Array ( [0] => 5441760890 [1] => 6589976719 [2] => 6589921201 [3] => 6589900372 [4] => 6589899429 )


ale danych z allegro nie pobiera na jednym serwerze a na innym tak.

Tak jak by pobranych wartości z tablicy nie traktował jako cyfr
nospor
Czyli juz wiesz ze to nie wina array_slice. Na przyszlosc nie rzucaj oskarzeniami na lewo i prawa tylko zbadaj sytuacje tongue.gif

Przejrzyj logi, to moze dowiesz sie cos wiecej
viking
Ale widzisz różnicę między (z dokumentacji) 'itemsArray' => array(972090662, 959671296, 863180420),
a Array ( [0] => 5441760890 [1] => 6589976719 [2] => 6589921201 [3] => 6589900372 [4] => 6589899429 )
pyrekpyrek
W logach zupełnie nic nie ma żadnych błędów :-(

Ale zagadka dla mnie jest to że ten skrypt wklejam cały - na jednym serwerze działa a na drugim nie - sorki jeśli czegoś nie łapie - asem nie jestem :-) stad ten post z prośbą o pomoc:

  1.  
  2.  
  3. class WebAPISoapClient extends SoapClient
  4. {
  5. const COUNTRY_PL = 1;
  6. const COUNTRY_TESTWEBAPI = 228;
  7. const QUERY_ALLEGROWEBAPI = 1;
  8. public function __construct()
  9. {
  10. parent::__construct('http://webapi.allegro.pl/uploader.php?wsdl');
  11. }
  12. }
  13.  
  14.  
  15. // nasze dane
  16. $config = array(
  17.  
  18. 'login' => xxxxx',
  19. 'password' => 'xxxxxxxxxxxxxx',
  20. 'apiKey' => 'xxxxxxxxxxxxxxx'
  21.  
  22.  
  23. );
  24.  
  25. $country = WebAPISoapClient::COUNTRY_PL;
  26.  
  27. try
  28. {
  29. $client = new WebAPISoapClient();
  30. // pobieranie wersji WebAPI
  31. $version = $client->doQuerySysStatus(WebAPISoapClient::QUERY_ALLEGROWEBAPI, $country, $config['apiKey']);
  32. // właściwe logowanie do serwisu
  33.  
  34. $session = $client->doLoginEnc($config['login'], base64_encode( hash('sha256', $config['password'], true) ), 1, $config['apiKey'], $version['ver-key']);
  35. $nr_sesji = $session['session-handle-part']; // nr sesji
  36.  
  37.  
  38. // obsługa wyjątku
  39. // pobieranie ilości elementów w zakładce
  40. $count = $client->doMyAccountItemsCount($nr_sesji, 'sold', array() );
  41.  
  42. echo"Znaleziono sprzedanych $count <br>";
  43.  
  44. // tablica to przechowywania pobranych elementów
  45. $auctions = array();
  46. // pierwsza strona na początek
  47. $offset = 0;
  48.  
  49. // pobieramy aukcje tak długo jak mamy następną stronę
  50. while($count > 0)
  51. {
  52. // pobieramy daną stronę
  53. $auctions = array_merge($auctions, $client->doMyAccount2($nr_sesji, 'sold', $offset, array() ) );
  54.  
  55. // pobraliśmy 25 elementów
  56. $count -= 25;
  57. // przechodzimy do następnej strony
  58. $offset += 25;
  59. }
  60.  
  61.  
  62. // tablica do przechowywania listy ID
  63. $ids = array();
  64. $x=0;
  65. // zapisujemy wszystkie ID aukcji
  66. foreach($auctions as $auction)
  67. {
  68. $ids[] = $auction->{'my-account-array'}[0];
  69. $id_au_p = $auction->{'my-account-array'}[0];
  70.  
  71. // echo ++$x; echo"id aukcji:"; echo $id_au_p; echo"<br>";
  72.  
  73.  
  74. //$A = $client->__soapCall('doGetPostBuyData', array('session-handle' => $session['session-handle-part'],'items-array' => array_slice($ids, 0, 25)) );
  75. //print_r(array_slice($ids, 0, 25));
  76.  
  77. }
  78.  
  79.  
  80. // tablica danych o klientach
  81. $customers = array();
  82.  
  83. // pobieramy dane w porcjach po 25 aukcji
  84. while( count($ids) > 0)
  85. {
  86. // pobieramy aktualną stronę
  87.  
  88.  
  89.  
  90. $customers = array_merge($customers, $client->doGetPostBuyData($nr_sesji, array_slice($ids, 0, 25) ) );
  91. // usuwamy pierwsze 25 elementów z tablicy
  92.  
  93. $ids = array_slice($ids, 25);
  94.  
  95. }
  96.  
  97. foreach($customers as $customer)
  98. {
  99. $data[ $customer->{'item-id'} ] = $customer->{'users-post-buy-data'};
  100. }
  101.  
  102. foreach($data as $id => $customers)
  103. {
  104.  
  105. // każdy element tablicy aukcji jest kolejną tablicą - klientów, którzy w tej aukcji zakupili towar
  106. foreach($customers as $customer)
  107. {
  108. echo $id; echo $customer->{'user-data'}->{'user-login'}; echo"<br>";
  109. }
  110. }
  111.  
  112.  
  113.  
  114. }
  115.  
  116. catch(SoapFault $soapFault)
  117. {
  118.  
  119.  
  120.  
  121. }
  122.  
  123. catch(SoapFault $error) // wychwytywanie błędów
  124. {
  125. echo 'Błąd ', $error->faultcode, ': ', $error->faultstring, "n";
  126. }
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
viking
A ten bloczek catch(SoapFault $soapFault)? Daj tam echo $soapFault->getMessage();
Kurde, allegro ma RESTowe api? https://developer.allegroapi.io/ Ale zaspałem z tą wiedzą.
pyrekpyrek
po wstawieniu
  1. echo $soapFault->getMessage();


nic się nie dzieje czysto. Kurcze normalnie ręce mi opadają :-(
viking
Dwa razy ten sam wyjątek łapiesz, zamień ten drugi na zwykłe \Exception. U mnie ten kod działa. Allegro ma już od dawna składnię camelCase. WSDL też ma inny adres.
pyrekpyrek
Witam. Pozwolę sobie na kontynuowanie w tym wątku mam napisany moduł do allegro który pobiera zakończone aukcje i dane od kupującego, działa jednak pojawia mi się w nim problem z którym nie mogę sobie dać rady może ktoś znajdzie co zrobiłem nie tak:

Chodzi o to że moduł pobiera mi sprzedane aukcje i wszystko wydaje się ok jednak gdy jeden klient kupi na dwóch aukcjach różnych aukcjach nawet w innym przedziale czasowym to pobiera mi ciągle dane tylko z jednej jego aukcji i przypisuje je do obu zakupionych.

Czyli np: kupił na jednej aukcji klocki a na innej majtki
to wstawia mi ciągle dane :
aukcja 123 - id_transakcji 123 - majtki sztuk 1
aukcja 345 - id transakcji 123 - majtki sztuk 1

  1.  
  2.  
  3.  
  4. try {
  5. $soapClient = new SoapClient('https://webapi.allegro.pl/service.php?wsdl', $options);
  6. $request = array(
  7. 'countryId' => COUNTRY_CODE,
  8. 'webapiKey' => WEBAPI_KEY
  9. );
  10. $result = $soapClient->doQueryAllSysStatus($request);
  11. $resultW = $soapClient->doGetShipmentData($request);
  12. $versionKeys = array();
  13. foreach ($result->sysCountryStatus->item as $row) {
  14. $versionKeys[$row->countryId] = $row;
  15. }
  16. $doLoginEncrequest = array
  17. (
  18. 'userLogin' => WEBAPI_USER_LOGIN,
  19. 'userHashPassword' => WEBAPI_USER_ENCODED_PASSWORD,
  20. 'countryCode' => COUNTRY_CODE,
  21. 'webapiKey' => WEBAPI_KEY,
  22. 'localVersion' => $versionKeys[COUNTRY_CODE]->verKey,
  23. );
  24. $session = $soapClient->doLoginEnc($doLoginEncrequest);
  25.  
  26. $szukaj1doGetPostBuyData = array
  27. (
  28. 'sessionHandle' => $session->sessionHandlePart,
  29. 'itemsArray' => array($nraukcji)
  30. );
  31.  
  32. $sprzedanedoGetMySoldItems = array(
  33. 'sessionId' => $session->sessionHandlePart,
  34. 'sortOptions' => array(
  35. 'sortType' => 10,
  36. 'sortOrder' => 2),
  37. 'pageSize' => 1,
  38. 'pageNumber' => 0);
  39.  
  40.  
  41. $tabela_wysylek=$resultW->shipmentDataList->item;
  42.  
  43. $items = $soapClient->doGetMySoldItems($sprzedanedoGetMySoldItems);
  44. $liczba = 1;
  45. $ilerazy=ceil($items->soldItemsCounter/$liczba);
  46. $lp=0;
  47. $nrpetli = 0;
  48. while($nrpetli < $ilerazy)
  49.  
  50. {
  51. $sprzedanedoGetMySoldItems1 = array(
  52. 'sessionId' => $session->sessionHandlePart,
  53. 'sortOptions' => array(
  54. 'sortType' => 10,
  55. 'sortOrder' => 2),
  56. 'pageSize' => $liczba,
  57. 'pageNumber' => $nrpetli);
  58.  
  59. $items= $soapClient->doGetMySoldItems($sprzedanedoGetMySoldItems1);
  60. $nrpetli=$nrpetli+1;
  61.  
  62. ++$lp;
  63. $count = $liczba;
  64. for($i=0;$i<$count;$i++)
  65. {
  66. $tytul=$items->soldItemsList->item[$i]->itemTitle;
  67. $fotka=$items->soldItemsList->item[$i]->itemThumbnailUrl;
  68.  
  69.  
  70. echo '<tr><td>'.$lp.'</td>
  71. <td>'.$items->soldItemsList->item[$i]->itemId.'</td>
  72. <td>'.$items->soldItemsList->item[$i]->itemTitle.'</td>';
  73. //echo'<td><img src='.$items->soldItemsList->item[$i]->itemThumbnailUrl.'></td>';
  74. echo'<td><table>';
  75.  
  76. $doGetPostBuyDatareq = array(
  77. 'sessionHandle' => $session->sessionHandlePart,
  78. 'itemsArray' => array($items->soldItemsList->item[$i]->itemId)
  79. );
  80.  
  81. $klienci = $soapClient->doGetPostBuyData($doGetPostBuyDatareq);
  82.  
  83.  
  84. $dogettransactionsids_request = array(
  85. 'sessionHandle' => $session->sessionHandlePart,
  86. 'itemsIdArray' => array($items->soldItemsList->item[$i]->itemId),
  87. 'userRole' => 'seller',);
  88.  
  89. $idtransakcji = $soapClient->dogettransactionsids($dogettransactionsids_request);
  90.  
  91. echo'<table border=1><tr>';
  92. $countid = count($idtransakcji->transactionsIdsArray->item);
  93.  
  94. for($idi=0;$idi<$countid;$idi++)
  95. {
  96. $dogetpostbuyformsdataforsellers_request = array(
  97. 'sessionId' => $session->sessionHandlePart,
  98. 'transactionsIdsArray' => array($idtransakcji->transactionsIdsArray->item[$idi]));
  99.  
  100.  
  101. $dogetpostbuyformsdataforsellers = $soapClient->dogetpostbuyformsdataforsellers($dogetpostbuyformsdataforsellers_request);
  102.  
  103.  
  104. echo'<td>'.$dogetpostbuyformsdataforsellers->postBuyFormData->item[0]->postBuyFormBuyerLogin.'';
  105. echo'<br>'.$dogetpostbuyformsdataforsellers->postBuyFormData->item[0]->postBuyFormPayStatus.'';
  106. echo'<br>'.$dogetpostbuyformsdataforsellers->postBuyFormData->item[0]->postBuyFormDateInit.'';
  107. echo'<br>'.$dogetpostbuyformsdataforsellers->postBuyFormData->item[0]->postBuyFormDateCancel.'';
  108.  
  109.  
  110. $coto= $items->soldItemsList->item[$i]->itemTitle;
  111. $nraukcji= $items->soldItemsList->item[$i]->itemId;
  112. $usereklogin = $dogetpostbuyformsdataforsellers->postBuyFormData->item[0]->postBuyFormBuyerLogin;
  113. $userekid = $dogetpostbuyformsdataforsellers->postBuyFormData->item[0]->postBuyFormBuyerId;
  114. $idtrans = $idtransakcji->transactionsIdsArray->item[$idi];
  115. $ilosc= $dogetpostbuyformsdataforsellers->postBuyFormData->item[0]->postBuyFormItems->item[0]->postBuyFormItQuantity;
  116. $cena= $dogetpostbuyformsdataforsellers->postBuyFormData->item[0]->postBuyFormItems->item[0]->postBuyFormItAmount;
  117.  


Ślicznie proszę o pomoc.

nikt nie pomoże?? :-)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.