REST API

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

REST API - dokumentacja interfejsu























order.list.save

Modyfikuje listę zamówień

        array call(string $session_id, "order.list.save", array($list, $force = false))
    

Parametry wejściowe

  • list (array) - tablica, w której kluczem jest identyfikator zamówienia, a wartością tablica asocjacyjna z danymi zamówienia do aktualizacji:
    • 0 (-) - tablica asocjacyjna z danymi obiektu o strukturze:
      • email (int) - email użytkownika
      • billing_address (array ) -
        • company_name (string) - nazwa firmy
        • tax_id (string) - NIP
        • firstname (string) - imię
        • lastname (string) - nazwisko
        • street1 (string) - adres
        • street2 (string) - adres c.d
        • city (string|int) - miasto
        • postcode (string) - kod pocztowy
        • state (string|int) - województwo
        • country_code (string) - kod kraju - ISO 3166-2
        • country (string|int) - kraj
        • pesel (string) - PESEL - brane pod uwagę jeśli opcja Konfiguracja -> Sprzedaż -> Zakupy -> "Włącz obsługę numeru PESEL dla osób fizycznych" jest aktywna
        • phone (string) - numer telefonu
      • delivery_address (array ) -
        • company_name (string) - nazwa firmy
        • tax_id (string) - NIP
        • firstname (string) - imię
        • lastname (string) - nazwisko
        • street1 (string) - adres
        • street2 (string) - adres c.d
        • city (string|int) - miasto
        • postcode (string) - kod pocztowy
        • state (string|int) - województwo
        • country_code (string) - kod kraju - ISO 3166-2
        • country (string|int) - kraj
        • pesel (string) - PESEL - brane pod uwagę jeśli opcja Konfiguracja -> Sprzedaż -> Zakupy -> "Włącz obsługę numeru PESEL dla osób fizycznych" jest aktywna
        • phone (string) - numer telefonu
      • different_address () - czy inny adres ma być do wysyłki - domyślnie 1
      • status_id (int) - identyfikator statusu zamówienia
      • payment_id (int) - identyfikator metody płatności
      • shipping_id (int) - identyfikator metody dostawy
      • shipping_cost (double) - koszt dostawy
      • confirm (int[0|1]) - flaga potwierdzenia zamówienia
      • notes (string) - uwagi klienta
      • notes_priv (string) - prywatne uwagi administratora
      • notes_pub (string) - publiczne uwagi administratora
      • paid (double) - wpłacona kwota
      • origin (int) - (opcjonalne) pochodzenie zamówienia (0 - sklep; 1 - facebook; 2 - mobile; 3 - allegro; 4 - webapi (domyślne))
      • additional_fields () - pola dodatkowe dla zamówienia
        • 0-9+) (int|string) - identyfikator pola dodatkowego => wartosc:
  • force (boolean) - czy wymusić modyfikację obiektu mimo istniejącej blokady innego administratora

Wartość zwracana

  • status operacji: (array)

Uwagi

  • Wartości tablicy zwróconej przez tą metodę od pewnego klucza mogą przyjmować wartość **-2** - to oznacza, że skrypt po stronie serwera nie miał już czasu na wykonanie żądanych operacji na obiektach (poprzednie iteracje przekroczyły 80% całego dostępnego czasu na wykonanie skryptu). W celu zdobycia oczekiwanych informacji, należy ponowić zapytanie wysyłając tablicę pominiętych obiektów.

Rzucane wyjątki SoapFault

  • 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) {
    $order1 = Array(        
        "status_id" => 1    // zmiana statusu zamówienia
        // można dodać inne pola
    );
    
    $order2 = Array(        
        "status_id" => 1    // zmiana statusu zamówienia
        // można dodać inne pola
    );
    
    $orders = Array(
        2 => $order1, 
        3 => $order2
    );
    
    $params = Array(
        "method" => "call",
        "params" => Array($session, "order.list.save", Array($orders, true)) 
    );

    // 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 {
        foreach ($result as $r) {
            if ($r == -2) {
                echo "Operacja się nie udała - zabrakło czasu na zrealizowanie operacji<br>";
            } else if ($r == -1) {
                echo "Podane dane są nieprawidłowe i nie spełniają wymagań walidacji<br>";
                $err = getError($c, $session);
                foreach($err as $error){
					echo PHP_EOL.$error;
				}
            } else if ($r == 0) {
                echo "Operacja się nie udała<br>";
                $err = getError($c, $session);
                foreach($err as $error){
					echo PHP_EOL.$error;
				}
            } else if ($r == 1) {
                echo "Operacja się udała<br>";
            } else if ($r == 2) {
                echo "Operacja się nie udała - obiekt jest zablokowany przez innego administratora<br>";
            }
        }
    }
} else {
    echo "Wystąpił błąd logowania";
}

curl_close($c);
?>