Metody - katalog, marketing
GetAttributes
Parametry wejściowe:
nazwa | obowiązkowy | typ | domyślnie | opis |
authenticate | tak | auth | - | struktura składająca się z pól 'login' i 'password' |
return_value | nie | bool | 0 | Czy zwracać wartości atrybutów |
timestamp | nie | string | - | różnicowanie względem czasu modyfikacji |
Przykładowe wywołanie (PHP):
$client = new SoapClient('http://demo.atomstore.pl/atom_api/wsdl/atom_api'); $authenticate = array('login' => 'admin', 'password' => 'admin'); $response = $client->GetAttributes($authenticate); header('Content-Type: application/xml'); echo $response;
Dane zwracane + komentarze:
<attributes> <attribute> <id>1</id> <!-- id atrybutu w AtomStore --> <type>3</type> <!-- typ atrybutu (1 = cecha, 2 = cecha grupowa, 3 = warianty) --> <visible>0</visible> <!-- wyświetlanie atrybutu od strony klienta (1 = tak, 0 = nie) --> <code>dimensione</code> <!-- kod atrybutu --> <modified>2022-02-28 10:39:50</modified> <name>Marka</name> <!-- nazwa atrybutu w języku domyślnym --> <name lang="eng">Size</name> <!-- nazwa atrybutu w języku innym niż domyślny (lang = kod języka) --> <values> <value> <v lang="pol"><![CDATA[czerwony]]></v> <v lang="eng"><![CDATA[red]]></v> </value> <value> <v lang="pol"><![CDATA[zielony]]></v> <v lang="eng"><![CDATA[green]]></v> </value> </attribute> </attributes>
Uwagi:
- Ze względów wydajnościowych wartości atrybutów zwracane są tylko w przypadku wskazania konkretnego atrybutu (id lub code).
GetCategories
Pobranie drzewa kategorii wraz z powiązaniami kategoria - rodzic.
Parametry wejściowe:
nazwa | obowiązkowy | typ | domyślnie | opis |
authenticate | tak | auth | - | struktura składająca się z pól 'login' i 'password' |
id_as_external_id | nie | int | 0 | przekazanie wartości 1 pozwala wymusić, aby identyfikatory kategorii w sklepie były zwrócone jako identyfikatory zewnętrzne, co ma zastosowanie w integracji między różnymi sklepami operującymi na platformie AtomStore |
store_id | nie | int | null | id sklepu (w ramach modułu Multistore), z którego mają zostać pobrane kategorie |
Przykładowe wywołanie (PHP):
$client = new SoapClient('http://demo.atomstore.pl/atom_api/wsdl/atom_api'); $authenticate = array('login' => 'admin', 'password' => 'admin'); $response = $client->GetCategories($authenticate); header('Content-Type: application/xml'); echo $response;
Dane zwracane + komentarze:
<categories> <category> <atom_id>5</atom_id> <!-- id kategorii w AtomStore --> <atom_pid></atom_pid> <!-- id kategorii - rodzica w AtomStore (dla kategorii głównych jest to pusty ciąg znaków) --> <id>kod_p_2</id> <!-- zewn. identyfikator kategorii (jeśli został nadany) --> <pid></pid> <!-- zewn. identyfikator kategorii - rodzica (obecny gdy określono <id>) --> <hidden>0</hidden> <!-- kategoria ukryta (1 = tak, 0 = nie) --> <name> <!-- nazwa kategorii --> <![CDATA[Literatura]]> </name> <description> <!-- opis kategorii --> <![CDATA[Literatura, książki, czasopisma]]> </description> <image_url>...</image_url> <!-- link do zdjęcia kategorii (jeśli zdjęcie istnieje) --> <seo_name> <!-- alternatywna nazwa dla znacznika h1 itd. --> <![CDATA[Najlepsza literatura]]> </seo_name> <seo_title> <!-- title strony kategorii (metatag dla SEO) --> <![CDATA[Najlepsza literatura]]> </seo_title> <seo_keywords> <!-- słowa kluczowe strony kategorii (dla SEO) --> <![CDATA[literatura,ksiazki]]> </seo_keywords> <seo_description> <!-- opis strony kategorii (metatag dla SEO) --> <![CDATA[Najlepsza literatura w najlepszych cenach]]> </seo_description> </category> <category> <atom_id>66</atom_id> <atom_pid>5</atom_pid> <id>kod_p_2_1</id> <pid>kod_p_2</pid> <hidden>0</hidden> <name> <![CDATA[Reportaż]]> </name> <!-- (...) --> </category> </categories>
Uwagi:
- metoda nie zwraca nazw / metatagów w językach innych niż domyślny,
- jeśli przekazano parametr id_as_external_id = 1, pola <atom_id> i <atom_pid> nie są zwracane, a id kategorii / rodzica w AtomStore wstawiane są do pól <id> i <pid>.
GetLockedQuantities
Pobranie stanów magazynowych zarezerwowanych w zamówieniach. Rezerwacje pomniejszają stan dostępny w sklepie.
Parametry wejściowe:
nazwa | obowiązkowy | typ | domyślnie | opis |
authenticate | tak | auth | - | struktura składająca się z pól 'login' i 'password' |
Przykładowe wywołanie (PHP):
$client = new SoapClient('http://demo.atomstore.pl/atom_api/wsdl/atom_api'); $authenticate = array('login' => 'admin', 'password' => 'admin'); $response = $client->GetLockedQuantities($authenticate); header('Content-Type: application/xml'); echo $response;
Dane zwracane + komentarze:
<products> <product> <product_id>1234</product_id> <!-- id produktu w AtomStore --> <combination_id>0</combination_id> <!-- id wariantu --> <code>HHG-0302</code> <!-- kod produktu lub wariantu --> <locked_quantity>4</locked_quantity> <!-- łączny stan zarezerwowany --> <orders> <!-- wyszczególnienie rezerwacji w zamówieniach --> <o id="445" qty="3"></o> <!-- id zamówienia oraz ilość w rezerwacji --> <o id="449" qty="1"></o> </orders> </product> </products>
GetOpinions
Pobranie opinii produktów
Parametry wejściowe:
nazwa | obowiązkowy | typ | domyślnie | opis |
authenticate | tak | auth | - | struktura składająca się z pól 'login' i 'password' |
timestamp | tak | datetime | false | data od kiedy pobierac opinie |
Przykładowe wywołanie (PHP):
$client = new SoapClient('http://demo.atomstore.pl/atom_api/wsdl/atom_api'); $authenticate = array('login' => 'admin', 'password' => 'admin'); $response = $client->GetOpinions($authenticate, '2020-02-02 02:02:02'); header('Content-Type: application/xml'); echo $response;
Dane zwracane + komentarze:
<opinions> <opinion> <code>aa8f3ifhf</code> <!-- kod produktu --> <username>Maciej A.</username> <!-- autor --> <email>maciej.a@atomstore.pl</email> <!-- adres email autora --> <content> <!-- treść opinii --> <![CDATA[ bardzo udany produkt ]]> <!-- zalecany komentarz CDATA --> </content> <note>5</note> <!-- ocena od 1 do 5 --> <status>1</status> <!-- status(aktywność) --> <benefits><![CDATA[ benefity ]]></benefits> <!-- benefity --> <defects><![CDATA[ urwana rączka ]]></defects> <!-- usterki --> <locale>pol</locale> <!-- jezyk --> <modified>2021-09-28 08:50:33</modified> <!-- data modyfikacji --> </opinion> <opinion> <code>12333ifhf</code> <!-- kod produktu --> <username>Maciej A.</username> <!-- autor --> <email>maciej.a@atomstore.pl</email> <!-- adres email autora --> <content> <!-- treść opinii --> <![CDATA[ bardzo udany produkt 2 ]]> <!-- zalecany komentarz CDATA --> </content> <note>5</note> <!-- ocena od 1 do 5 --> <status>1</status> <!-- status --> <benefits><![CDATA[ benefity 2 ]]></benefits> <!-- benefity --> <defects><![CDATA[ urwana rączka2 ]]></defects> <!-- usterki --> <locale>pol</locale> <!-- jezyk --> <modified>2021-09-28 08:50:33</modified> <!-- data modyfikacji --> </opinion> </opinions>
GetPrices
Pobranie cen produktów.
Parametry wejściowe:
nazwa | obowiązkowy | typ | domyślnie | opis |
authenticate | tak | auth | - | struktura składająca się z pól 'login' i 'password' |
return_specials | nie | boolean | false | czy dla produktów/wariantów w promocji ma być zwrócona cena podstawowa (false) czy promocyjna (true) |
offset | nie | int | 0 | pierwszy wymiar stronicowania - przesunięcie |
limit | nie | int | 0 | drugi wymiar stronicowania - ilość produktów, dla których zostanie zwrócona cena; dla wartości 0 zwrócone zostaną wszystkie ceny, bez stronicowania |
Przykładowe wywołanie (PHP):
$client = new SoapClient('http://demo.atomstore.pl/atom_api/wsdl/atom_api'); $authenticate = array('login' => 'admin', 'password' => 'admin'); $response = $client->GetPrices($authenticate, true, 0, 100); header('Content-Type: application/xml'); echo $response;
Dane zwracane + komentarze:
<prices> <price> <external_id><![CDATA[10384]]></external_id> <!-- zawiera id produktu w AtomStore lub "c_" + id wariantu --> <code><![CDATA[GGH-0302]]></code> <!-- kod produktu lub wariantu --> <price_netto>29.4168</price_netto> <!-- cena netto, precyzja do 4 miejsc po przecinku --> <vat>23</vat> <!-- stawka VAT --> <price_brutto>36.18</price_brutto> <!-- cena brutto, precyzja do 2 miejsc po przecinku --> <special>0</special> <!-- 0 dla ceny podstawowej, 1 dla ceny promocyjnej --> </price> <price> <external_id><![CDATA[11579]]></external_id> <code><![CDATA[M51611162-TAN]]></code> <price_netto>42.8522</price_netto> <vat>23</vat> <price_brutto>52.71</price_brutto> <special>1</special> <price_promo>42.8522</price_promo> <sale_name quantity="0">Gorąca jesień</sale_name> <!-- Informacja o nazwie wysyłki + ilość docelowa do jakiej obowiązuje wyprzedaż --> <date_from>2015-09-01</date_from> <!-- data rozpoczęcia wyprzedaży --> <date_to>2015-09-15</date_to> <!-- data zakończenia wyprzedaży --> <stores>1,3</stores> <!-- ID sklepów (multistore), oddzielone przecinkiem, dla których obowiązuje promocja --> </price> </prices>
Uwagi:
- metoda nie pozwala na pobranie cen z dodatkowych cenników zdefiniowanych w sklepie,
- jeden produkt z wariantami może być reprezentowany w zwracanych danych jako wiele pozycji <price>, każdy wariant z osobna, stronicowanie dotyczy natomiast produktów,
- jeśli przekazano parametr 'limit' > 0, dane zwracane są w kolejności zgodnej z identyfikatorami cen w bazie danych AtomStore, rosnąco; jeśli nie przekazano parametru 'limit' (lub przekazano 0), kolejność jest nieustalona.
GetProducers
Pobranie słownika producentów.
Parametry wejściowe:
nazwa | obowiązkowy | typ | domyślnie | opis |
authenticate | tak | auth | - | struktura składająca się z pól 'login' i 'password' |
offset | nie | int | 0 | pierwszy wymiar stronicowania - przesunięcie |
limit | nie | int | 10000 | drugi wymiar stronicowania - ilość zwracanych producentów |
Przykładowe wywołanie (PHP):
$client = new SoapClient('http://demo.atomstore.pl/atom_api/wsdl/atom_api'); $authenticate = array('login' => 'admin', 'password' => 'admin'); $response = $client->GetProducers($authenticate); header('Content-Type: application/xml'); echo $response;
Dane zwracane + komentarze:
<producers> <producer> <id>1</id> <!-- id producenta w AtomStore --> <name><![CDATA[ GUARDER ]]></name> <desc><![CDATA[ przykładowy opis ]]></desc> <!-- opis, może zawierać znaczniki HTML --> </producer> <producer> <id>2</id> <name><![CDATA[ PJ ]]></name> <desc><![CDATA[ ]]></desc> <logo>...</logo> <!-- znacznik obecny gdy wprowadzono logo producenta, tu zakodowane w base64 --> </producer> </producers>
Uwagi:
- dane zwracane są w kolejności zgodnej z identyfikatorami producentów w bazie danych AtomStore, rosnąco.
GetProductByCode
Pobranie identyfikatora lub pełnych danych produktu o zadanym kodzie.
Parametry wejściowe:
nazwa | obowiązkowy | typ | domyślnie | opis |
authenticate | tak | auth | - | struktura składająca się z pól 'login' i 'password' |
code | tak | string | - | kod szukanego produktu |
only_id | nie | int | 1 |
1 = zwrócony zostanie jedynie identyfikator towaru w AtomStore; 0 = zwrócone zostaną pełne dane produktu w formacie XML zgodnym z metodą GetProducts |
check_combinations | nie | int | 0 |
1 = dodatkowa próba odnalezienia produktu po kodzie konkretnego wariantu (np. rozmiaru); 0 = produkt odszukiwany tylko i wyłącznie wg kodu produktu |
Przykładowe wywołanie (PHP):
$client = new SoapClient('http://demo.atomstore.pl/atom_api/wsdl/atom_api'); $authenticate = array('login' => 'admin', 'password' => 'admin'); $response = $client->GetProductByCode($authenticate, 'kkk111'); echo $response;
Dane zwracane:
12001
Uwagi:
- w przypadku braku towaru o zadanym kodzie zwrócony zostanie komunikat NOT_FOUND,
- pełne dane produktu zwracane są analogicznie do wywołania metody GetProducts z parametrami all_images=1 (komplet zdjęć), combinations=1 (dane wariantów), get_attributes=1 (wszystkie atrybuty).
GetProductQuantities
Pobranie stanów w magazynie własnym i u dostawców, a także informacji o bieżącym statusie dostępności produktów.
Parametry wejściowe:
nazwa | obowiązkowy | typ | domyślnie | opis |
authenticate | tak | auth | - | struktura składająca się z pól 'login' i 'password' |
reservations | nie | boolean | false | czy zwracane stany mają być pomniejszone o ilości zarezerwowane w niezrealizowanych zamówieniach (niezalecane) |
modified | nie | string | 1970-01-01 | data ostatniej zmiany - parametr pozwalający na różnicowe pobieranie danych; zwracane są tylko stany produktów zmodyfikowanych z tą datą lub później; możliwe przekazanie daty i godziny, np. 2015-05-20 20:47:59 |
include_suppliers | nie | boolean | false | czy zwracane stany mają obejmować tylko magazyn własny (false), czy również ilości dostępne u dostawców (true) |
separate_suppliers | nie | string |
identyfikatory dostawców (oddzielone przecinkiem) - stany u wskazanych w ten sposób dostawców zostaną zwrócone jako osobne pozycje z oznaczeniem dostawcy; parametru tego należy używać jednocześnie z include_suppliers=false, aby ilości dostępne u dostawców nie były zwracane jednocześnie na dwa sposoby |
|
store_id | nie | string |
id sklepu (w ramach modułu Multistore), z którego mają zostać pobrane stany magazynowe (wiele sklepów - id oddzielone przecinkami); domyśnie zwracane są wszystkie kartoteki |
|
code | nie | string |
kod produktu lub wariantu dla którego mają zostać pobrane stany magazynowe |
Przykładowe wywołanie (PHP):
$client = new SoapClient('http://demo.atomstore.pl/atom_api/wsdl/atom_api'); $authenticate = array('login' => 'admin', 'password' => 'admin'); $response = $client->GetProductQuantities($authenticate, false, '2015-05-20 20:47:59'); header('Content-Type: application/xml'); echo $response;
Dane zwracane + komentarze:
<products> <product> <code>M51616151-BK</code> <!-- kod produktu --> <own>1</own> <!-- oznaczenie magazynu własnego --> <quantity>0</quantity> <!-- stan magazynowy --> <purchase_price>19.50</purchase_price> <!-- cena zakupu netto --> <auto_status>1</auto_status> <!-- wskazanie, iż produkt ma automatyczny status dostępności --> </product> <product> <code>M51616151-BK</code> <inventory_supplier>Dostawca X</inventory_supplier> <!-- nazwa dostawcy--> <quantity>432</quantity> <!-- stan u dostawcy --> <purchase_price>19.50</purchase_price> <!-- cena zakupu netto --> </product> <product> <code>M51616151-TAN</code> <own>1</own> <quantity>22</quantity> <purchase_price>19.50</purchase_price> <!-- cena zakupu netto --> <status_name> <![CDATA[ Dostępny wkrótce ]]> </status_name> <!-- nazwa ręcznego statusu dostępności, jeśli został przypisany do produktu --> </product> </products>
Uwagi:- warianty produktów stanowią osobne pozycje <product> w XML, z własnym kodem i własnym stanem magazynowym,
- nie są zwracane produkty będące zestawami, a także produkty i warianty z pustym kodem,
- kolejność zwracanych danych jest nieustalona.
GetProducts
Pobranie pełnych danych towarowych.
Parametry wejściowe:
nazwa | obowiązkowy | typ | domyślnie | opis |
authenticate | tak | auth | - | struktura składająca się z pól 'login' i 'password' |
product_id | nie | string | id produktu w AtomStore LUB zakres id w formie 'x-y' | |
all_images | nie | int | 0 |
0 - zwrócona zostanie informacja tylko o głównym zdjęciu produktu; |
image_size | nie | imagesize | null |
struktura składająca się z pól 'width' i 'height', pozwala narzucić maksymalne rozmiary dla zwracanych zdjęć produktu - pobierane dane będą zawierać odnośniki do gotowych miniatur w zadanym rozmiarze |
combinations | nie | int | 0 | 0 - dane zwracane bez informacji o wariantach produktu; 1 - dane zwracane wraz z informacjami o wariantach produktu |
get_attributes | nie | string | 0 | 0 - dane z wyłączeniem atrybutów opisujących poszczególne towary; 1 - dane wraz z atrybutami; 1[x,y] - dane wraz z atrybutami o identyfikatorach x i y (id widoczne w panelu sklepu i zwracane z metody GetAttributes) |
modified | nie | string | 1970-01-01 | data ostatniej zmiany - parametr pozwalający na różnicowe pobieranie danych; zwracane są tylko produkty zmodyfikowane z tą datą lub później; możliwe przekazanie daty i godziny, np. 2015-05-20 20:47:59 |
only_new_products | nie | int | 0 | 0 - zwrócone zostaną produkty dodane lub zmodyfikowane z datą z parametru 'modified' lub później; 1 - zwrócone zostaną tylko produkty nowe względem daty z parametru 'modified' |
limit | nie | int | 0 | ilość pobieranych kartotek; 0 - brak limitu |
price_list_id | nie | int | 0 | id cennika, z którego zostaną odczytane ceny; 0 - cennik domyślny |
verified | nie | string |
0 - tylko kartoteki niezweryfikowane (oznaczenie administracyjne, bez wpływu na dostępność i wyświetlanie towarów); 1 - tylko kartoteki zweryfikowane; '' - brak filtrowania po fladze weryfikacji |
|
phrase | nie | string |
fraza, po której zostaną wyszukane produkty |
|
store_id | nie | string |
id sklepu (w ramach modułu Multistore), z którego mają zostać pobrane towary (wiele sklepów - id oddzielone przecinkami); |
Przykładowe wywołanie (PHP):
$client = new SoapClient('http://demo.atomstore.pl/atom_api/wsdl/atom_api'); $authenticate = array('login' => 'admin', 'password' => 'admin'); $imagesize = array('width' => 250, 'height' => 150); $response = $client->GetProducts($authenticate, 15249, 1, $imagesize, 1, 1); header('Content-Type: application/xml'); echo $response;
Dane zwracane + komentarze:
<products> <product> <id>15249</id> <!-- id produktu w AtomStore --> <created>2015-05-20 21:59:33</created> <!-- data dodania --> <modified>2015-05-20 22:10:02</modified> <!-- data ostatniej modyfikacji --> <code>kod-zestawu-X</code> <!-- kod produktu --> <product_name> <!-- nazwa --> <![CDATA[[Zestaw] Kulki Guarder + Lufa precyzyjna o długości 510 mm]]> </product_name> <product_name lang="eng"> <!-- nazwa --> <![CDATA[[Zestaw] Kulki Guarder + precise gun of length 510 mm]]> </product_name> <product_description> <!-- opis, może zawierać znaczniki HTML --> <![CDATA[Kulki 0,30-1000 [Guarder]<br /><br />Firma GUARDER wyszła na przeciw oczekiwaniom graczy...]]> </product_description> <product_description lang="eng"> <!-- description, may have html tags --> <![CDATA[Kulki 0,30-1000 [Guarder]<br /><br />Firma GUARDER wyszła na przeciw oczekiwaniom graczy...]]> </product_description> <producer_name> <!-- nazwa producenta --> <![CDATA[ Guarder ]]> </producer_name> <category aid="33"> <!-- kategoria jako ścieżka, poziomy oddzielone ukośnikiem; aid = identyfikator kategorii w sklepie --> <![CDATA[ WYPOSAŻENIE TAKTYCZNE/AKCESORIA ]]> </category> <category aid="22"> <!-- dodatkowa kategoria (może być ich wiele) --> <![CDATA[ MAGAZYNKI ]]> </category> <attributes> <!-- atrybuty - ich nazwy i wartości --> <attribute> <name><![CDATA[ Rodzaj_akumulatora ]]></name> <value><![CDATA[ litowo-jonowy ]]></value> </attribute> <attribute> <name><![CDATA[ Okres_gwarancji ]]></name> <value><![CDATA[ 24 m-ce ]]></value> </attribute> <attribute> <name><![CDATA[ Materiał ]]></name> <value><![CDATA[ żelazo ]]></value> </attribute> <attribute> <name><![CDATA[ Kolor ]]></name> <value><![CDATA[ czarny ]]></value> </attribute> </attributes> <price_netto>52.1138</price_netto> <!-- cena netto --> <price_promo>32.0000</price_promo> <!-- cena promocyjna netto; znacznik obecny, jeśli promocja jest zdefiniowana --> <purchase_price>0.0000</purchase_price> <!-- cena zakupu netto; znacznik obecny, jeśli da się tę cenę ustalić --> <vat_rate>23</vat_rate> <!-- stawka podatkowa --> <quantity>0</quantity> <!-- stan w magazynie własnym --> <new>1</new> <!-- czy produkt jest oznaczony jako nowość (1 = tak, 0 = nie) --> <recommended>0</recommended> <!-- czy produkt jest oznaczony jako wyróżniony --> <bestseller>0</bestseller> <!-- czy produkt jest na liście bestsellerów --> <weight>0.6000</weight> <!-- waga (ciężar) produktu w kg --> <views>0</views> <!-- ilość odsłon karty produktu --> <purchases>0.0000</purchases> <!-- ilość zakupiona, w dowolnym okresie --> <active>1</active> <!-- czy produkt jest aktywny --> <only_gratis>0</only_gratis> <!-- czy produkt jest dostępny tylko jako gratis --> <only_suppliers>0</only_suppliers> <!-- czy dostępność u dostawców jest priorytetowa względem magazynu własnego --> <login_request>0</login_request> <!-- czy produkt jest dostępny tylko dla zalogowanych --> <suggested_price>0.0000</suggested_price> <!-- cena katalogowa (rynkowa) netto --> <loyalty_points_price>15000</loyalty_points_price> <!-- cena punktowa; pole obecne przy włączonym p. lojalnościowym --> <loyalty_points_addition>30</loyalty_points_addition> <!-- ilość punktów za zakup; pole obecne przy wł. p. lojalnościowym --> <unit>sztuka</unit> <!-- jednostka --> <item_unit>sztuka</item_unit> <!-- podjednostka --> <items_per_package>5</items_per_package> <!-- ilość sztuk w opakowaniu (na użytek rabatowania w B2B) --> <min_order>1.0000</min_order> <!-- minimum logistyczne --> <images> <!-- zdjęcia --> <image> <name> <!-- nazwa pliku --> <![CDATA[ 2_5392_0_3183.jpg ]]> </name> <title> <!-- tytuł zdjęcia (dla SEO) --> <![CDATA[[Zestaw] Kulki + Lufa]]> </title> <description> <!-- opis zdjęcia (dla SEO) --> <![CDATA[[Zestaw] Kulki + Lufa]]> </description> <url>http://demo.atomstore.pl/img/imagecache/150x100_product_media_2_5392_0_3183.jpg</url> <!-- URL zdjęcia --> <stores_excluded>2,4</stores_excluded> <!-- id wykluczonych sklepów (multistore) --> </image> <image> <name> <![CDATA[ 300x240_product_media_SRB_229_1.jpg ]]> </name> <title> <![CDATA[[Zestaw] Kulki + Lufa]]> </title> <description> <![CDATA[[Zestaw] Kulki + Lufa]]> </description> <url>http://demo.atomstore.pl/img/imagecache/150x120_product_media_SRB_229_1.jpg</url> <stores_excluded></stores_excluded> </image> </images> <tags> <!-- tagi oddzielone przecinkami --> <![CDATA[ tag1,tag2,test ]]> </tags> <tags lang="eng"> <!-- tags divided by commas --> <![CDATA[ tag1,tag2,test ]]> </tags> <seo_alias>zestaw-kulki-guarder-lufa-precyzyjna-o-dlugosci-510-mm</seo_alias> <!-- alias na rzecz przyjaznego linku --> <seo_title> <!-- title strony produktu (metatag dla SEO) --> <![CDATA[ test SEO title ]]> </seo_title> <seo_title lang="eng"> <![CDATA[ test SEO title ]]> </seo_title> <seo_keywords> <!-- słowa kluczowe strony produktu (dla SEO) --> <![CDATA[ test,SEO,keywords ]]> </seo_keywords> <seo_keywords lang="eng"> <![CDATA[ test,SEO,keywords ]]> </seo_keywords> <seo_description> <!-- opis strony produktu (metatag dla SEO) --> <![CDATA[ test SEO description ]]> </seo_description> <seo_description lang="eng"> <![CDATA[ test SEO description ]]> </seo_description> <update>0</update> <!-- znacznik obecny gdy przekazano parametr only_new_products = 1, patrz: SetProducts --> <url>http://demo.atomstore.pl/zestaw-kulki-guarder-lufa-precyzyjna-o-dlugosci-510-mm</url> <!-- adres strony produktu --> <package_content kitID="78"> <!-- znacznik obecny przy włączonym module zestawów, niepusty jeśli produkt jest zestawem --> <code quantity="1">BB-30(1000)</code> <!-- ilość i kod produktu składowego --> <code quantity="1">RAG-WE--017(L)</code> <!-- UWAGA: podprodukty bez kodu nie są zwracane --> </package_content> <related_products> <!-- produkty powiązane --> <related_product>pr-20180802-1056</related_product> <!-- kod produktu powiązanego --> <related_product>pr-20180802-1057</related_product> </related_products> <custom_weight>100</custom_weight> <!-- priorytet sortowania--> </product> <product> <code>pr-20180802-1052</code> <!-- (...) --> <service code="dodatkowa gwarancja">1</service> <!-- czy produkt jest usługą + opcjonalnie kod grupy usług --> <services></services> </product> <product> <code>pr-20180802-1107</code> <!-- (...) --> <service>0</service> <services> <!-- lista usług przypisanych do produktu --> <code><![CDATA[pr-20180802-1111]]></code> <!-- kod produktu będącego usługą --> <code><![CDATA[pr-20180802-1112]]></code> </services> </product> </products>
Uwagi:
- dla produktów przeniesionych do kosza w danych znajdzie się dodatkowo znacznik <deleted>1</deleted> (patrz: SetProducts); UWAGA: towary normalnie usunięte nie figurują w bazie danych AtomStore, więc nie zostaną zwrócone z GetProducts,
- strukutura danych (wewnątrz <product>) dla produktów z wariantami, gdy przekazano parametr 'combinations' = 1:
<combinations> <combination> <id>123</id> <!-- id wariantu w AtomStore --> <code>kod_wariantu_X</code> <!-- kod wariantu --> <quantity>0</quantity> <!-- stan magazynowy --> <price_modifier>+</price_modifier> <!-- modyfikator ceny (+, -, =, %) --> <price_value>0.00</price_value> <!-- wartość modyfikacji ceny (netto) --> <purchase_price>0.00</purchase_price> <!-- cena zakupu (netto) --> <suggested_price>0.00</suggested_price> <!-- cena katalogowa (netto) --> <attributes> <!-- atrybuty do wyboru --> <attribute> <name><![CDATA[Rozmiar]]></name> <value><![CDATA[L]]></value> </attribute> <attribute> <name><![CDATA[Kolor]]></name> <value><![CDATA[zielony]]></value> </attribute> </attributes> <params> <!-- dodatkowe atrybuty opisujące wariant --> <param> <name><![CDATA[EAN]]></name> <value><![CDATA[2201808021706]]></value> </param> </params> </combination> <combination> <id>124</id> <code>kod_wariantu_Y</code> <quantity>0</quantity> <price_modifier>=</price_modifier> <price_value>159.99</price_value> <attributes> <attribute> <name><![CDATA[Rozmiar]]></name> <value><![CDATA[XXL]]></value> </attribute> </attributes> </combination> </combinations>
- znaczniki występujące w danych warunkowo:
categories | występuje tyle razy, w ilu kategoriach jest produkt, w szczególności 0 |
attributes | występuje tylko jeśli przekazano parametr 'get_attributes' o wartości innej niz 0 |
price_promo | występuje, gdy produkt jest obecnie w promocji |
purchase_price | występuje, gdy da się ustalić cenę zakupu |
only_suppliers | nie występuje, jeśli moduł "Dostawcy" jest wyłączony |
loyalty_points_price | nie występuje, jeśli moduł "Program lojalnościowy" jest wyłączony |
loyalty_points_addition | j.w. |
images | nie występuje, jeśli produkt nie ma przypisanego żadnego zdjęcia |
combinations | występuje dla produktów z wariantami, jeśli przekazano parametr 'combinations' = 1 |
deleted | występuje jedynie z wartością 1, jeśli produkt został przeniesiony do kosza |
update | występuje jedynie z wartością 0, jeśli przekazano parametr 'only_new_products' = 1 (patrz: SetProducts) |
package_content | nie występuje, jeśli moduł "Zestawy" jest wyłączony |
service | tylko przy włączonym module "Usługi" |
services | j.w. |
custom_weight | występuje, jeśli priorytety sortowania są stosowane (konfiguracja AtomStore) |
- zwracane dane są sortowane w ustalony sposób tylko jeśli przekazano parametr 'limit' > 0, wówczas produkty są uporządkowane wg daty ostatniej modyfikacji lub wg daty dodania (jeśli przekazano parametr 'only_new_products' = 1), rosnąco,
- różnicowanie danych: pobieranie wszystkich produktów w 1 zapytaniu jest niewskazane; preferowaną metodą podziału jest wykorzystanie parametru 'modified' i 'limit'; po stronie klienta SOAP należy wyodrębnić z pierwszego pakietu maksymalną wartość pola <modified> (lub <created>, jeśli przekazano parametr 'only_new_products' = 1), a następnie przekazać tę datę do kolejnego wywołania GetProducts, itd.; alternatywnie skorzystać można z metody GetProductsIdsRange i parametru 'product_id', bez użycia parametru 'limit' (pakiety wydzielone w ten sposób mogą zawierać różną ilość towarów, jeśli w podawanych zakresach id niektóre towary były usuwane).
GetProductsIdsRange
Pobranie zakresu id produktów w bazie AtomStore. Zwrócony zakres można dowolnie podzielić, a następnie przekazywać kolejne fragmenty w parametrze 'product_id' do metody GetProducts celem zmniejszenia ilości danych pobieranych w jednym zapytaniu. Jest to jeden z 2 sposobów porcjowania danych z metody GetProducts, obydwa zostały objaśnione w opisie metody GetProducts.
Parametry wejściowe:
nazwa | obowiązkowy | typ | domyślnie | opis |
authenticate | tak | auth | - | struktura składająca się z pól 'login' i 'password' |
Przykładowe wywołanie (PHP):
$client = new SoapClient('http://demo.atomstore.pl/atom_api/wsdl/atom_api'); $authenticate = array('login' => 'admin', 'password' => 'admin'); $response = $client->GetProductsIdsRange($authenticate); echo $response;
Dane zwracane:
8496-15247
GetSpecials
Pobranie szczegółowych informacji o promocjach.
Parametry wejściowe:
nazwa | obowiązkowy | typ | domyślnie | opis |
authenticate | tak | auth | - | struktura składająca się z pól 'login' i 'password' |
return_inactive | nie | boolean | false | czy mają zostać zwrócone promocje nieaktywne / nieaktualne |
modified | nie | string | 0000-00-00 00:00:00 | zwrócenie promocji dodanych/zmienionych z tą datą lub później |
store_id | nie | string | pobranie tylko promocji obowiązujących w zadanym sklepie (multistore); możliwe jest podanie wielu identyfikatorów poprzez oddzielenie ich znakiem | |
Przykładowe wywołanie (PHP):
$client = new SoapClient('http://demo.atomstore.pl/atom_api/wsdl/atom_api'); $authenticate = array('login' => 'admin', 'password' => 'admin'); $response = $client->GetSpecials($authenticate); header('Content-Type: application/xml'); echo $response;
Dane zwracane + komentarze:
<specials> <special> <product_id>1234</product_id> <!-- id produktu w AtomStore --> <code><![CDATA[HHG-0302]]></code> <!-- kod produktu lub wariantu --> <price>8.1220</price> <!-- cena promocyjna netto --> <percentage>50.00</percentage> <!-- procent promocji (tylko dla promocji procentowych) --> <happy_hours>0</happy_hours> <!-- promocja typu "happy hours" (1 = tak, 0 = nie) --> <date_from>2018-12-31 23:59:59</date_from> <!-- data/godzina rozpoczęcia (może być pusta) --> <date_to></date_to> <!-- data/godzina zakończenia (może być pusta) --> <mainpage>1</mainpage> <!-- promocja oznaczona jako "strona główna" (1 = tak, 0 = nie) --> <name><![CDATA[noworoczne okazje]]></name> <!-- nazwa promocji (może być pusta) --> <active>0</active> <!-- promocja aktywna i aktualna (1 = tak, 0 = nie) --> <modified>2018-12-15 12:20:20</modified> <!-- data ostatniej modyfikacji --> <sale_id>123</sale_id> <!-- id wyprzedazy --> <sale_name quantity_to="1">Gorąca jesień</sale_name> <!-- Informacja o nazwie wysyłki + ilość docelowa do jakiej obowiązuje wyprzedaż --> </special> </specials>
Uwagi:
- dla promocji procentowej wartość kwotowa w polu <price> pozostaje pusta lub wyliczona - zależnie od konfiguracji Atom API,
- dla promocji typu "happy hours" w polach daty rozpoczęcia i zakończenia widnieją jedynie godziny,
- B2B: promocje indywidualne nie są zwracane,
- dane zwracane są w kolejności zgodnej z datami rozpoczęcia promocji, rosnąco.
SetCategories
Zapis kategorii, bez przypisań produktów. Do poprawnej integracji katalogu nie jest konieczne wykorzystywanie tej metody, ponieważ w danych produktu wysyłanych do SetProducts można wskazać ścieżkę kategorii słownie (poziomy oddzielone ukośnikami). Jest to zalecany tryb integracji, natomiast nie ma wówczas możliwości edytowania nazw kategorii (ta sama kategoria wysłana ze zmienioną nazwą spowoduje utworzenie nowej, zbędnej instancji). Można więc zarządzać drzewem przez metodę SetCategories, w ten sposób nadać kategoriom własne identyfikatory i z ich zachowaniem zmieniać nazwy czy "rodziców" w drzewie. Przypisanie produktu do kategorii wymaga wówczas wskazania jej identyfikatora (patrz: SetProducts).
Parametry wejściowe:
nazwa | obowiązkowy | typ | domyślnie | opis |
authenticate | tak | auth | - | struktura składająca się z pól 'login' i 'password' |
message | tak | message | - | struktura zawierająca pole 'xml', które powinno zawierać ciąg znaków w formacie XML; opis formatu poniżej |
Format XML + komentarze:
<categories> <category> <id>kod_p_1</id> <!-- zewnętrzny identyfikator kategorii --> <name>Muzyka</name> <!-- nazwa kategorii --> <pid></pid> <!-- kategorie główne nie mają wskazanej kategorii nadrzędnej ("rodzica") --> </category> <category> <id>kod_p_2</id> <name>Książki</name> <pid></pid> </category> <category> <id>kod_m_1</id> <name>Klasyka</name> <pid>kod_p_1</pid> <!-- zewnętrzny identyfikator kategorii nadrzędnej ("rodzica") --> </category> <category> <id>kod_m_2</id> <name>Pop</name> <name lang="eng">Britpop</name> <!-- tłumaczenie nazwy kategorii --> <pid>kod_p_1</pid> <hidden>0</hidden> <!-- kategoria ukryta (1 = tak, 0 = nie) --> <image_base64>...</image_base64> <!-- zdjęcie zakodowane w base64 --> <image_url>...</image_url> <!-- link do zdjęcia --> <description>Muzyka popowa</description> <!-- opis --> <seo_name> <!-- alternatywna nazwa dla znacznika h1 itd. --> <![CDATA[ Muzyka pop ]]> </seo_name> <seo_title> <!-- title strony kategorii (metatag dla SEO) --> <![CDATA[ test SEO title ]]> </seo_title> <seo_keywords> <!-- słowa kluczowe strony kategorii (dla SEO) --> <![CDATA[ test,SEO,keywords ]]> </seo_keywords> <seo_description> <!-- opis strony kategorii (metatag dla SEO) --> <![CDATA[ test SEO description ]]> </seo_description> </category> </categories>
Przykładowe wywołanie (PHP):
$client = new SoapClient('http://demo.atomstore.pl/atom_api/wsdl/atom_api'); $authenticate = array('login' => 'admin', 'password' => 'admin'); $xml = '<categories><category><id>kod_kategorii</id><name>Dla dzieci</name><pid>kod_rodzica</pid></category></categories>'; $message = array('xml' => $xml); $response = $client->SetCategories($authenticate, $message); echo $response;
Dane zwracane:
OK
Uwagi:- API posiada zabezpieczenie przed wysłaniem w pierwszej kolejności podkategorii, później kategorii nadrzędnej, jednak sugerowane jest zachowanie logicznego porządku: najpierw dane kategorii nadrzędnych, potem kategorii wewnątrz itd.,
- aktualnie metoda nie pozwala na usuwanie kategorii ani na zmianę ich kolejności,
- nie ma ograniczeń odnośnie ilości poziomów zagnieżdżenia.
SetCombinations
Łączenie kilku niezależnych produktów w jednen produkt z wariantami. Kartoteka odpowiadająca pierwszemu wskazanemu kodowi zostaje kartoteką z wariantami, a kolejne stają się jej wariantami, zachowując swój kod, stan magazynowy i cenę. Zalecanym sposobem tworzenia kartotek z wariantami jest jednak wysyłanie pola <combinations> bezpośrednio w danych docelowej kartoteki (patrz: SetProducts).
Parametry wejściowe:
nazwa | obowiązkowy | typ | domyślnie | opis |
authenticate | tak | auth | - | struktura składająca się z pól 'login' i 'password' |
message | tak | message | - | struktura zawierająca pole 'xml', które powinno zawierać ciąg znaków w formacie XML; opis formatu poniżej |
Format XML + komentarze:
<combinations> <combination> <code>kod_1</code> <!-- ten produkt stanie się kartoteką z wariantami --> <code>kod_2</code> <!-- produkt, który stanie się wariantem produktu "kod_1" --> <code>kod_3</code> <!-- produkt, który stanie się wariantem produktu "kod_1" --> </combination> </combinations>
Przykładowe wywołanie (PHP):
$client = new SoapClient('http://demo.atomstore.pl/atom_api/wsdl/atom_api'); $authenticate = array('login' => 'admin', 'password' => 'admin'); $xml = '<combinations><combination><code>x</code><code>y</code></combination></combinations>'; $message = array('xml' => $xml); $response = $client->SetCombinations($authenticate, $message); echo $response;
Dane zwracane:
OK
Uwagi:
- jeśli wśród wskazanych kartotek któraś jest już kartoteką z wariantami, będzie traktowana priorytetowo, czyli to do niej dołączane będą kolejne warianty,
- produkty łączone powinny być wcześniej wysłane do metody SetProducts wraz z atrybutami typu wariantowego, np. Rozmiar=XXL (w strukturze <attributes>, patrz: SetProducts); typ atrybutu ustawić należy w panelu administracyjnym sklepu → KATALOG → ATRYBUTY,
- dziedziczenie ceny do danych powstających wariantów jest opcjonalne - zależne od ustawień API.
SetGratis
Dodawanie promocji, gratisów, zniżek.
Parametry wejściowe:
nazwa | obowiązkowy | typ | domyślnie | opis |
authenticate | tak | auth | - | struktura składająca się z pól 'login' i 'password' |
message | tak | message | - | struktura zawierająca pole 'xml', które powinno zawierać ciąg znaków w formacie XML; opis formatu poniżej |
Format XML + komentarze:
<promotions> <promotion type="quantity_discount"> <!-- zniżki ilościowe--> <main_items> <akronim>123</akronim> <!-- kody produktow --> <akronim>567</akronim> </main_items> <discounts> <discount from="5">20</discount> <!-- próg ilościowy i procent zniżki --> <discount from="7">50</discount> </discounts> </promotion> <promotion type="amount_gratis"> <!-- gratis od kwoty --> <gratis_items> <akronim from="100" quantity="1">123</akronim> <!-- wymagana kwota, ilość gratis, kod produktu--> <akronim from="200" quantity="2">567</akronim> </gratis_items> </promotion> <promotion type="products_gratis" from="1" multiplication="yes"> <!-- gratis za zakup produktu--> <!-- from=wymagana liczba sztuk, multiplication=czy korzyść ma być powtarzana--> <main_items> <!-- produkty bazowe--> <akronim>123</akronim> <akronim>567</akronim> </main_items> <gratis_items> <!-- produkty gratis--> <akronim quantity="1">123</akronim> <akronim quantity="2">567</akronim> </gratis_items> </promotion> <promotion type="common"> <!-- promocje --> <main_items> <akronim price="12.12">123</akronim> <!-- kod produktu i cena promocyjna --> <akronim percentDiscount="30">55</akronim> <!-- kod produktu i procent promocji --> </main_items> </promotion> </promotions>
Przykładowe wywołanie (PHP):
$client = new SoapClient('http://demo.atomstore.pl/atom_api/wsdl/atom_api'); $authenticate = array('login' => 'admin', 'password' => 'admin'); $xml = '<promotions>'; $xml .= '<promotion type="common">'; $xml .= '<main_items> <akronim price="12.12">123</akronim> <akronim percentDiscount="30">55</akronim> </main_items>'; $xml .= '</promotion>'; $xml .= '</promotions>'; $message = array('xml' => $xml); $response = $client->SetGratis($authenticate, $message); echo $response;
Dane zwracane:
OK
Uwagi:
- metoda usuwa wszystkie nieprzekazane promocje
SetOpenPackage
Dodawanie i aktualizacja zestawów otwartych.
Parametry wejściowe:
nazwa | obowiązkowy | typ | domyślnie | opis |
authenticate | tak | auth | - | struktura składająca się z pól 'login' i 'password' |
message | tak | message | - | struktura zawierająca pole 'xml', które powinno zawierać ciąg znaków w formacie XML; opis formatu poniżej |
Format XML + komentarze:
<products> <product> <code>TB-CS074</code> <!-- kod towaru, który ma się stać zestawem otwartym --> <external_id>RR34BHCSPOVC</external_id> <!-- alternatywna identyfikacja towaru --> <product_name><![CDATA[product name]]></product_name> <!-- aktualizacja nazwy produktu --> <product_description><![CDATA[product description]]></product_description> <!-- aktualizacja opisu produktu --> <package_content> <!-- elementy zestawu --> <code group_id="123" group_name="grupa 1" group_min_choices="1" group_max_choices="2" quantity="2">TB-CS075</code> <code group_id="22" group_name="grupa 2" group_min_choices="1" group_max_choices="3" quantity="1">TB-CS076</code> <!-- group_id="123" / group_name="grupa 1" → ID lub nazwa grupy --> <!-- quantity - ilość sztuk produktu, który jest do wyboru --> <!-- group_min_choices="1" group_max_choices="2" ile produktów z danej grupy mozna wybrać --> </package_content> </product> </products>
Przykładowe wywołanie (PHP):
$client = new SoapClient('http://demo.atomstore.pl/atom_api/wsdl/atom_api'); $authenticate = array('login' => 'admin', 'password' => 'admin'); $xml = '<products>'; $xml .= '<product>'; $xml .= ' <code>TB-CS074</code> <package_content> <code group_id="123" group_name="abc" group_min_choices="1" group_max_choices="2" quantity="2">TB-CS075</code> </package_content> '; $xml .= '</product>'; $xml .= '</products>'; $message = array('xml' => $xml); $response = $client->SetOpenPackage($authenticate, $message); echo $response;
Dane zwracane:
OK
Uwagi:
- Produkt, który ma się stać zestawem, musi już istnieć
- Grupy wyboru muszą być wczesniej zdefiniowane w panelu lub metodą SetOpenPackageGroup
SetOpenPackageGroups
Definiowanie grup wyboru dla zestawów otwartych.
Parametry wejściowe:
nazwa | obowiązkowy | typ | domyślnie | opis |
authenticate | tak | auth | - | struktura składająca się z pól 'login' i 'password' |
message | tak | message | - | struktura zawierająca pole 'xml', które powinno zawierać ciąg znaków w formacie XML; opis formatu poniżej |
Format XML + komentarze:
<groups> <group> <id>123</id> <!-- id grupy --> <name>Wybierz krawat</name> <!-- nazwa grupy --> <min>2</min> <!-- minimalna liczba produktów do wyboru --> <max>2</max> <!-- maksymala liczba produktów do wyboru --> <max_quantity>123</max_quantity> <!-- wymagana ilość sztuk --> <max_quantity_type>equal</max_quantity_type> <!-- wymagana ilość sztuk, equal=dokładnie | max=maksymalnie --> <include_discount>1</include_discount> <!-- czy produkty z tej grupy podlegają zniżce procentowej zestawu --> </group> </groups>
Przykładowe wywołanie (PHP):
$client = new SoapClient('http://demo.atomstore.pl/atom_api/wsdl/atom_api'); $authenticate = array('login' => 'admin', 'password' => 'admin'); $xml = '<groups>'; $xml .= '<group>'; $xml .= ' <id>123</id> <name>Wybierz krawat</name> <max_quantity>123</max_quantity> <max_quantity_type>equal</max_quantity_type> <include_discount>1</include_discount> <min>2</min> <max>2</max> '; $xml .= '</group>'; $xml .= '</groups>'; $message = array('xml' => $xml); $response = $client->SetOpenPackageGroups($authenticate, $message); echo $response;
Dane zwracane:
<groups> <group> <id>123</id> <name>Wybierz krawat</name> </group> </groups>
Uwagi:
- Dodając nową grupę, należy przekazać jej dane bez pola <id>, a na potrzeby kolejnych wywołań zachować <id>, które zostanie zwrócone
SetOpinions
Dodawanie opinii o produktach (recenzji).
Parametry wejściowe:
nazwa | obowiązkowy | typ | domyślnie | opis |
authenticate | tak | auth | - | struktura składająca się z pól 'login' i 'password' |
message | tak | message | - | struktura zawierająca pole 'xml', które powinno zawierać ciąg znaków w formacie XML; opis formatu poniżej |
Format XML + komentarze:
<opinions> <opinion> <code>aa8f3ifhf</code> <!-- kod produktu --> <username>Maciej A.</username> <!-- autor (wymagane) --> <email>maciej.a@atomstore.pl</email> <!-- adres email autora (wymagany) --> <content> <!-- treść opinii --> <![CDATA[ bardzo udany produkt ]]> <!-- zalecany komentarz CDATA (wymagany)--> </content> <note>5</note> <!-- ocena od 1 do 5 --> <status>1</status> <!-- status(aktywność) --> <benefits><![CDATA[ benefity ]]></benefits> <!-- benefity --> <defects><![CDATA[ urwana rączka ]]></defects> <!-- usterki --> <locale>pol</locale> <!-- jezyk --> </opinion> <opinion> <external_id>jh3829f</external_id> <!-- identyfikator zewnętrzny - alternatywna identyfikacja towaru --> <username>maciek</username> <email>maciej@klex.pl</email> <content> <![CDATA[ ten kolor na zdjęciu wyglądał inaczej ]]> </content> <note>3</note> <locale>eng</locale> <!-- jezyk --> </opinion> </opinions>
Przykładowe wywołanie (PHP):
$client = new SoapClient('http://demo.atomstore.pl/atom_api/wsdl/atom_api'); $authenticate = array('login' => 'admin', 'password' => 'admin'); $xml = '<opinions>'; $xml .= '<opinion>'; $xml .= '<code>kod_produktu_X</code><username>Maciej A.</username><email>maciej.a@atomstore.pl</email>'; $xml .= '<note>5</note><content>Rewelacja!</content>'; $xml .= '</opinion>'; $xml .= '</opinions>'; $message = array('xml' => $xml); $response = $client->SetOpinions($authenticate, $message); echo $response;
Dane zwracane:
OK
Uwagi:- metoda nie pozwala na aktualizowanie istniejących recenzji (nie są identyfikowane wg produktu i osoby recenzującej),
- przesłane opinie zapisywane są w sklepie jako zatwierdzone.
SetPrices
Zapis cen podstawowych, promocyjnych (w szczególności wyprzedaży) oraz cen w dodatkowych cennikach zdefiniowanych w sklepie. Zapis zarówno na rzecz produktów, jak i na rzecz wariantów zidentyfikowanych podanym kodem.
Parametry wejściowe:
nazwa | obowiązkowy | typ | domyślnie | opis |
authenticate | tak | auth | - | struktura składająca się z pól 'login' i 'password' |
message | tak | message | - | struktura zawierająca pole 'xml', które powinno zawierać ciąg znaków w formacie XML; opis formatu poniżej |
Format XML, różne konfiguracje + komentarze:
<prices> <price> <code>kkk_1</code> <!-- kod produktu lub wariantu (patrz: "Uwagi" poniżej) --> <price_netto>12.1234</price_netto> <!-- cena netto, precyzja do 4 miejsc po przecinku --> </price> <price> <code>kkk_2</code> <price_brutto>99.99</price_brutto> <!-- można przekazać cenę brutto, 2 miejsca po przecinku --> <vat_rate>23</vat_rate> <!-- przy przekazywaniu ceny brutto zalecana jest również stawka VAT --> </price> <price> <code>kkk_3</code> <price_netto>12.1234</price_netto> <vat_rate>23</vat_rate> <!-- stawkę VAT można przekazać do zapisu zawsze, nie tylko przy cenach brutto --> <purchase_price>80,50</purchase_price> <!-- opcjonalny zapis ceny zakupu (netto) --> <suggested_price>115,00</suggested_price> <!-- opcjonalny zapis ceny katalogowej (netto) --> </price> <price> <code>kkk_4</code> <price_netto>7.1234</price_netto> <price_list_id>2</price_list_id> <!-- opcjonalne wskazanie id cennika, do którego ma być zapisana cena; id cennika można odczytac w panelu → SPRZEDAŻ → CENNIKI; niezidentyfikowany cennik NIE zostanie utworzony --> </price> <price> <code>kkk_5</code> <price_promo>10.1234</price_promo> <!-- cena promocyjna netto --> <name><![CDATA[wyjątkowe okazje]]></name> <!-- nazwa promocji, opcjonalnie --> </price> <price> <code>kkk_6</code> <price_promo_brutto>11.00</price_promo_brutto> <!-- można przekazać cenę promocyjną brutto --> <vat_rate>23</vat_rate> <!-- zapis ceny promocyjnej brutto wymaga podania stawki VAT --> </price> <price> <code>kkk_7</code> <price_promo>10.1234</price_promo> <mainpage>1</mainpage> <!-- promocję można oznaczyć jako "Strona główna: tak" --> <date_from>2015-09-01</date_from> <!-- data rozpoczęcia promocji, opcjonalnie --> <date_to>2015-09-15</date_to> <!-- data zakończenia promocji, opcjonalnie --> </price> <price> <code>kkk_8</code> <price_promo>0</price_promo> <!-- zerowa cena promocyjna kasuje promocję --> </price> <price> <code>kkk_9</code> <price_promo_brutto>0</price_promo_brutto> <!-- j.w. --> </price> <price> <code>kkk_10</code> <price_promo>5.4321</price_promo> <stores>1,3</stores><!-- ID sklepów (multistore), oddzielone przecinkiem, dla których ma obowiązywać promocja (opcjonalnie) --> <sale_name quantity_to="0">Gorąca jesień</sale_name> <!-- przypisanie produktu do wyprzedaży o wskazanej nazwie + ilość docelowa --> <date_from>2015-09-01</date_from> <!-- data rozpoczęcia wyprzedaży, opcjonalnie --> <date_to>2015-09-15</date_to> <!-- data zakończenia wyprzedaży, opcjonalnie --> </price> <price> <code>kkk_11</code> <price_promo>0</price_promo> <!-- zerowa cena promocyjna... --> <sale_name></sale_name> <!-- ...i znacznik "sale_name" - usunięcie produktu z wyprzedaży --> </price> <price> <external_id>vsh38v39h</external_id> <!-- identyfikator zewnętrzny - alternatywna identyfikacja towaru --> <price_netto>99.99</price_netto> </price> </prices>
Przykładowe wywołanie (PHP):
$client = new SoapClient('http://demo.atomstore.pl/atom_api/wsdl/atom_api'); $authenticate = array('login' => 'admin', 'password' => 'admin'); $xml = '<prices><price><code>XYZ</code><price_netto>100.1234</price_netto></price></prices>'; $message = array('xml' => $xml); $response = $client->SetPrices($authenticate, $message); echo $response;
Dane zwracane:
OK
Uwagi:
- jeśli podany kod (<code>) zostaje odnaleziony w wariantach, cena zapisywana jest dla wariantu (wraz z modyfikatorem '='), przy czym można to wyłączyć w ustawieniach API (np. jeśli wszystkie warianty mają dziedziczyć cenę z produktu, do którego są przypisane),
- jeśli podany kod wpisany jest zarówno dla któregoś wariantu, jak i dla produktu, to zależnie od ustawień API cena może być zapisana dla wariantu i produktu / tylko dla wariantu / tylko dla produktu,
- jeśli wysyłana jest cena promocyjna, system sprawdza, czy na dany produkt (lub wariant) jest obecnie zdefiniowana promocja; jeśli tak, promocja jest nadpisywana, jeśli nie, jest dodawana,
- produkt nie może być jednocześnie w promocji i na wyprzedaży, zatem przypisanie do wyprzedaży usuwa standardową promocję i odwrotnie,
- daty <date_from> i <date_to> podane dla wyprzedaży zostaną zastosowane do wszystkich produktów objętych tą samą wyprzedażą, jeśli natomiast nie zostały podane, będą zaczerpnięte z dotychczasowych danych wyprzedaży,
- przy identyfikacji za pomocą znacznika <external_id> nie ma możliwości rozpoznawania i nadpisywania wariantów (patrz: Identyfikacja produktów).
SetProducers
Dodawanie i aktualizowanie danych producentów (bez przypisywania produktów).
Parametry wejściowe:
nazwa | obowiązkowy | typ | domyślnie | opis |
authenticate | tak | auth | - | struktura składająca się z pól 'login' i 'password' |
message | tak | message | - | struktura zawierająca pole 'xml', które powinno zawierać ciąg znaków w formacie XML; opis formatu poniżej |
Format XML + komentarze:
<producers> <producer> <name>ABC</name> <!-- nazwa producenta --> <desc> <!-- opis, zalecany w komentarzu CDATA, może zawierać znaczniki HTML --> <![CDATA[ testowy opis ]]> </desc> <logo>...</logo> <!-- opcjonalnie, logo zakodowane w base64 --> </producer> <producer> <id>123</id> <!-- id producenta w AtomStore - wskazanie producenta, którego dane mają zostać zaktualizowane --> <name>DEF</name> <desc><![CDATA[]]></desc> </producer> <producer> <id>124</id> <delete>1</delete> <!-- dyspozycja usunięcia producenta --> </producer> <producers>
Przykładowe wywołanie (PHP):
$client = new SoapClient('http://demo.atomstore.pl/atom_api/wsdl/atom_api'); $authenticate = array('login' => 'admin', 'password' => 'admin'); $xml = '<producers><producer><name>ABC</name><desc></desc></producer></producers>'; $message = array('xml' => $xml); $response = $client->SetProducers($authenticate, $message); header('Content-Type: application/xml'); echo $response;
Dane zwracane:
<savedProducers> <savedProducer> <id>987</id> <name> <![CDATA[ ABC ]]> </name> </savedProducer> </savedProducers>
Uwagi:
- aktualizowanie danych producentów jest możliwe tylko na podstawie <id>, wymagane jest zatem rejestrowanie w zewnętrznym systemie identyfikatorów zawartych w strukturze zwrotnej,
- w przypadku nieokreślenia <id> lub wskazania nieistniejącego producenta, zostanie utworzony nowy producent,
- znacznik <id> nie pozwala narzucić własnego identyfikatora,
- struktura zwrotna zawiera dane zarówno właśnie dodanych, jak i zaktualizowanych producentów (może zawierać wiele węzłów <savedProducer>),
- struktura zwrotna nie zawiera danych usuniętych producentów,
- przekazanie pustego znacznika <logo> spowoduje usunięcie loga producenta,
- dyspozycja usunięcia producenta (<delete>1</delete>) działa tylko jeśli przekazano <id> istniejącego producenta.
SetProductQuantities
Zapis stanów magazynowych dla produktów lub wariantów, na rzecz magazynu własnego lub dostawców (magazyny dodatkowe), a także przypisywanie towarom statusów dostępności.
Parametry wejściowe:
nazwa | obowiązkowy | typ | domyślnie | opis |
authenticate | tak | auth | - | struktura składająca się z pól 'login' i 'password' |
message | tak | message | - | struktura zawierająca pole 'xml', które powinno zawierać ciąg znaków w formacie XML; opis formatu poniżej |
Format XML + komentarze:
<products> <product> <code>kkk_111</code> <!-- kod produktu lub wariantu --> <quantity>14</quantity> <!-- stan magazynowy, domyślnie do zapisu w magazynie własnym --> <purchase_price>123,45</purchase_price> <!-- cena zakupu (opcjonalnie) --> </product> <product> <code>kkk_222</code> <status_name>Przedsprzedaż</status_name> <!-- nazwa statusu dostępności --> </product> <product> <!-- jednoczesny zapis stanu i statusu dostępności --> <code>kkk_333</code> <quantity>14</quantity> <status_name>Przedsprzedaż</status_name> </product> <product> <code>kkk_111</code> <quantity>19</quantity> <inventory_supplier>Dostawca X</inventory_supplier> <!-- nazwa dostawcy/magazynu, na rzecz którego ma zostać zapisany stan --> <purchase_price>234,56</purchase_price> <!-- cena zakupu u dostawcy (opcjonalnie) --> </product> <product> <!-- jednoczesny zapis stanu u dostawcy i statusu dostępności --> <code>kkk_444</code> <quantity>14</quantity> <inventory_supplier>Dostawca X</inventory_supplier> <status_name>Dostępny wkrótce</status_name> </product> <product> <code>kkk_555</code> <auto_status>1</auto_status> <!-- ustawienie (przywrócenie) automatycznego statusu dostępności --> </product> <product> <external_id>k298324723</external_id> <!-- identyfikator zewnętrzny - alternatywna identyfikacja towaru --> <quantity>13</quantity> </product> <product> <product_id>15248</product_id> <!-- wskazanie produktu poprzez jego id w AtomStore --> <quantity>0</quantity> </product> <product> <combination_id>52100</combination_id> <!-- wskazanie wariantu poprzez jego id w AtomStore --> <quantity>0</quantity> </product> </products>
Przykładowe wywołanie (PHP):
$client = new SoapClient('http://demo.atomstore.pl/atom_api/wsdl/atom_api'); $authenticate = array('login' => 'admin', 'password' => 'admin'); $xml = '<products><product><code>kkk_111</code><quantity>14</quantity></product></products>'; $message = array('xml' => $xml); $response = $client->SetProductQuantities($authenticate, $message); echo $response;
Dane zwracane:
OK
Uwagi:
- zapis statusów dostępności funkcjonuje prawidłowo tylko dla statusów nieautomatycznych (niezależnych od liczbowego stanu magazynowego),
- status dostępności może zostać przypisany tylko do produktu (nie do wariantu),
- niezidentyfikowany nazwą status dostępności zostanie automatycznie zdefiniowany,
- automatyczny status dostępności jest nadawany gdy podano znacznik <auto_status> lub też samoczynnie - przy zapisie dodatniego stanu magazynowego (ustawienie API),
- w 1 wywołaniu metody można wskazać ten sam towar wielokrotnie - dla różnych dostawców/magazynów (patrz: kod "kkk_111" w sekcji "Format danych" powyżej),
- niezidentyfikowany nazwą dostawca/magazyn nie zostanie automatycznie utworzony,
- przy identyfikacji za pomocą znacznika <external_id> nie ma możliwości rozpoznawania i nadpisywania wariantów (patrz: Identyfikacja produktów).
SetProducts
Zapis danych produktów, m.in. opisu, kategorii, producenta, atrybutów, wariantów, ceny podstawowej, stanu w m. własnym.
Parametry wejściowe:
nazwa | obowiązkowy | typ | domyślnie | opis |
authenticate | tak | auth | - | struktura składająca się z pól 'login' i 'password' |
message | tak | message | - | struktura zawierająca pole 'xml', które powinno zawierać ciąg znaków w formacie XML; opis formatu poniżej |
Format XML + komentarze:
<products> <product> <code>k50456430806</code> <!-- kod produktu --> <product_name> <!-- nazwa, zalecany komentarz CDATA --> <![CDATA[ Lampa podłogowa biała ]]> </product_name> <product_name lang="eng"> <!-- nazwa, zalecany komentarz CDATA --> <![CDATA[ White floor lamp ]]> </product_name> <product_description> <!-- opis w komentarzu CDATA, może zawierać znaczniki HTML --> <![CDATA[ <p>Testowy opis</p> ]]> </product_description> <product_description lang="eng"> <!-- opis w komentarzu CDATA, może zawierać znaczniki HTML --> <![CDATA[ <p>test description</p> ]]> </product_description> <producer_name> <!-- nazwa producenta, zalecany komentarz CDATA --> <![CDATA[ Zuiver ]]> </producer_name> <category> <!-- ścieżka kategorii --> <![CDATA[ Oświetlenie/lampy podłogowe ]]> </category> <category main="1"> <!-- druga kategoria, wskazana jako główna poprzez parametr main = 1 --> <![CDATA[ Oświetlenie/oszczędne ]]> </category> <category main="1"> <!-- główna kategoria w innym drzewie (multistore) --> <![CDATA[ elektro-outlet/Oświetlenie/Lampy ]]> </category> <allow_multicategories require_any="0">0</allow_multicategories> <!-- allow_multicategories: czy pozostawić dotychczasowe kategorie (domyślnie 1 = tak); require_any (istotne przy allow_multicategories = 0): czy dotychczasowe kategorie zostaną usunięte bewzględnie (0), czy tylko jeśli wskazano inne kategorie (1) --> <in_search>0</in_search> <!-- wyświetlaj w wynikach wyszukiwania --> <in_categories>0</in_categories> <!-- wyświetlaj w kategoriach --> <attributes> <!-- atrybuty --> <attribute> <code> <!-- kod atrybutu (priorytet) --> material </code> <name> <!-- nazwa atrybutu --> <![CDATA[ Materiał ]]> </name> <code_value> <!-- kod wartosci atrybutu (priorytet) --> material </code_value> <value> <!-- wartość atrybutu --> <![CDATA[ 100% polyester ]]> </value> </attribute> <attribute> <name> <![CDATA[ Zawartość pudełka ]]> </name> <value delete="1"> <!-- kasowanie pojedynczej wartości atrybutu wielowartościowego --> <![CDATA[ dodatkowy abażur ]]> </value> </attribute> </attributes> <multi_attrs> <!-- cechy grupowe --> <multi_attr> <code> <!-- kod cechy grupowej (priorytet) --> color </code> <name> <!-- nazwa cechy grupowej --> <![CDATA[ Kolor ]]> </name> <name lang="eng"> <!-- nazwa cechy grupowej --> <![CDATA[ Color ]]> </name> <multi_values> <!-- wartości cechy grupowej --> <multi_value> <code_value>czerwony</code_value><!-- kod wartosci cechy grupowej (priorytet) --> <value><![CDATA[czerwony]]></value> <value lang="eng"><![CDATA[red]]></value> </multi_value> <multi_value> <value><![CDATA[zielony]]></value> <value lang="eng"><![CDATA[green]]></value> </multi_value> </multi_values> </multi_attr> </multi_attrs> <price_netto>928.4553</price_netto> <!-- cena podstawowa netto --> <purchase_price>777.80</purchase_price> <!-- cena zakupu netto --> <vat_rate>23</vat_rate> <!-- stawka VAT --> <quantity>1</quantity> <!-- stan w magazynie własnym --> <new>0</new> <!-- czy produkt ma być oznaczony jako nowość (1 = tak, 0 = nie) --> <recommended>0</recommended> <!-- czy produkt ma zostać wyróżniony --> <bestseller>1</bestseller> <!-- czy produkt ma trafić na listę bestsellerów --> <bestseller_weight>3</bestseller_weight> <!-- pozycja produktu na liście bestsellerów (1 = pozycja pierwsza) --> <weight>3.9000</weight> <!-- waga (ciężar) produktu w kg --> <active>1</active> <!-- aktywność produktu --> <verified>1</verified> <!-- czy zweryfikowano dane towaru (pole informacyjne) --> <only_gratis>0</only_gratis> <!-- czy produkt ma być dostępny tylko jako gratis --> <only_suppliers>0</only_suppliers> <!-- czy dostępność u dostawców ma być priorytetowa względem magazynu własnego --> <only_kit>0</only_kit> <!-- czy produkt ma być dostępny tylko w zestawach --> <login_request>0</login_request> <!-- czy produkt ma być dostępny tylko dla zalogowanych --> <suggested_price>928.4553</suggested_price> <!-- cena katalogowa (rynkowa) netto --> <loyalty_points_price>15000</loyalty_points_price> <!-- program lojajnościowy: cena punktowa --> <loyalty_points_addition>30</loyalty_points_addition> <!-- program lojalnosciowy: ilość punktów za zakup --> <unit>sztuka</unit> <!-- jednostka --> <item_unit>sztuka</item_unit> <!-- podjednostka --> <items_per_package>5</items_per_package> <!-- ilość sztuk w opakowaniu (na użytek rabatowania w B2B) --> <min_order>1.0000</min_order> <!-- minimum logistyczne (obsługiwane tylko w B2B) --> <tags> <!-- tagi oddzielone przecinkami --> <![CDATA[ nowoczesne oświetlenie,lampy ]]> </tags> <tags lang="eng"> <!-- tagi oddzielone przecinkami --> <![CDATA[ Innovative lighting, lamps ]]> </tags> <seo_alias>lampa-podlogowa-tripod-wood-biala</seo_alias> <!-- alias na rzecz przyjaznego linku --> <seo_title> <!-- title strony produktu (metatag dla SEO) --> <![CDATA[ test SEO title ]]> </seo_title> <seo_title lang="eng"> <![CDATA[ test SEO title ]]> </seo_title> <seo_title lang="rus"> <![CDATA[ test SEO title ]]> </seo_title> <seo_keywords> <!-- słowa kluczowe strony produktu (dla SEO) --> <![CDATA[ test,SEO,keywords ]]> </seo_keywords> <seo_keywords lang="eng"> <![CDATA[ test,SEO,keywords ]]> </seo_keywords> <seo_keywords lang="rus"> <![CDATA[ test,SEO,keywords ]]> </seo_keywords> <seo_description> <!-- opis strony produktu (metatag dla SEO) --> <![CDATA[ test SEO description ]]> </seo_description> <seo_description lang="eng"> <![CDATA[ test SEO description ]]> </seo_description> <seo_description lang="rus"> <![CDATA[ test SEO description ]]> </seo_description> <related_products> <!-- produkty powiązane --> <related_product>k50456430807</related_product> <!-- kod produktu powiązanego --> <related_product>k50456430808</related_product> </related_products> <custom_weight></custom_weight> <!-- priorytet sortowania --> <shipping_individuals> <!-- indywidualne warunki dla wybranych form dostawy --> <shipping_method> <id>12</id> <!-- id formy dostawy w AtomStore (zwracane z metody GetShippingMethods) --> <price>0</price> <!-- indywidualny koszt dostawy, podany w netto --> <gratis>0</gratis> <!-- dostawa gratis (1 = tak, 0 = nie) --> <exclusion>1</exclusion> <!-- forma dostawy niedostępna dla produktu (1 = tak, 0 = nie) --> </shipping_method> <shipping_method> <!-- dyspozycja usunięcia indywidualnych warunków dla wskazanej formy dostawy --> <id>18</id> <delete>1</delete> </shipping_method> </shipping_individuals> <payment_methods_exclusions> <!-- formy płatności wykluczone przy zakupie tego towaru --> <payment_method_id>4</payment_method_id> <!-- id formy płatności w AtomStore --> <payment_method_id>5</payment_method_id> </payment_methods_exclusions> <external_ids> <!-- zapis dodatkowych kodów towaru (informacyjnie) --> <external_id> <module_key>HURTOWNIA_X</module_key> <!-- klucz integracji / dostawcy danych --> <id>HX_k50456430806</id> <!-- kod / identyfikator --> </external_id> </external_ids> </product> <product> <code>k60456430806</code> <update>0</update> <!-- czy produkt istniejący ma być nadpisany (1 = tak, 0 = nie) --> <product_name> <![CDATA[ Mitologia grecka ]]> </product_name> <producer_id>712</producer_id> <!-- przypisanie producenta poprzez jego id w AtomStore --> <category>ext_1234</category> <!-- przypisanie kategorii poprzez zewn. identyfikator (patrz: SetCategories) --> <category aid="ext_1244"> <!-- zewn. identyfikator kategorii oraz ścieżka - priorytet zewn. identyfikatora --> <![CDATA[ Edukacja/Lektury ]]> </category> <price_brutto>9.99</price_brutto> <!-- możliwe podanie ceny brutto, zalecane wówczas podanie stawki VAT --> <vat_rate>23</vat_rate> <ebook>1</ebook> <!-- czy produkt ma być oznaczony jako ebook (niezalecane) --> </product> <product> <code>k65456430806</code> <category_id>6431</category_id> <!-- przypisanie kategorii poprzez id w AtomStore --> <category_id main="1">6231</category_id> </product> <product> <code>k70456430806</code> <deleted>1</deleted> <!-- dyspozycja usunięcia produktu --> </product> <product> <code>k80456430806</code> <ignored_fields>name,desc,producer_name,category,attributes,active,price_netto,price_brutto,seo,recommended,new</ignored_fields> <!-- poprzez ignored_fields można określić dane, które mają zostać zignorowane podczas aktualizowania produktów już istniejących, np. <ignored_fields>name,desc</ignored_fields> spowoduje, że nazwa i opis będą wykorzystane tylko przy tworzeniu kartoteki, a ignorowane podczas jej aktualizacji (fraza seo odpowiada znacznikom seo_title, seo_keywords, seo_description) --> <product_name> <![CDATA[ Zestaw: lampa + żarówka ]]> </product_name> <package_content> <!-- tworzenie/aktualizacja zestawu, wymagane wskazanie produktów składowych --> <code quantity="1">k80456430806_a</code> <!-- kod produktu składowego oraz jego ilość w zestawie --> <code quantity="2">k80456430806_b</code> <!-- j.w. --> </package_content> </product> <product> <code>k90456430806</code> <product_name> <![CDATA[ Album mp3 ]]> </product_name> <files delete_unsent="1"> <!-- pliki do pobrania, zapisywane do biblioteki produktu wirtualnego; delete_unsent - czy pliki niewskazane w XML, ale wcześniej zdefiniowane, mają być usunięte (1 = tak, 0 = nie); pliki należy wskazać adresem URL - zostaną jednorazowo zaimportowane do bazy sklepu --> <file>http://...com.pl/ftp/mp3/testmp3.mp3</file> <file>http://...com.pl/ftp/mp3/testmp4.mp3</file> </files> </product> <product> <external_id>ei_1222</external_id> <!-- identyfikator zewnętrzny - alternatywna identyfikacja towaru --> <new>0</new> </product> <product> <product_id>15248</product_id> <!-- wskazanie produktu poprzez jego id w AtomStore --> <new>0</new> </product> <product> <code>pr-20180802-1052</code> <!-- (...) --> <service code="dodatkowa gwarancja">1</service> <!-- czy produkt jest usługą + opcjonalnie kod grupy usług --> <services></services> </product> <product> <code>pr-20180802-1107</code> <!-- (...) --> <service>0</service> <services> <!-- lista usług przypisanych do produktu --> <code><![CDATA[pr-20180802-1111]]></code> <!-- kod produktu będącego usługą --> <code><![CDATA[pr-20180802-1112]]></code> </services> </product> </products>
Przykładowe wywołanie (PHP):
$client = new SoapClient('http://demo.atomstore.pl/atom_api/wsdl/atom_api'); $authenticate = array('login' => 'admin', 'password' => 'admin'); $xml = '<products><product><code>kkk_111</code><product_name>Lampa</product_name></product></products>'; $message = array('xml' => $xml); $response = $client->SetProducts($authenticate, $message); echo $response;
Dane zwracane:
OK
Uwagi:
- jedynym wymaganym znacznikiem jest identyfikator produktu; dla zmniejszenia objętości przetwarzanych danych zalecane jest wysyłanie jedynie niepustych pól,- jeśli podany kod (<product> → <code>) zostaje odnaleziony w wariantach, aktualizowane są parametry, waga, a także cena wariantu (wraz z modyfikatorem '='), przy czym można to wyłączyć w ustawieniach API (np. jeśli wszystkie warianty mają dziedziczyć cenę z produktu, do którego są przypisane),
- jeśli podany kod wpisany jest zarówno dla któregoś wariantu, jak i dla produktu, to zależnie od ustawień API zapis może obejmować cenę wariantu + dane produktu / tylko cenę wariantu / tylko dane produktu,
- przy identyfikacji za pomocą znacznika <external_id> nie ma możliwości rozpoznawania i nadpisywania wariantów (patrz: Identyfikacja produktów),
- tworzenie wariantów może odbywać się za pomocą metody SetCombinations (niezalecane) lub poprzez przekazanie do SetProducts, wewnątrz znacznika <product>, następującej struktury danych (również do nadpisywania):
<combinations> <combination> <code>kod_wariantu_X</code> <!-- kod wariantu --> <price_modifier>+</price_modifier> <!-- modyfikator ceny (+, -, =, %) --> <price_value>0.00</price_value> <!-- wartość modyfikacji ceny (netto) --> <attributes> <!-- atrybuty do wyboru --> <attribute> <name><![CDATA[Rozmiar]]></name> <value><![CDATA[L]]></value> </attribute> <attribute> <name><![CDATA[Kolor]]></name> <value><![CDATA[zielony]]></value> </attribute> </attributes> <params> <!-- dodatkowe atrybuty opisujące wariant --> <param> <name><![CDATA[EAN]]></name> <value><![CDATA[2201808021706]]></value> </param> </params> </combination> <combination> <code>kod_wariantu_Y</code> <price_modifier>=</price_modifier> <price_value>150.5050</price_value> <purchase_price>140.4040</purchase_price> <!-- cena zakupu (netto) --> <suggested_price>160.6060</suggested_price> <!-- cena katalogowa (netto) --> <active>1</active> <!-- aktywność wariantu --> <verified>0</verified> <!-- czy zweryfikowano dane wariantu (pole informacyjne) --> <attributes> <attribute> <name><![CDATA[Rozmiar]]></name> <value><![CDATA[XXL]]></value> </attribute> </attributes> <image_url>http://...</image_url> <!-- adres URL zdjęcia wariantu --> <external_ids> <!-- zapis dodatkowych kodów wariantu (informacyjnie) --> <external_id> <module_key>HURTOWNIA_X</module_key> <!-- klucz integracji / dostawcy danych --> <id>HX_wY</id> <!-- kod / identyfikator --> </external_id> </external_ids> </combination> </combinations>
- ustawianie bestsellerów jest możliwe tylko przy odpowiedniej konfiguracji AtomStore (domyślnie ustawiane są na podstawie sprzedaży),
- dopuszczalne jednostki przekazywane w polu <unit>: sztuka, komplet, para, opakowanie, kilogram, litr, metr, metr kwadratowy, metr sześcienny, gram, mililitr, miligram, 100, decymetr kwadratowy, kilometr,
- w danych atrybutów produktu (<product> → <attributes>) przekazywać można atrybuty typu "cecha" lub "cecha grupowa" (wielowartościowe); wysłanie jednej cechy dla atrybutu wielowartościowego powoduje dopisanie jej do dotychczasowych danych,
- atrybuty produktu: przekazanie pustej wartości (<value>) domyślnie NIE powoduje skasowania wartości, można to jednak włączyć w ustawieniach API,
- zestawy: produkty składowe można wskazać zarówno poprzez kody (<code>) jak i poprzez identyfikatory zewnętrzne (<external_id>); pusty znacznik <package_content> spowoduje, że kartoteka przestanie być zestawem (jeśli nim była),
- produkty powiązane można wskazać jedynie poprzez ich kody (<code>),
- indywidualne warunki dostawy powinny zawierać tylko jedną niepustą cechę: albo indywidualną stawkę, albo oznaczenie <gratis>, albo wykluczenie (w razie niepodania żadnego z tych pól zapisany zostanie indywidualny koszt równy 0),
- wykluczenia produktów z formami płatności mogą być odwoływane poprzez przekazanie pustego węzła <payment_methods_exclusions>; niepodane w nim formy płatności zostaną dla produktu przywrócone.
SetProductsImages
Upload lub wskazanie zdjęć produktów, a także usuwanie plików. Dodawane zdjęcia mogą być zakodowane w base64, wskazane adresem URL (http://...) lub też zapisane wcześniej na serwerze FTP sklepu i wskazane za pomocą nazw plików.
Parametry wejściowe:
nazwa | obowiązkowy | typ | domyślnie | opis |
authenticate | tak | auth | - | struktura składająca się z pól 'login' i 'password' |
message | tak | message | - | struktura zawierająca pole 'xml', które powinno zawierać ciąg znaków w formacie XML; opis formatu poniżej |
Format XML, różne konfiguracje + komentarze:
<product_images> <product_image> <code>kkk_111</code> <!-- kod produktu --> <image_name>Amoeba 2.jpg</image_name> <!-- nazwa pliku (wymagana) --> <image_content>...</image_content> <!-- zdjęcie zakodowane w base64 --> </product_image> <product_image> <code>kkk_111</code> <image_name>Amoeba 3.jpg</image_name> <image_url>http://...</image_url> <!-- adres URL, z którego ma zostać pobrane zdjęcie --> </product_image> <product_image> <code>kkk_111</code> <no_content>1</no_content> <!-- dyspozycja odszukania pliku na serwerze FTP sklepu --> <image_name>sdfd_2.jpg</image_name> <!-- nazwa pliku na serwerze FTP (podkalog /media/products) --> </product_image> <product_image> <code>kkk_111</code> <image_name>Amoeba 4.jpg</image_name> <image_content>...</image_content> <dir>1_1000</dir> <!-- wskazanie podkatalogu systemowego, do którego ma zostać zapisane lub przeniesione zdjęcie --> <image_external_id>kkk_111_iii_111</image_external_id> <!-- zewnętrzny identyfikator zdjęcia, opcjonalnie --> <active>1</active> <!-- możliwość ustawienia statusu zdjęcia (1 = aktywne, 0 = nieaktywne) --> <weight>1</weight> <!-- możliwość zarządzania kolejnością (1 = zdjęcie główne, 2,3,4... = kolejne zdjęcia) --> <allegro>1</allegro> <!-- czy zdjęcie ma być użyte przy wystawianiu aukcji Allegro (1 = tak, 0 = nie) --> <allegro_miniature>0</allegro_miniature> <!-- wymuszanie zdjęcia jako miniatury na aukcjach Allegro (1 = tak, 0 = nie) --> <google_merchant>1</google_merchant> <!-- czy zdjęcie ma być widoczne w danych dla GMC (1 = tak, 0 = nie) --> <stores_by_id>1,3</stores_by_id> <!-- id wybranych sklepów (multistore), w których ma być widoczne zdjęcie --> </product_image> <product_image> <!-- usuwanie zdjęcia wskazanego nazwą pliku (niezalecane) --> <code>kkk_111</code> <!-- w tym trybie usuwania wymagane jest zidentyfikowanie produktu --> <image_name>sdfd_0.jpg</image_name> <deleted>1</deleted> <!-- dyspozycja skasowania zdjęcia --> </product_image> <!-- usuwanie zdjęcia wskazanego nadanym wcześniej identyfikatorem zewnętrznym (zalecane) --> <product_image> <image_external_id>kkk_111_iii_000</image_external_id> <deleted>1</deleted> </product_image> <product_image> <product_external_id>410522</product_external_id> <!-- identyfikator zewnętrzny - alternatywna identyfikacja towaru --> <no_content>1</no_content> <image_name>sdfd_5.jpg</image_name> </product_image> </product_images>
Przykładowe wywołanie (PHP):
$client = new SoapClient('http://demo.atomstore.pl/atom_api/wsdl/atom_api'); $authenticate = array('login' => 'admin', 'password' => 'admin'); $xml = '<product_images>'; $xml .= '<product_image>'; $xml .= '<code>aiudhaw</code>'; $xml .= '<no_content>1</no_content>'; $xml .= '<image_name>plik.jpg</image_name>'; $xml .= '</product_image>'; $xml .= '</product_images>'; $message = array('xml' => $xml); $response = $client->SetProductsImages($authenticate, $message); echo $response;
Dane zwracane:
OK
Uwagi:
- dopuszczane są tylko media o rozszerzeniach jpg, jpeg, png, gif, pdf, flv, swf, mov, xml, doc, zip; rozszerzenia te powinny być podane jawnie w nazwach plików,
- nazwa pliku może zostać automatycznie zmieniona, jeśli na serwerze istnieje już inny plik o tej samej nazwie lub jeśli identyczne zdjęcie zostało wcześniej przypisane do innego towaru (różne produkty nie mogą wspólnie używać tego samego pliku),
- to samo zdjęcie przypisywane do tego samego produktu pod zmienioną nazwą pliku jest rozponawane po jego zawartości - nie zostanie dodane ponownie ani nadpisane,
- z wymienionych wyżej powodów niezalecane jest usuwanie zdjęć za pomocą nazwy pliku, chyba że istnieje pewność, że wszystkie zdjęcia mają unikalne nazwy plików,
- znacznik <dir> nie pozwala na obsłużenie własnej struktury podkatalogów na serwerze FTP - wszystkie zdjęcia, które będą wskazywane nazwą pliku, powinny być umieszczone w jednym katalogu: /media/products; znacznik ten sugeruje docelową lokalizację zdjęcia i jest niezalecany, ponieważ w przypadku jego braku system sam wykonuje katalogowanie,
- metoda nie umożliwia zapisu zdjęć na rzecz wariantów.