Chcesz przenieść sklep na nową platformę, ale nie wiesz jak to zrobić? Wszystkiego dowiesz się z e-booka "Migracja sklepu" Pobierz teraz

Metody - katalog, marketing

GetAttributes

Pobranie słownika atrybutów (aktualnie metoda nie zwraca wartości atrybutó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'
 

 

 

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>70</id> <!-- id atrybutu w AtomStore -->
		<type>3</type> <!-- typ atrybutu (1 = cecha, 2 = cecha grupowa, 3 = warianty) -->
		<visible>1</visible> <!-- wyświetlanie atrybutu od strony klienta (1 = tak, 0 = nie) -->
		<name>Rozmiar</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) -->
		<name lang="ita">Dimensione</name>
	</attribute>
</attributes>

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
 

  

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>
		<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 -->
                        
		</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 -->
                        
		</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>
</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

 

 

 

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;
1 - zwrócone zostaną informacje o wszystkich zdjęciach przypisanych do 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);
produkty niepasujące zostaną zwrócone jako pozycje usunięte, z ograniczonym zestawem danych;
'' - wszystkie kartoteki

 

 

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_keywords> <!-- słowa kluczowe strony produktu (dla SEO) -->
			<![CDATA[ test,SEO,keywords ]]>
		</seo_keywords> 
		<seo_description> <!-- opis strony produktu (metatag dla SEO) -->
			<![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 -->
	</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 -->
		<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


SetOpenPackage


SetOpenPackageGroups


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 -->
                        
		</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>
		</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)
		-->
		<attributes> <!-- atrybuty -->
			<attribute>
				<name> <!-- nazwa atrybutu -->
					<![CDATA[ Materiał ]]>
				</name>
				<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>
		<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_keywords> <!-- słowa kluczowe strony produktu (dla SEO) -->
			<![CDATA[ test,SEO,keywords ]]>
		</seo_keywords>
		<seo_description> <!-- opis strony produktu (metatag dla SEO) -->
			<![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.

 


AtomStore to platforma e-commerce klasy premium. Tworzymy dedykowane sklepy internetowe oraz systemy B2B. Oferujemy kompleksowe wdrożenia od A do Z, sklepy mobilne w technologii responsive web design, integracje z programami Comarch Optima, XL, WF-Mag, Subiekt.
Wspólnie rozwiązujemy problemy polskiego e-handlu!

Znajdź nas na:

  • Blog
  • Facebook
  • Youtube
  • Linked in
  • iab