REST API

Aktualna dokumentacja nowoczesnego interfejsu rest api jest dostępna pod adresem https://developers.shoper.pl/

REST API - dokumentacja interfejsu























product.save

Modyfikuje produkt

        array call(string $session_id, "product.save", array($id, $data, $force = false))
    

Parametry wejściowe

  • id (int) - identyfikator obiektu
  • data (array) - tablica asocjacyjna z danymi obiektu o strukturze:
    • producer_id (int) - identyfikator producenta
    • tax_id (int) - identyfikator stawki podatkowej
    • category_id (int) - identyfikator głównej kategorii
    • unit_id (int) - identyfikator jednostki miary
    • other_price (double) - cena produktu w innych sklepach
    • code (string) - kod produktu
    • ean (string) - kod ean produktu
    • unit_price_calculation (int[0/1]) - czy produkt ma włączone obliczanie ceny jednostkowej
    • pkwiu (string) - pkwiu produktu
    • is_product_of_day (boolean) - czy produkt jest produktem dnia
    • gauge_id (int) - identyfikator gabarytu
    • currency_id (int) - identyfikator waluty produktu
    • dimension_w (float) - szerokość produktu
    • dimension_h (float) - wysokość produktu
    • dimension_l (float) - długość produktu
    • vol_weight (float) - waga gabarytowa produktu
    • additional_isbn (string) - kod ISBN (tylko jeśli jest aktywny w sklepie)
    • additional_kgo (string) - kod KGO (tylko jeśli jest aktywny w sklepie)
    • additional_bloz7 (string) - kod BLOZ7 (tylko jeśli jest aktywny w sklepie)
    • additional_bloz12 (string) - kod BLOZ12 (tylko jeśli jest aktywny w sklepie)
    • additional_producer (string) - kod producenta (tylko jeśli jest aktywny w sklepie)
    • specialOffer (array ) -
      • datefrom (string) - data (w formacie yyyy-mm-dd) rozpoczęcia promocji
      • dateto (string) - data (w formacie yyyy-mm-dd) zakończenia promocji
      • promoprice (float) - cena promocyjna
      • promoprice_wholesale (float) - cena promocyjna hurtowa 1
      • promoprice_special (float) - cena promocyjna hurtowa 2
    • stock (array) - tablica asocjacyjna z informacjami o magazynie wariantu podstawowego:
      • price (float) - cena wariantu podstawowego
      • price_wholesale (float) - cena hurtowa 1 wariantu podstawowego
      • price_special (float) - cena hurtowa 2 wariantu podstawowego
      • stock (float) - stan magazynowy
      • stock_relative (float) - różnica stanu magazynowego o jaką ma zostać zaktualizowa wartość w sklepie. Jeśli ten parametr występuje, parametr 'stock' nie jest brany pod uwagę podczas aktualizacji danych.
      • warn_level (float) - alarm magazynowy
      • sold (float) - ilość sprzedanego towaru
      • sold_relative (float) - różnica ilości sprzedanego towaru o jaką ma zostać zaktualizowa wartość w sklepie. Jeśli ten parametr występuje, parametr 'sold' nie jest brany pod uwagę podczas aktualizacji danych.
      • weight (float) - waga towaru
      • availability_id (int) - identyfikator dostępności wariantu
      • delivery_id (int]) - identyfikator czasu dostawy wariantu
      • gfx_id (int|null) - identyfikator zdjęcia produktu, które przedstawia dany wariant
      • calculation_unit_id (int|null) - identufikator jednostki miary dla przeliczania ceny jednostkowej
      • calculation_unit_ratio (float) - współczynnik przeliczania ceny jednostkowej
      • warehouses (array) - tablica asocjacyjna, której kluczami są identyfikatory magazynów, a wartością jest stan magazynowy w tym magazynie
    • translations (array) - tablica asocjacyjna z istniejącymi tłumaczeniami obiektu. Kluczami tablicy są nazwy lokalizacji, a wartościami tablice asocjacyjne informacji o tłumaczeniach:
      • pl_PL (array) - przykładowa tablica z informacjami o tłumaczeniu w lokalizacji pl_PL
        • name (string) - nazwa produktu
        • short_description (string) - krótki opis produktu
        • description (string) - opis produktu
        • active (int[0/1]) - aktywność produktu
        • seo_title (string) - tytuł wyświetlany w tagu <title>
        • seo_description (string) - opis wyświetlany w tagu meta description
        • seo_keywords (string) - opis wyświetlany w tagu meta keywords
        • seo_url (string) - względny adres produktu
        • order (int) - priorytet brany pod uwagę podczas sortowania listy produktów
        • main_page (int[0/1]) - czy produkt został wyróżniony na stronie głównej
        • main_page_order (int) - priorytet brany pod uwagę podczas sortowania listy produktów na stronie głównej
    • options (array) - tablica asocjacyjna, której wartościami są tablice asocjacyjne z danymi wariantu do aktualizacji:
      • stock_id (int) - identyfikator wariantu do aktualizacji
      • price (float) - cena lub różnica ceny w stosunku do ceny wariantu podstawowego - zawsze dodatnia
      • price_type (int) - typ obliczania ceny (**0** - brak ustalonej ceny, **1** - nowa cena wariantu, **2** - cena zostanie dodana do ceny podstawowej, **3** - cena zostanie odjęta od ceny podstawowej)
      • price_wholesale (float) - cena hurtowa 1 lub różnica ceny w stosunku do ceny hurtowej 1 wariantu podstawowego - zawsze dodatnia
      • price_wholesale_type (int) - typ obliczania ceny hurtowej 1 (**0** - brak ustalonej ceny, **1** - nowa cena wariantu, **2** - cena zostanie dodana do ceny podstawowej, **3** - cena zostanie odjęta od ceny podstawowej)
      • price_special (float) - cena hurtowa 1 lub różnica ceny w stosunku do ceny hurtowej 1 wariantu podstawowego - zawsze dodatnia
      • price_special_type (int) - typ obliczania ceny hurtowej 1 (**0** - brak ustalonej ceny, **1** - nowa cena wariantu, **2** - cena zostanie dodana do ceny podstawowej, **3** - cena zostanie odjęta od ceny podstawowej)
      • active (int[0/1]) - aktywność wariantu produktu
      • default (int[0/1]) - czy wariant produktu ma być domyślnie zaznaczonym wariantem przy wyborze
      • stock (float) - stan magazynowy
      • stock_relative (float) - różnica stanu magazynowego o jaką ma zostać zaktualizowa wartość w sklepie. Jeśli ten parametr występuje, parametr 'stock' nie jest brany pod uwagę podczas aktualizacji danych.
      • warn_level (float) - alarm magazynowy
      • sold (float) - ilość sprzedanego towaru
      • sold_relative (float) - różnica ilości sprzedanego towaru o jaką ma zostać zaktualizowa wartość w sklepie. Jeśli ten parametr występuje, parametr 'sold' nie jest brany pod uwagę podczas aktualizacji danych.
      • code (string) - kod wariantu
      • ean (string) - kod ean wariantu
      • calculation_unit_id (int|null) - identufikator jednostki miary dla przeliczania ceny jednostkowej
      • calculation_unit_ratio (float) - współczynnik przeliczania ceny jednostkowej
      • weight (float) - waga towaru
      • weight_type (int) - typ obliczania wagi (**0** - brak ustalonej wagi, **1** - nowa waga wariantu, **2** - waga zostanie dodana do wagi podstawowej, **3** - waga zostanie odjęta od wagi podstawowej)
      • availability_id (int) - identyfikator dostępności wariantu
      • delivery_id (int]) - identyfikator czasu dostawy wariantu
      • gfx_id (int) - identyfikator zdjęcia produktu, które przedstawia dany wariant
      • options (array) - tablica zawierająca informacje o zestawie cech, które przedstawia dany wariant. Kluczami tablicy są identyfikatory cech, a wartościami identyfikatory wariantów wybranej cechy
    • attributes (array) - tablica asocjacyjna
      • 0-9+) (int|string) - (wymagane|opcjonalne) - identyfikator atrybutu => wartosc:
        • 0|1) () -
        • ----> dla "pola tekstowego" (string) -
        • ----> dla "pola wyboru" (string) - nazwa pola wyboru
    • feeds_excludes (array) - tablica asocjacyjna, zawierająca infomracje o zmianach w wykluczeniach produktu z feedów xml, o strukturze:
      • "feed_id" (=>) - boolean, - true / false
      • -- "feed_id" => boolean, -
      • -- (...) -
      • -- "feed_id" => boolean -
  • force (boolean) - czy wymusić modyfikację obiektu mimo istniejącej blokady innego administratora

Wartość zwracana

  • status operacji: (int)

Rzucane wyjątki SoapFault

  • W przypadku braku dostępu do edytowania dla modułu 'produkty', wyrzucany jest wyjątek z komunikatem **Access denied**
  • W przypadku nie podania danych w formie tablicy, rzucany jest wyjątek

Uwagi

  • Istnieje możliwość wystąpienia wyjątku SoapFault w przypadku nieprawidłowego działania modułu aplikacji. (np poprzez modyfikację kodu aplikacji lub poprzez nieoczekiwany błąd po stronie serwera)

Przykład wywołania w PHP

<?php

/**
 * Logowanie do API
 * 
 * @param resource $c cURL resource handle
 * @param string $login Login użytkownika
 * @param string $password Hasło użytkownika
 * @return string Indentyfikatorr sesji użytkownika
 */
function login($c, $login, $password) {
    $params = Array(
        "method" => "login",
        "params" => Array($login, $password)
    );
    curl_setopt($c, CURLOPT_POSTFIELDS, "json=" . json_encode($params));
    $result = (Array) json_decode(curl_exec($c));
    if (isset($result['error'])) {
        return null;
    } else {
        return $result[0];
    }
}

/**
 * Pobranie błędów
 * 
 * @param resource $c cURL resource handle
 * @param string $session Indentyfikatorr sesji użytkownika
 */
function getError($c, $session){
	$params = Array(
        "method" => "call",
        "params" => Array($session, 'internals.validation.errors', null)
    );
    curl_setopt($c, CURLOPT_POSTFIELDS, "json=" . json_encode($params));
    $result = (Array) json_decode(curl_exec($c));
    return $result;
}

$c = curl_init();
curl_setopt($c, CURLOPT_URL, 'http://shop.example.com/webapi/json/');
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);

// zalogowanie użytkownika i pobranie identyfikatora sesji
$session = login($c, "api", "test");

if ($session != null) {
    $product = Array(        
        "producer_id" => null,
        "tax_id" => 1,
        "category_id" => 9,
        "unit_id" => 2,
        "other_price" => 9.50,
        "code" => md5(rand()),
        "pkwiu" => null,
        "stock" => Array(
            "price" => 8.99,
            "stock" => 10,
            "warn_level" => 2,
            "sold" => 0,
            "weight" => 1.2,
            "availability_id" => null,
            "delivery_id" => null,
            "gfx_id" => null,
        ),
        "translations" => Array(
            "pl_PL" => Array(
                "name" => "Aktualizacja produktu",
                "short_description" => "Aktualizacja produktu",
                "description" => "Aktualizacja produktu",
                "active" => 1,
                "seo_title" => "",
                "seo_description" => "",
                "seo_keywords" => "produkt, test, api",
                "order" => null,
                "main_page" => 0,
                "main_page_order" => null,
            ),
        ),
    );
    
    $params = Array(
        "method" => "call",
        "params" => Array($session, "product.save", Array(5, $product, true)) 
            // id produktu, dane, force
    );

    // zakodowanie parametrów dla metody POST
    $postParams = "json=" . json_encode($params);
    curl_setopt($c, CURLOPT_POSTFIELDS, $postParams);

    // dekodowanie rezultatu w formacie JSON do tablicy result
    $data = curl_exec($c);
    $result = (Array)json_decode($data);

    // sprawdzenie, czy wystąpił błąd
    if (isset($result['error'])) {
        echo "Wystąpił błąd: " . $result['error'] . ", kod: " . $result['code'];
    } else {
        if ($result[0] == -1) {
            echo "Podane dane są nieprawidłowe i nie spełniają wymagań walidacji";
            $err = getError($c, $session);
                foreach($err as $error){
					echo PHP_EOL.$error;
				}
        } else if ($result[0] == 0) {
            echo "Operacja się nie udała";
            $err = getError($c, $session);
                foreach($err as $error){
					echo PHP_EOL.$error;
				}
        } else if ($result[0] == 1) {
            echo "Produkt został zapisany";
        } else if ($result[0] == 2) {
            echo "Operacja się nie udała - obiekt jest zablokowany przez innego administratora";
        }
    }
} else {
    echo "Wystąpił błąd logowania";
}

curl_close($c);
?>