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_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.

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);