Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Fatal error: Class 'WebAPISOAPClient' not found in ... on line 233
Forum PHP.pl > Forum > Przedszkole
MESSIAH :)
Mam taki kod:
  1. <?
  2. define('ALLEGRO_LOGIN', 'MÓJ LOGIN');
  3. define('ALLEGRO_PASSWORD', 'MOJE HASŁO');
  4. define('ALLEGRO_KEY', 'KLUCZ');
  5. define('ALLEGRO_COUNTRY', AllegroWebAPISoapClient::COUNTRY_PL);
  6.  
  7. class AllegroWebAPISoapClient extends SoapClient
  8. {
  9. /**
  10.  * Kraj - Polska.
  11.  */
  12. const COUNTRY_PL = 1;
  13. /**
  14.  * Logowanie do serwisu testwebapi.pl.
  15.  */
  16. const COUNTRY_TESTWEBAPI = 228;
  17.  
  18. /**
  19.  * Zapytanie o wersję Allegro WebAPI.
  20.  */
  21. const QUERY_ALLEGROWEBAPI = 1;
  22.  
  23. /**
  24.  * Czas trwania - 3 dni.
  25.  */
  26. const LIFETIME_3DAYS = 0;
  27. /**
  28.  * Czas trwania - 5 dni.
  29.  */
  30. const LIFETIME_5DAYS = 1;
  31. /**
  32.  * Czas trwania - 7 dni.
  33.  */
  34. const LIFETIME_7DAYS = 2;
  35. /**
  36.  * Czas trwania - 10 dni.
  37.  */
  38. const LIFETIME_10DAYS = 3;
  39. /**
  40.  * Czas trwania - 14 dni.
  41.  */
  42. const LIFETIME_14DAYS = 4;
  43.  
  44. /**
  45.  * Koszty pokrywa sprzedający.
  46.  */
  47. const TRANSPORT_COST_SELLER = 0;
  48. /**
  49.  * Koszty pokrywa kupujący.
  50.  */
  51. const TRANSPORT_COST_BUYER = 1;
  52.  
  53. /**
  54.  * Przesyłka pocztowa (polecona/paczka).
  55.  */
  56. const TRANSPORT_OPTION_POST = 1;
  57. /**
  58.  * Przesyłka pocztowa priorytetowa (polecona/paczka).
  59.  */
  60. const TRANSPORT_OPTION_POSTPRIORITY = 2;
  61. /**
  62.  * Przesyłka kurierska.
  63.  */
  64. const TRANSPORT_OPTION_COURIER = 4;
  65. /**
  66.  * Odbiór osobisty.
  67.  */
  68. const TRANSPORT_OPTION_PERSONAL = 8;
  69. /**
  70.  * Inne.
  71.  */
  72. const TRANSPORT_OPTION_OTHER = 16;
  73. /**
  74.  * Zgadzam się na przesłanie przedmiotu za granicę.
  75.  */
  76. const TRANSPORT_OPTION_ABROAD = 32;
  77.  
  78. /**
  79.  * Przedpłata.
  80.  */
  81. const PAYMENT_OPTION_PREPAID = 1;
  82. /**
  83.  * Pobranie.
  84.  */
  85. const PAYMENT_OPTION_POSTPAID = 2;
  86. /**
  87.  * Płatności Allegro.
  88.  */
  89. const PAYMENT_OPTION_ALLEGRO = 4;
  90. /**
  91.  * Bezpieczne Płatności Allegro z Escrow.
  92.  */
  93. const PAYMENT_OPTION_ESCROW = 8;
  94. /**
  95.  * Bezpieczne Płatności Allegro z Escrow.
  96.  */
  97. const PAYMENT_OPTION_OTHER = 16;
  98.  
  99. /**
  100.  * Pogrubienie.
  101.  */
  102. const OPTION_BOLD = 1;
  103. /**
  104.  * Miniaturka.
  105.  */
  106. const OPTION_THUMB = 2;
  107. /**
  108.  * Podświetlenie.
  109.  */
  110. const OPTION_HIGHLIGHT = 4;
  111. /**
  112.  * Wyróżnienie.
  113.  */
  114. const OPTION_PREMIUM = 8;
  115. /**
  116.  * Strona kategorii.
  117.  */
  118. const OPTION_CATEGORY = 16;
  119. /**
  120.  * Strona główna.
  121.  */
  122. const OPTION_HOME = 32;
  123.  
  124. /**
  125.  * Automatycznie tworzy klienta dla interfejsu Allegro WebAPI.
  126.  */
  127. public function __construct()
  128. {
  129. parent::__construct('https://webapi.allegro.pl/uploader.php?wsdl');
  130. }
  131. /**
  132.  * Redukuje obraz do wielkości nadającej się do przesyłu.
  133.  *
  134.  * @param string $url URL obrazka (lokalne, albo sieciowe).
  135.  * @return string Binarna zawartość obrazka w formacie JPEG.
  136.  */
  137. public static function resize($url)
  138. {
  139. $image = file_get_contents($url);
  140.  
  141. // właśnie tutaj używamy Base64 ręcznie, ale nigdzie indziej!
  142. while( strlen( base64_encode($image) ) > 200000)
  143. {
  144. $temp = imagecreatefromstring($image);
  145. $x = ceil(0.9 * imagesx($temp) );
  146. $y = ceil(0.9 * imagesy($temp) );
  147.  
  148. $image = imagecreatetruecolor($x, $y);
  149. imagecopyresized($image, $temp, 0, 0, 0, 0, $x, $y, imagesx($temp), imagesy($temp) );
  150.  
  151. imagejpeg($image, 'temp.jpg', 75);
  152. $image = file_get_contents('temp.jpg');
  153. unlink('temp.jpg');
  154. }
  155.  
  156. return $image;
  157. }
  158. }
  159.  
  160. // pobieramy nasz klucz wersji
  161. $allegroVerKey = file_get_contents('.verkey');
  162.  
  163. // łączymy się z Allegro WebAPI
  164. $client = new AllegroWebAPISoapClient();
  165.  
  166. try
  167. {
  168. try
  169. {
  170. // próba logowania
  171. $session = $client->doLoginEnc(ALLEGRO_LOGIN, base64_encode( hash('sha256', ALLEGRO_PASSWORD, true) ), ALLEGRO_COUNTRY, ALLEGRO_KEY, $allegroVerKey);
  172. }
  173. catch(SoapFault $error)
  174. {
  175. // błąd niepoprawnego klucza wersji pozwala nam zauważyć fakt iż coś w serwisie się zmieniło
  176. if($error->faultcode == 'ERR_INVALID_VERSION_CAT_SELL_FIELDS')
  177. {
  178. // pobieramy aktualny klucz wersji
  179. $version = $client->doQuerySysStatus(1, ALLEGRO_COUNTRY, ALLEGRO_KEY);
  180. $allegroVerKey = $version['ver-key'];
  181.  
  182. /* tutaj wykonujemy swoje operacje uaktualniające */
  183.  
  184. // zapisujemy klucz wersji do pliku
  185. file_put_contents('.verkey', $allegroVerKey);
  186.  
  187. // ponowna próba logowania, już z nowym kluczem
  188. $session = $client->doLoginEnc(ALLEGRO_LOGIN, base64_encode( hash('sha256', ALLEGRO_PASSWORD, true) ), ALLEGRO_COUNTRY, ALLEGRO_KEY, $allegroVerKey);
  189. }
  190. // każdy inny błąd to już poważny problem
  191. else
  192. {
  193. throw $error;
  194. }
  195. }
  196.  
  197. // udało nam się zalogować
  198. echo 'Logowanie poprawne. Uzyskany klucz sesji to: ', $session['session-handle-part'];
  199. }
  200. catch(SoapFault $error)
  201. {
  202. echo 'Błąd ', $error->faultcode, ': ', $error->faultstring, "n";
  203. }
  204.  
  205. $empty = new stdClass();
  206. $empty->{'fvalue-string'} = "";
  207. $empty->{'fvalue-int'} = 0;
  208. $empty->{'fvalue-float'} = 0;
  209. $empty->{'fvalue-image'} = " ";
  210. $empty->{'fvalue-text'} = " ";
  211. $empty->{'fvalue-datetime'} = 0;
  212. $empty->{'fvalue-boolean'} = false;
  213. $form = array();
  214.  
  215. // pamiętaj, że maksymalna długość 50 "znaków" liczona jest w bajtach, dlatego polskie znaki, czy encje HTMLa liczone są za kilka bajtów
  216. $field = clone $empty;
  217. $field->{'fid'} = 1;
  218. $field->{'fvalue-string'} = 'Aukcja FooBar';
  219. $form[] = $field;
  220.  
  221. $field = clone $empty;
  222. $field->{'fid'} = 2;
  223. $field->{'fvalue-int'} = 48878;
  224. $form[] = $field;
  225.  
  226. $field = clone $empty;
  227. $field->{'fid'} = 3;
  228. $field->{'fvalue-datetime'} = time();
  229. $form[] = $field;
  230.  
  231. $field = clone $empty;
  232. $field->{'fid'} = 4;
  233. $field->{'fvalue-int'} = WebAPISOAPClient::LIFETIME_7DAYS;
  234. $form[] = $field;
  235.  
  236. $field = clone $empty;
  237. $field->{'fid'} = 5;
  238. $field->{'fvalue-int'} = 69;
  239. $form[] = $field;
  240.  
  241. $field = clone $empty;
  242. $field->{'fid'} = 8;
  243. $field->{'fvalue-float'} = 666;
  244. $form[] = $field;
  245.  
  246. $field = clone $empty;
  247. $field->{'fid'} = 9;
  248. $field->{'fvalue-int'} = WebAPISOAPClient::COUNTRY_PL;
  249. $form[] = $field;
  250.  
  251. // 16 to województwo zachodniopomorskie, numer województwa można pobrać z listy opisu pola
  252. $field = clone $empty;
  253. $field->{'fid'} = 10;
  254. $field->{'fvalue-int'} = 16;
  255. $form[] = $field;
  256.  
  257. $field = clone $empty;
  258. $field->{'fid'} = 11;
  259. $field->{'fvalue-string'} = 'Szczecin';
  260. $form[] = $field;
  261.  
  262. $field = clone $empty;
  263. $field->{'fid'} = 12;
  264. $field->{'fvalue-int'} = WebAPISOAPClient::TRANSPORT_COST_BUYER;
  265. $form[] = $field;
  266.  
  267. // flagi składamy przez ich logiczne sumowanie
  268. $field = clone $empty;
  269. $field->{'fid'} = 13;
  270. $field->{'fvalue-int'} = WebAPISOAPClient::TRANSPORT_OPTION_POST | WebAPISOAPClient::TRANSPORT_OPTION_POSTPRIORITY;
  271. $form[] = $field;
  272.  
  273. $field = clone $empty;
  274. $field->{'fid'} = 14;
  275. $field->{'fvalue-int'} = WebAPISOAPClient::PAYMENT_OPTION_PREPAID | WebAPISOAPClient::PAYMENT_OPTION_ALLEGRO;
  276. $form[] = $field;
  277.  
  278. $field = clone $empty;
  279. $field->{'fid'} = 15;
  280. $field->{'fvalue-int'} = WebAPISOAPClient::OPTION_BOLD | WebAPISOAPClient::OPTION_THUMB | WebAPISOAPClient::OPTION_HIGHLIGHT;
  281. $form[] = $field;
  282.  
  283. $i = 0;
  284.  
  285. // maksymalnie 8 zdjęć!
  286. foreach( array('zdjecie1.jpg', 'zdjecie2.png', '/var/www/zdjecie3.gif', 'http://example.com/zdjecie4.bmp') as $image)
  287. {
  288. $field = clone $empty;
  289. $field->{'fid'} = 16 + $i;
  290. $field->{'fvalue-image'} = WebAPISoapClient::resize($image);
  291. $form[] = $field;
  292. $i++;
  293. }
  294.  
  295. $field = clone $empty;
  296. $field->{'fid'} = 24;
  297. $field->{'fvalue-string'} = '<h1>Opis</h1>
  298.  
  299. <p>Nasza aukcja - powered by <a href="http://wrzasq.pl/" title="Tworzenie stron i aplikacji internetowych">Wrzasq.pl</a>.</p>
  300.  
  301. <div><GALERIA></div>.';
  302. $form[] = $field;
  303.  
  304. $local = uniqid();
  305. $item = $client->doNewAuctionExt($session['session-handle-part'], $form, 0, $local);
  306. $check = $client->doVerifyItem($session['session-handle-part'], $local);
  307.  
  308. if($item['item-id'] == $check)
  309. {
  310. echo '<p>Wystawiono przedmiot <a href="http://allegro.pl/item' . $item['item-id'] . '.html">' . $item['item-id'] . '</a>.</p>';
  311. }
  312. else
  313. {
  314. echo '<p class="error">Coś poszło nie tak.</p>';
  315. }
  316. ?>

Wszystko się łączy i mam wyświetlony komunikat o poprawnym logowaniu. A poniżej mam taki błąd:
Kod
Fatal error: Class 'WebAPISOAPClient' not found in /home/messiah/public_html/allegro.php on line 233

CO jest nie tak?
solr
PHP nie może znaleźć klasy "WebAPISOAPClient". Może jej faktycznie nie ma? Może literówka? Może uwalony (lub ogólnie brak) autoloader?
MESSIAH :)
Faktycznie była literówka. Teraz znowu widać tylko:
Kod
Logowanie poprawne. Uzyskany klucz sesji to:

I biały ekran - chyba tak nie powinno byćquestionmark.gif
solr
Masz błąd w logice moim zdaniem. Łapiesz wyjątki, ale wyjątek występuje wtedy gdy np. podasz błędny adres do wsdl albo wywołasz metodę, która nie istnieje itp.. Natomiast, w twojej implementacji ogólnie olewasz fakt, że metoda doLoginEnc może zwrócić nie tylko pozytywny wynik (czyli to czego się spodziewasz), ale także http://allegro.pl/webapi/documentation.php...hod-error-codes . I to nie zostanie złapane jako wyjątek, bo z punktu widzenia SOAPClient to wszystko jest w porządku. Sprawdź dokładnie, co zwraca linia 188.
Potter125
Bez znajomości podstaw OOP - nie ugryziesz tego.
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.