Import dat — XML
Specifikace XML formátu importního produktového feedu. JSONL varianta: Import dat — JSONL.
Importní feed slouží jako primární zdroj produktů pro jejich import do Cenového automatu. Využívá se u e-shop systémů, ze kterých nelze tato data načítat s pomocí jejich API. Struktura a názvy tagů jsou velmi podobné s Heureka produktovým feedem.
Struktura souboru
Kořenový element je SHOP (v souboru jednou). Každý produkt je v elementu SHOPITEM.
Ve feedu uvádějte jen elementy, které chcete v aplikaci využívat. U primárního importu je povinný identifikátor produktu, vše ostatní je volitelné.
<?xml version="1.0" encoding="utf-8"?>
<SHOP>
<SHOPITEM>
<PRODUCT_ID>K-KU2M07F</PRODUCT_ID>
<SHOP_PRODUCT_NAME><![CDATA[Apple iPhone 12 Pro]]></SHOP_PRODUCT_NAME>
<VAT>21</VAT>
<CURRENT_PRICE>26660</CURRENT_PRICE>
</SHOPITEM>
</SHOP>
Identifikace produktů
Produkty se při importu identifikují pomocí PRODUCT_ID. Jde o jednoznačný identifikátor produktu v e-shopu. Ideálně jej také využíváte ve zbožových srovnávačích (vyjma Idealo).
Pokud pro srovnávače používáte jiný identifikátor, uveďte jej ve volitelném MERCHANT_PRODUCT_ID. Pokud element chybí, použije se PRODUCT_ID a hodnota se normalizuje: u e-shopů v CZ a SK se znaky mimo 0-9a-zA-Z_- nahradí _ (charset Heureka / Zboží ITEM_ID).
Popis polí
| Pole | Popis |
|---|---|
| SHOP | Kořenový element, v souboru jednou. Volitelné atributy encryption a iv — viz Šifrování nákupních cen. |
| SHOPITEM | Informace o jednom produktu. V souboru tolikrát, kolik máte produktů. Volitelný atribut pricesIncludeVat — viz Ceny bez DPH. |
| PRODUCT_ID | Jednoznačný primární identifikátor produktu v e-shopu. Formát: text |
| MERCHANT_PRODUCT_ID | Jednoznačný identifikátor produktu ve zbožových srovnávačích (vyjma Idealo). Pokud element chybí, použije se PRODUCT_ID a hodnota se normalizuje (u CZ/SK se znaky mimo 0-9a-zA-Z_- nahradí _). Uvádějte ho jen tehdy, když se identifikátor pro e-shop a srovnávače liší.Formát: text |
| PRODUCTNO | Produktové číslo (většinou identifikátor definovaný výrobcem). Formát: text |
| EAN | EAN kód. Formát: ean |
| PRODUCTNAME | Název produktu, jak jej odesíláte do Heureky. Formát: text |
| SHOP_PRODUCT_NAME | Název produktu v e-shopu. Formát: text |
| MANUFACTURER | Název výrobce. Formát: text |
| SUPPLIER | Název dodavatele. Formát: text |
| URL | Url produktu v e-shopu. Formát: url |
| IMGURL | Url obrázku produktu. Formát: url |
| DELIVERY_DATE | Dostupnost produktu. Formát: dle Heureka specifikace |
| STOCK_QTY | Stav skladu, počet kusů skladem. Formát: celé číslo |
| WEIGHT | Hmotnost produktu v kg. Formát: číslo [1] |
| ACTIVE_IN_SHOP | Indikátor, jestli je produkt v e-shopu aktivní (není skrytý, deaktivovaný, smazaný, apod.). Formát: 0|1 |
| SHOP_DEFAULT_CATEGORY_UID | Jednoznačný identifikátor výchozí kategorie e-shopu, kde je produkt primárně zařazený. [2] Formát: text |
| SHOP_CATEGORY_UID | Jednoznačný identifikátor kategorie e-shopu, kde je produkt zařazený. Element je ve feedu obsažen tolikrát, v kolika kategoriích je produkt zařazený. [2] Formát: text |
| VAT | Sazba DPH. Formát: s desetinou tečkou (0.21), jako celé číslo (21) nebo procenta (21%) [1] |
| CURRENT_PRICE | Aktuální cena v e-shopu. Formát: cena [1] |
| MOC_PRICE | Doporučená koncová cena. Formát: cena [1] |
| COMMON_PRICE | Běžná cena. Formát: cena [1] |
| ACTION_PRICE | Akční cena. Formát: cena [1] |
| PURCHASE_PRICE | Nákupní cena. Formát: cena [1] |
| SALES_VOUCHER_VALUE | Hodnota slevového kupónu. Uvedena včetně DPH. Formát: číselný [3] |
| MIN_ALLOWED_PRICE | Minimální povolená cena. Formát: cena [1] |
| MAX_ALLOWED_PRICE | Maximální povolená cena. Formát: cena [1] |
| LABEL | Příznak produktu. Element je ve feedu obsažen tolikrát, kolik má produkt příznaků. Volitelný katalog všech příznaků e-shopu (i nepoužitých) lze importovat zvlášť. |
| LABEL_NAME | Jméno příznaku. Formát: text |
| LABEL_DATE_FROM | Datum, od kdy je příznak platný. Volitelné. Pokud chybí, je příznak aktuálně platný. Formát: datum (YYYY-MM-DD) |
| LABEL_DATE_TO | Datum, do kdy je příznak platný. Volitelné. Pokud chybí, je příznak aktuálně platný. Formát: datum (YYYY-MM-DD) |
| CUSTOM_LABEL_0, CUSTOM_LABEL_1, CUSTOM_LABEL_2…CUSTOM_LABEL_9 | Jména příznaků produktu. Alternativní formát (zboží.cz, Google Merchant). |
| GIFT | Identifikátor produktu (PRODUCT_ID), který je k tomuto produktu v e-shopu nastavený jako dárek.Element je ve feedu obsažen tolikrát, kolik má produkt dárků. Formát: text |
| CUSTOM_NUMERIC_1, CUSTOM_NUMERIC_2…CUSTOM_NUMERIC_5 | Uživatelská numerická pole. Formát: číslo [1] |
| CUSTOM_TEXT_1, CUSTOM_TEXT_2…CUSTOM_TEXT_5 | Uživatelská textová pole. Formát: text |
[1] Formát cena | číslo
Ceny a čísla uvádějte ve float formátu s desetinnou tečkou a bez mezer, např. 1234.56. Podporována jsou čísla až s 10 číslicemi, přičemž nejvýše 2 z nich mohou být za desetinnou tečkou. Ceny uvádějte standardně s DPH, ale lze i bez DPH, viz Ceny bez DPH.
[2] Zařazení v e-shop kategorii
Pokud chcete v aplikaci v podmínkách pravidel používat výběr produktů dle jejich zařazení v e-shop kategorii, je třeba do aplikace importovat seznam všech kategorií. Více v Import e-shop kategorií.
Obdobně lze volitelně importovat katalog příznaků.
[3] Flexibilní číselný formát
- 1234.56 (desetinná tečka)
- 1234,56 (desetinná čárka)
- 1 234,56 (mezera jako oddělovač tisíců)
- 1234.56 Kč (měna, např. Kč, CZK, EUR, €)
- 2.5% nebo 2.5 % (procenta)
Příklad importního feedu
<?xml version="1.0" encoding="utf-8"?>
<SHOP>
<SHOPITEM>
<PRODUCT_ID>K-KU2M07F</PRODUCT_ID>
<PRODUCTNO>KU2M07F-001</PRODUCTNO>
<EAN>8592220013714</EAN>
<SHOP_PRODUCT_NAME><![CDATA[Apple iPhone 12 Pro (128GB, Gold)]]></SHOP_PRODUCT_NAME>
<MANUFACTURER><![CDATA[Apple]]></MANUFACTURER>
<SUPPLIER><![CDATA[Apcom Czech]]></SUPPLIER>
<URL><![CDATA[https://www.shop.cz/mobilni-telefony/apple/iphone-12-pro]]></URL>
<IMGURL><![CDATA[https://images.shop.cz/apple-iphone-12-pro.jpg]]></IMGURL>
<DELIVERY_DATE>0</DELIVERY_DATE>
<STOCK_QTY>55</STOCK_QTY>
<WEIGHT>0.55</WEIGHT>
<ACTIVE_IN_SHOP>1</ACTIVE_IN_SHOP>
<SHOP_CATEGORY_UID>358</SHOP_CATEGORY_UID>
<SHOP_CATEGORY_UID>132</SHOP_CATEGORY_UID>
<SHOP_DEFAULT_CATEGORY_UID>358</SHOP_DEFAULT_CATEGORY_UID>
<VAT>21</VAT>
<CURRENT_PRICE>26660.00</CURRENT_PRICE>
<MOC_PRICE>29990.00</MOC_PRICE>
<COMMON_PRICE>27990.00</COMMON_PRICE>
<PURCHASE_PRICE>24575.94</PURCHASE_PRICE>
<SALES_VOUCHER_VALUE>1000</SALES_VOUCHER_VALUE>
<MIN_ALLOWED_PRICE>25444.78</MIN_ALLOWED_PRICE>
<MAX_ALLOWED_PRICE>29990.00</MAX_ALLOWED_PRICE>
<LABEL>
<LABEL_NAME><![CDATA[Novinka]]></LABEL_NAME>
<LABEL_FROM>2020-04-15</LABEL_FROM>
<LABEL_TO>2020-04-30</LABEL_TO>
</LABEL>
<LABEL>
<LABEL_NAME><![CDATA[Akce]]></LABEL_NAME>
</LABEL>
<GIFT>GIFT-CASE</GIFT>
<GIFT>GIFT-CABLE</GIFT>
<CUSTOM_NUMERIC_1>123.45</CUSTOM_NUMERIC_1>
<CUSTOM_TEXT_1>V letáku do 15.3.</CUSTOM_TEXT_1>
</SHOPITEM>
</SHOP>
Ceny bez DPH
Standardně se očekávají ceny včetně DPH (atribut pricesIncludeVat chybí, případně je "1").
Ceny bez DPH se signalizují atributem pricesIncludeVat="0" u SHOPITEM — u každého produktu zvlášť. Při cenách bez DPH musí mít produkt uvedenou sazbu DPH (VAT), jinak se ceny nenaimportují.
<?xml version="1.0" encoding="utf-8"?>
<SHOP>
<SHOPITEM pricesIncludeVat="0">
<PRODUCT_ID>K-KU2M07F</PRODUCT_ID>
<PURCHASE_PRICE>20310.69421</PURCHASE_PRICE>
<VAT>0.21</VAT>
...
</SHOPITEM>
</SHOP>
Šifrování nákupních cen
Nákupní ceny lze ve feedu šifrovat. Šifrovací klíč je cryptoKey e-shopu (16 bajtů). Šifrování zapnete atributem encryption="1" na SHOP; inicializační vektor iv (16 B) je stejný pro všechny nákupní ceny ve feedu. Před každým generováním feedu doporučujeme iv znovu náhodně vygenerovat.
Algoritmus je aes-128-cbc (stejný výstup jako openssl_encrypt s options=0, tedy base64).
PHP
$zasifrovane = openssl_encrypt($cena, 'aes-128-cbc', $cryptoKey, 0, $iv);Node.js
import { createCipheriv } from 'node:crypto'
const cipher = createCipheriv('aes-128-cbc', Buffer.from(cryptoKey), Buffer.from(iv))
const encrypted = Buffer.concat([cipher.update(price, 'utf8'), cipher.final()]).toString('base64')Python
from base64 import b64encode
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
cipher = AES.new(crypto_key.encode(), AES.MODE_CBC, iv.encode())
encrypted = b64encode(cipher.encrypt(pad(price.encode(), AES.block_size))).decode()<?xml version="1.0" encoding="utf-8"?>
<SHOP encryption="1" iv="1234567890123456">
<SHOPITEM>
<PRODUCT_ID>K-KU2M07F</PRODUCT_ID>
<PURCHASE_PRICE>qIGYBlxEdDqEj5kskOX80g==</PURCHASE_PRICE>
...
</SHOPITEM>
</SHOP>
Slučování hodnot u sekundárních importů
U atributů LABEL a GIFT se při sekundárním importu hodnoty sloučí s primárním importem. Můžete tak dohrát další příznaky nebo dárky, aniž by se přepsaly už načtené hodnoty.