Strona korzysta z plików cookies w celu realizacji usług. Jeżeli nie zmienisz ustawień, będą one zapisywane w pamięci Twojego urządzenia.

Allegro WebAPI

Interfejs programistyczny platformy Allegro

doChangeQuantityItem

Ostatnia zmiana: 11.09.2014 r.
Dostępność:
Metoda pozwala na zmianę liczby przedmiotów dostępnych w ofercie zalogowanego użytkownika.

  1. session-handle | string | wymagany
    Identyfikator sesji użytkownika, uzyskany za pomocą metody doLogin(Enc).
  2. item-id | long | wymagany
    Identyfikator oferty.
  3. new-item-quantity | int | wymagany
    Nowa wartość dla początkowej liczby przedmiotów w ofercie.



Orientacyjna struktura wywołania metody

$dochangequantityitem_request = array(
   'session-handle' => '22eb99326c6be29aa16d07d622bcfbcbee94ad54846f2f4e03_1',
   'item-id' => 1027314005,
   'new-item-quantity' => 3
);

  1. item-id | long
    Identyfikator oferty.
  2. item-info | string
    Informacja o wysokości ew. dopłaty (lub zwrotu) do oferty.
  3. item-quantity-left | int
    Liczba przedmiotów pozostałych do sprzedaży.
  4. item-quantity-sold | int
    Liczba przedmiotów sprzedanych.



Orientacyjna struktura odpowiedzi serwera

$dochangequantityitem_response = array(
   'item-id' => 1027314005,
   'item-info' => '-',
   'item-quantity-left' => 2,
   'item-quantity-sold' => 1
);

  • ERR_BID_DURING_CHANGES
    Dokonanie zmiany nie jest możliwe z uwagi na fakt, że w ofercie złożone zostały oferty kupna.
  • ERR_BLOCK_SELL_SELL
    Użytkownik z blokadą sprzedaży na koncie nie może dokonywać zmian w ofercie.
  • ERR_BLOCKED_USER_CANT_INVOKE_METHOD
    Użytkownik z blokadą konta nie może korzystać z tej metody.
  • ERR_CHANGING_QUANTITY_FOR_ADVERTISEMENT
    Nie można zmienić liczby sztuk w ogłoszeniu.
  • ERR_CHANGING_QUANTITY_FOR_MULTI_OFFER_DISABLED
    W ofertach z wieloma wariantami nie możesz zmienić liczby przedmiotów.
  • ERR_INVALID_QUANTITY
    Niepoprawna wartość dla liczby dostępnych przedmiotów (dopuszczalny zakres wartości: 1-999) lub nastąpiła próba zwiększenia liczby przedmiotów w ofercie, w której złożone zostały już oferty kupna lub po zmniejszeniu liczby przedmiotów do wskazanej wartości, w ofercie nie pozostałby dostępny co najmniej jeden przedmiot.
  • ERR_JUNIOR_LIMIT_EXCEEDED
    Przekroczono limit 50 zł na wystawianie ofert, który obowiązuje użytkowników kont Junior.
  • ERR_MULTI_ITEM_AND_BUYNOW_AND_STARTING
    Dokonanie zmiany nie jest możliwe z uwagi na fakt, że oferty wieloprzedmiotowe wymagają wyboru albo ceny Kup Teraz! albo ceny wywoławczej (nie obu równocześnie).
  • ERR_MULTI_ITEMS_NOT_ALLOWED_IN_THIS_CATEGORY
    Oferty wieloprzedmiotowe nie są dozwolone w tej kategorii.
  • ERR_MULTI_ITEMS_RELISTING_NOT_ALLOWED
    Wieloprzedmiotowe oferty z licytacją nie są dozwolone (nie dotyczy Polski).
  • ERR_NO_DATABASE
    Problemy z bazą danych Allegro.
  • ERR_NO_SESSION / ERR_SESSION_EXPIRED
    Niepoprawny identyfikator sesji lub sesja wygasła.
  • ERR_SOME_ITEMS_AND_RESERVE_PRICE
    Dokonanie zmiany nie jest możliwe z uwagi na fakt, że dla ofert wieloprzedmiotowych niedopuszczalne jest ustawienie ceny minimalnej.
  • ERR_WEBAPI_KEY_INACTIVE
    Klucz WebAPI na którym została wygenerowana sesja został zdezaktywowany (jego właściciel nie zaakceptował warunków Regulaminu WebAPI).
  • ERR_WEBAPI_NOT_AVAIL
    Problemy z usługą Allegro WebAPI.
  • ERR_YOU_CANT_CHANGE_ITEM
    Dokonanie zmiany nie jest możliwe z uwagi na fakt, że oferta została zakończona lub nie została wystawiona przez zalogowanego użytkownika.
  • ERR_STANDARDIZED_DESCRIPTION_REQUIRED_FOR_ADVERTISEMENT
    Ogłoszenie musi zawierać nowy opis oferty.

Allegro nie bierze odpowiedzialności za skutki wykorzystania zamieszczonych przykładów kodu, nie daje także gwarancji ich poprawnego działania. Widoczny kod ma charakter wyłącznie poglądowy i może zawierać błędy.

#1 (03.08.2014 r.) / c# (Autor: ezio-perfumy)
  1. long hashoffset = 0; long serverTime = 0;
  2. sessionHandle = service.doLogin(_login, _password, 1, _webapiKey, _versionKey, out hashoffset, out serverTime);
  3.  
  4. int itemQuantityLeft, itemQuantitySold;
  5. long id_item = long.Parse(tb_quan.Rows[i]["ID_AUCTION"].ToString());
  6. int stan = int.Parse(tb_quan.Rows[i]["STAN"].ToString());
  7.  
  8. service.doChangeQuantityItem(sessionHandle, ref id_item, stan, out itemQuantityLeft, out itemQuantitySold);


WAŻNE:
W VisualStudio ta metoda jest błędnie zaimportowana z pliku WSDL - stąd pojawiają się problemy z plikiem XML.

Rozwiązanie to zmiana w pliku Reference.cs

Domyślnie jest tak:

  1. /// <remarks/>
  2. [System.Web.Services.Protocols.SoapRpcMethodAttribute("#dochangequantityitem", RequestNamespace="urn:AllegroWebApi", ResponseNamespace="urn:AllegroWebApi")]
  3. [return: System.Xml.Serialization.SoapElementAttribute("item-info")]
  4. public string doChangeQuantityItem([System.Xml.Serialization.SoapElementAttribute("session-handle")] string sessionhandle, [System.Xml.Serialization.SoapElementAttribute("item-id")] ref long itemid, [System.Xml.Serialization.SoapElementAttribute("new-item-quantity")] int newitemquantity, [System.Xml.Serialization.SoapElementAttribute("item-quantity-left")] out int itemquantityleft, [System.Xml.Serialization.SoapElementAttribute("item-quantity-sold")] out int itemquantitysold) {
  5. object[] results = this.Invoke("doChangeQuantityItem", new object[] {
  6. sessionhandle,
  7. itemid,
  8. newitemquantity});
  9. itemid = ((long)(results[1]));
  10. itemquantityleft = ((int)(results[2]));
  11. itemquantitysold = ((int)(results[3]));
  12. return ((string)(results[0]));
  13. }


Powinno być tak:

  1. /// <remarks/>
  2. [System.Web.Services.Protocols.SoapRpcMethodAttribute("#dochangequantityitem", RequestNamespace="urn:AllegroWebApi", ResponseNamespace="urn:AllegroWebApi")]
  3. [return: System.Xml.Serialization.SoapElementAttribute("item-info")]
  4. public string doChangeQuantityItem([System.Xml.Serialization.SoapElementAttribute("session-handle")] string sessionhandle, [System.Xml.Serialization.SoapElementAttribute("item-id")] ref long itemid, [System.Xml.Serialization.SoapElementAttribute("new-item-quantity")] int newitemquantity, [System.Xml.Serialization.SoapElementAttribute("item-quantity-left")] out int itemquantityleft, [System.Xml.Serialization.SoapElementAttribute("item-quantity-sold")] out int itemquantitysold) {
  5. object[] results = this.Invoke("doChangeQuantityItem", new object[] {
  6. sessionhandle,
  7. itemid,
  8. newitemquantity});
  9. itemid = ((long)(results[0]));
  10. itemquantityleft = ((int)(results[2]));
  11. itemquantitysold = ((int)(results[3]));
  12. return ((string)(results[1]));
  13. }


Nie wiem czemu domyślnie metoda chce zwracać pierwszy element tablicy z indeksem 0 -> jako iteminfo, gdzie w dokumentacji allegro jest to ItemID.

Wystarczy zmienić indeksy wyniku z 0 na 1, i z 1 na 0 i wszystko zaczyna poprawnie działać.

Może komuś pozwoli zaoszczędzić czas.
#2 (17.09.2015 r.) / php (Autor: bato3)
Obecnie ID aukcji jest tak duże, że wymaga przechowywania w `unsigned int`. Moje PHP jest na tyle głupie, że stringi rzutuje na `signed int`, dlatego najlepiej przekonwertować wartość do `floata`.

  1. $arr = array(
  2. 'sessionHandle' =>$this->sessionId,
  3. 'itemId' => floatval($auction_id),
  4. 'newItemQuantity' => $cnt
  5. );
  6. $this->doChangeQuantityItem($arr);