Metoda producer.list
Pobiera listę producentów
array call(string $session_id, "producer.list", array($extended = false, $producers = ""))
Ta metoda wywoływana jest za pośrednictwem metody call
Parametry wejściowe
- extended (bool) - - czy zwrócić tylko listę identyfikatorów producentów (false), czy tablicę, której wartościami są tablice asocjacyjne informacji o żądanych obiektach (true)
- producers
Wartość zwracana
- (array) - jeśli parametr extended ustawiony jest na false, zwracana jest tablica z identyfikatorami dostępnych obiektów.
- (array) - jeśli parametr extended ustawiony jest na true, zwracana jest tablica (wektor) o długości tablicy podanej jako drugi parametr metody. Wektor składa się z tablic asocjacyjnych o strukturze:
- ['producer_id'] (int) - identyfikator producenta
- ['name'] (string) - nazwa producenta
- ['web'] (string) - adres url strony producenta
- ['gfx'] (string) - nazwa pliku loga producenta
- ['isdefault'] (int[0/1]) - czy obiekt jest wpisem domyślnie dodanym do aplikacji
Wartości tablicy zwróconej przez tą metodę od pewnego klucza mogą przyjmować wartość array('error' ⇒ -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.
W celu zapewnienia kompatybilności typów zwracanych obiektów kod błędu jest sygnalizowany przez tablicę asocjacyjną zawierającą klucz 'error'
Rzucane wyjątki SoapFault
- W przypadku próby pobrania informacji o nieistniejącej walucie, rzucany jest wyjątek z komunikatem Manufacturer identified as id: {$id} does not exist
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]; } } $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) { $params = Array( "method" => "call", "params" => Array($session, "producer.list", Array(true, true, true, true, true, Array(5, 6, 7) // id producentów ) ) ); // 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 $item) { $producer = (Array)$item; echo "Id: " . $producer['producer_id'] . "<br>"; echo "Nazwa: " . $producer['name'] . "<br>"; echo "<hr><br>"; } } } else { echo "Wystąpił błąd logowania"; } curl_close($c); ?>
Przykład wywołania w C#
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.IO; using System.Web.Script.Serialization; namespace producer.list { class Program { public static Object FromJson(string input) { JavaScriptSerializer serializer = new JavaScriptSerializer(); return serializer.Deserialize<Object>(input); } public static string ToJson(object input) { JavaScriptSerializer serializer = new JavaScriptSerializer(); return serializer.Serialize(input); } public static Object sendApiRequest(String method, Object[] methodParams) { WebRequest request = WebRequest.Create("http://shop.example.com/webapi/json/"); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; Stream dataStream = request.GetRequestStream(); Dictionary<String, Object> postParams = new Dictionary<String, Object>(); postParams.Add("method", method); postParams.Add("params", methodParams); string jsonEncodedParams = ToJson(postParams); System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); byte[] byteArray = encoding.GetBytes("json=" + jsonEncodedParams); dataStream.Write(byteArray, 0, byteArray.Length); dataStream.Close(); WebResponse webResponse = request.GetResponse(); Stream responseStream = webResponse.GetResponseStream(); StreamReader reader = new StreamReader(responseStream); string text = reader.ReadToEnd(); Object response = FromJson(text); return response; } public static String login(String login, String password) { Object[] methodParams = { login, password }; Object response = sendApiRequest("login", methodParams); String session = null; if (response is Dictionary<String, Object>) { Dictionary<String, Object> d = (Dictionary<String, Object>)response; if (d.ContainsKey("error")) { Console.WriteLine("Wystąpił błąd: {0}, kod: {1}", d["error"], d["code"]); } } else if (response is String) { session = (String)response; } return session; } static void Main(string[] args) { String session = login("api", "test"); if (session != null) { Object[] methodParams = { session, "producer.list", new Object[] { true, null } }; Object response = sendApiRequest("call", methodParams); if (response is Dictionary<String, Object>) { Dictionary<String, Object> d = (Dictionary<String, Object>)response; if (d.ContainsKey("error")) { Console.WriteLine("Wystąpił błąd: {0}, kod: {1}", d["error"], d["code"]); } } else if (response is Object[]) { foreach (Object obj in (Object[])response) { Dictionary<String, Object> d = (Dictionary<String, Object>)obj; Console.WriteLine("Id producenta: " + d["producer_id"]); Console.WriteLine("Nazwa producenta: " + d["name"]); // itp. Console.WriteLine(); } } } else { Console.WriteLine("Wystąpił błąd logowania"); } Console.ReadKey(); } } }