Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Allegro WebApi
Forum PHP.pl > Forum > PHP
mambus
Witam.

Nie ma praktycznie o tym informacji w internecie a dokumentacja opublikowana przez allegro powoduje że nóż się w kieszeni otwiera.

Mam pytanie, dostałem gotowy moduł dla Allegro API który działał dwa lata temu i od tego czasu nie był używany. Dzisiaj, po zaktualizowaniu kategorii, gdy próbuję dodać testową aukcję , pojawia się komunikat:

SOAP-ERROR: Encoding: object hasn't 'fvalue-date' property

Jedyne co zdążyłem odkryć, to że allegro dnia 26-go Maja tego roku, wprowadziło pewne zmiany w api. Dokładnie chodzi o to: http://allegro.pl/webapi/documentation.php/show/id,113

Pytanie jest, jak to ugryźć ?

Ew. czy jest na forum osoba, która kiedykolwiek korzystała z allegroWebapi i moglaby podpowiedzieć coś odnośnie postawienia całego modułu od nowa.. ?

Obecny nie był aktualizowany od dwóch lat a ja zwyczajnie nie rozumiem co mam zmienić, aby powyższy komunikat nie pojawiał się....

Proszę o pomoc.
cycofiasz
2 lata bez modyfikacji webapi allegro to rzecz nierealna wink.gif

Zapodaj kod tego modułu. Za pewne brakuje w nim parametrów w polach formularza sprzedaży.
mambus
Witam jeszcze raz. No z tego co wiem nikt od dwóch lat z naszym modułem allegro na naszej stronie nic nie zrobil...

Zapodaję plik , w którym z tego co zdążyłem zrozumieć, są braki...

  1. public function newAuction($param)
  2. {
  3.  
  4. $field = array (
  5. 'fid' => 1, // Tytuł [Aukcja testowa]
  6. 'fvalue-string' => 'Aukcja testowa',
  7. 'fvalue-int' => 0,
  8. 'fvalue-float' => 0,
  9. 'fvalue-image' => 0,
  10. 'fvalue-datetime' => 0,
  11. 'fvalue-date' => '',
  12. 'fvalue-range-int' => array(
  13. 'fvalue-range-int-min' => 0,
  14. 'fvalue-range-int-max' => 0),
  15. 'fvalue-range-float' => array(
  16. 'fvalue-range-float-min' => 0,
  17. 'fvalue-range-float-max' => 0),
  18. 'fvalue-range-date' => array(
  19. 'fvalue-range-date-min' => '',
  20. 'fvalue-range-date-max' => ''));
  21.  
  22. $fields = array ();
  23.  
  24. $param["timeOfAuction"]=self::$TimesOfAuction[$param["timeOfAuction"]];
  25. if (!$param["numOfItems"])
  26. $param["numOfItems"]=1;//jesli nie okreslono liczby przedmiotów to jest 1
  27. if (!$param["startTime"])
  28. $param["startTime"]=time();//aktualny czas jeśli nieokreślono inaczej
  29. if (!$param["deliverPay"] )
  30. {
  31. $param["deliverPay"]=IAuctionOptions::TRANS_COST_BUYER;
  32. }
  33.  
  34. $action = ($param["transportOptions"] && $param["prepaidCost"] && $param["atDeliveryCost"] ) ? "doNewAuctionExt" : "doNewAuction";
  35.  
  36. if (228==$this->countryCode) $param["region"]=1;
  37.  
  38. $action="doNewAuctionExt";
  39.  
  40. unset($fields);
  41.  
  42. $fields=array();
  43.  
  44. $fields[0]=$field; $fields[0]['fid']=1; $fields[0]['fvalue-string'] = $param["name"]; //tytul aukcji
  45. $fields[1]=$field; $fields[1]['fid']=2; $fields[1]['fvalue-int'] = $param["category"]; //kategoria
  46. $fields[2]=$field; $fields[2]['fid']=3; $fields[2]['fvalue-datetime'] = $param["startTime"]; //Data rozpoczecia
  47. $fields[3]=$field; $fields[3]['fid']=4; $fields[3]['fvalue-int'] = $param["timeOfAuction"]; //Czas trwania aukcji 3dni => 0, 5dni => 1, 7dni => 2, 10dni => 3, 14dni => 4
  48. //oblicza czas zakonczenia aukcji
  49. $time_valid=$param["startTime"]+($param["timeOfAuction"]*86400);
  50.  
  51. $fields[4]=$field; $fields[4]['fid']=5; $fields[4]['fvalue-int'] = $param["count"]; //Liczba sztuk 100
  52.  
  53. // Sprawdzamy czy jest to aukcja licytacja czy tylko kup teraz
  54. // Gdy chcemy aby aukcja byla :
  55. // Sama lista kup teraz : 0 , 0 , cena
  56. // Licytacja : 4 ,0 ,0
  57.  
  58. if($param['onlyBuyNow'])
  59. {
  60. $fields[5]=$field; $fields[5]['fid']=6; $fields[5]['fvalue-float'] = "0.00"; // CENA KUP TERAZ/
  61. $fields[6]=$field; $fields[6]['fid']=7; $fields[6]['fvalue-float'] = "0.00"; //Cena wywolawcza - gdy chcemy liste produktow musi byc 0
  62. $fields[7]=$field; $fields[7]['fid']=8; $fields[7]['fvalue-float'] = $param["buyNowPrice"]; //Cena minimalna - gdy chcemy liste produktow musi byc 0
  63. }
  64. else
  65. {
  66. $fields[5]=$field; $fields[5]['fid']=6; $fields[5]['fvalue-float'] = $param["startPrice"] ; // CENA KUP TERAZ/
  67. $fields[6]=$field; $fields[6]['fid']=7; $fields[6]['fvalue-float'] = $param["minPrice"]; //Cena wywolawcza - gdy chcemy liste produktow musi byc 0
  68. $fields[7]=$field; $fields[7]['fid']=8; $fields[7]['fvalue-float'] = $param["buyNowPrice"] ; //Cena minimalna - gdy chcemy liste produktow musi byc 0
  69. }
  70.  
  71. $fields[8]=$field; $fields[8]['fid']=9; $fields[8]['fvalue-int'] = $this->countryCode;
  72. $fields[9]=$field; $fields[9]['fid']=10; $fields[9]['fvalue-int'] = $param["region"];
  73. $fields[10]=$field; $fields[10]['fid']=11; $fields[10]['fvalue-string'] = $param["city"];
  74.  
  75. //Transport seller=0 buyer=1
  76. $fields[11]=$field; $fields[11]['fid']=12; $fields[11]['fvalue-int'] = $param["deliverPay"];
  77.  
  78. // 1: Poczta (zwykła) - 2: Poczta (priorytet) - 4: Kurier - 8: Odbiór osobisty - 16: Inne (np. list zwykły) - 32: Zgoda na wysyłkę za granicę
  79. $fields[12]=$field; $fields[12]['fid']=13; $fields[12]['fvalue-int'] = $param["transportOption"];
  80.  
  81. // 1: Przedpłata na konto , 2: Za pobraniem , 4: Płatności Allegro , 8: Escrow 16: Inne
  82. $fields[13]=$field; $fields[13]['fid']=14; $fields[13]['fvalue-int'] = $param["paymentOption"];
  83.  
  84. // 'opcjeDodatkowe':
  85. // - 1: Pogrubienie 2: Miniaturka (wymaga wysłania co najmniej jednego obrazka) 4: Podświetlenie
  86. // - 8: Wyróżnienie - 16: Strona kategorii - 32: Strona główna Allegro
  87. $fields[14]=$field; $fields[14]['fid']=15; $fields[14]['fvalue-int'] = $param["attributeOption"];
  88. if(strlen($param['img_min'])>10)
  89. {
  90. $fields[15]=$field; $fields[15]['fid']=16; $fields[15]['fvalue-image'] = implode ( "", file ($param['img_min'])); //obsluga miniaturki
  91. }
  92.  
  93. $fields[23]=$field; $fields[23]['fid']=24; $fields[23]['fvalue-string'] = $param["description"];
  94. $fields[24]=$field; $fields[24]['fid']=25; $fields[24]['fvalue-float'] = $param["prepaidCost"];
  95. $fields[25]=$field; $fields[25]['fid']=26; $fields[25]['fvalue-float'] = $param["atDeliveryCost"];
  96.  
  97. $fields[18]=$field; $fields[18]['fid']=27; $fields[18]['fvalue-string'] = $param["additionalOption"];
  98.  
  99. //wysyłanie danych do allegro
  100. $response = $this->execute($action, Array (
  101. 'session-handle' => $this->sessionHandle,
  102. 'fields' => $fields,
  103. 'private' => 0,
  104. 'local-id' => $this->serverTime
  105. ) );


Udało mi się zamienić fragment pliku i jest krok w przód:

mam możliwość wybrania kategorii i że tak to ujmę "pełnego przygotowania" aukcji.

W samym momencie gdy chcę ją już wystawić, pojawia się komunikat: Atrybuty zostały określone w sposób nieprawidłowy.

(powyższy kod poprawiłem).

Ktoś ma może jakiś pomysł ?
cycofiasz
Komunikat "Atrybuty zostały określone w sposób nieprawidłowy" raczej nie pochodzi od allegro, oni zwracają bardziej precyzyjny komunikat. Do zbadania co jest nie tak potrzebny byłby właśnie ten komunikat od allegro wyrzucony przez wyjątek. Spróbuj go uzyskać, jeśli Ci się nie uda to pokaż nam metodę execute i inne z nią powiązane.
zulus
Zrób w linii 23 tuż przed pierwszym $field=array();
  1. $param = $field+$param;


btw bajzel tam jest
mambus
Znalazłem zdefiniowane stałe, na podstawie których generują się właśnie komunikaty, i dla tego komunikatu z atrybutami , jest stała:

ERR_INVALID_VALUE_IN_ATTRIB_FIELD

Zulus, że jest syf to wiem, niby profesjonalna firma to robiła ale jak widać.

cycofiasz
Można uzyskać jeszcze bardziej precyzyjne dane o błędzie. Można je uzyskać wyłapując wyjątek i wyświetlając faultstring:

  1. catch(SoapFault $error)
  2. {
  3. echo $error->faultstring;
  4. }
mambus
Cycofiasz, niestety nie wywala mi żadnego błędu - jest cały czas ten sam błąd - atrybuty zostały określone w sposób nieprawidłowy.

Zulus, także, nic to nie dało - dokładnie jest tak samo.

Wstawiłem Twoją propozycję dokładnie przed
  1. $fields = array();
oraz próbowałem przed całą tablicą
  1. $field = array(.....


Strasznie jest to dziwne, bo nawet nie mogę wypluć żadnego błędu...

Zastanawiam się nad napisaniem całego modułu od nowa, tylko od czego zacząć ?


EDIT:

Allegro poleciło wygenerować plik XML, znalazłem że ma być to __getLastRequest() i __getLastResponse() , po wpisaniu do kodu oczywiście nic mi się nie pojawia - pusta strona. Wrrr, przyda się cierpliwość do allegro...
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.