Přenos zákazníků z e-shopu Shoptet do FlexiBee

Další věcí, kterou potřebujeme přenést z e-shopu Shoptet do FlexiBee, jsou zákazníci. To se nám bude hodit pro přenos objednávek a daňových dokladů. Jak na to?

Stejný seznam zákazníků v e-shopu i ve FlexiBee je pro nás velice výhodný. Můžeme zákazníkům rezervovat zboží, posílat upomínky nebo třeba SMS přání k svátku :-). Další samostatnou kapitolou jsou analýzy. FlexiBee nám totiž může jednoduše najít zákazníky, kteří nakupují hodně nebo málo. Najde i takové, kteří nakupovat přestali a ty můžeme oslovit nějakou kampaní.

Zákazníci
Zákazníci


Export zákazníků z e-shopu Shoptet

Ze Shoptetu je možné zákazníky vyexportovat ve třech formátech: XML, XLSX a CSV. My využijeme export v XML. Tento export je opět dostupný na permanentním odkazu (pevná URL adresa), takže bude možné přenos zautomatizovat.

Adresu permanentního odkazu nalezneme v administraci e-shopu v menu ZÁKAZNÍCI → Export. Zvolíme formát XML a v dolní části okna pak nalezneme adresu. Zda povolit nebo nepovolit přístup z konkrétní IP adresy, je na každém z nás. Jedná se jen o zabezpečení proti tomu, aby si data nemohl stáhnout někdo jiný.

Export zákazníků ze Shoptetu do XML
Export zákazníků ze Shoptetu do XML


Import zákazníků do FlexiBee

Budeme si opět muset pomoci XSLT transformací, protože XML vygenerované e-shopem není ve formátu, který FlexiBee požaduje.

Transformace pro převod XML e-shopu Shoptet na XML pro FlexiBee:

<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java">
  <xsl:output method="xml" indent="yes" encoding="utf-8" />

  <xsl:template match="CUSTOMERS">
    <winstrom verison="1.0">
      <xsl:apply-templates select="CUSTOMER"/>
    </winstrom>
  </xsl:template>

  <xsl:template match="CUSTOMER">
    <!-- zpracování konkrétního zákazníka -->
    <adresar>
      <id>ext:SHOPTET-CUSTOMER:<xsl:value-of select="GUID"/></id>
      <xsl:if test="ACCOUNTS/ACCOUNT/EMAIL != ''">
        <id>ext:SHOPTET-CUSTOMER-EMAIL:<xsl:value-of select="ACCOUNTS/ACCOUNT/EMAIL"/></id>
      </xsl:if>
      <xsl:choose>
        <xsl:when test="BILLING_ADDRESS/FULL_NAME != ''">
          <nazev><xsl:value-of select="BILLING_ADDRESS/FULL_NAME"/></nazev>
        </xsl:when>
        <xsl:otherwise>
          <nazev><xsl:value-of select="ACCOUNTS/ACCOUNT/EMAIL"/></nazev>
        </xsl:otherwise>
      </xsl:choose>
      <nazev2><xsl:value-of select="BILLING_ADDRESS/COMPANY"/></nazev2>
      <ulice><xsl:value-of select="BILLING_ADDRESS/STREET"/> <xsl:value-of select="BILLING_ADDRESS/HOUSE_NUMBER"/></ulice>
      <mesto><xsl:value-of select="BILLING_ADDRESS/CITY"/></mesto>
      <psc><xsl:value-of select="BILLING_ADDRESS/ZIP"/></psc>
      <xsl:apply-templates select ="BILLING_ADDRESS"/>
      <ic><xsl:value-of select="BILLING_ADDRESS/COMPANY_ID"/></ic>
      <dic><xsl:value-of select="BILLING_ADDRESS/VAT_ID"/></dic>
      <skupFir if-not-found="create">code:<xsl:value-of select="java:flexibee.Tool.toUpper(CUSTOMER_GROUP)"/></skupFir>
      <skupCen if-not-found="create">code:<xsl:value-of select="java:flexibee.Tool.toUpper(PRICELIST)"/></skupCen>
      <poznam><xsl:value-of select="REMARK"/></poznam>
      <kontakty>
        <xsl:apply-templates select ="ACCOUNTS/ACCOUNT"/>
      </kontakty>
    </adresar>

    <xsl:apply-templates select ="SHIPPING_ADDRESSES/SHIPPING_ADDRESS"/>

  </xsl:template>

  <xsl:template match="BILLING_ADDRESS">
    <xsl:call-template name="STAT"/>
  </xsl:template>

  <xsl:template match="SHIPPING_ADDRESSES/SHIPPING_ADDRESS">
    <misto-urceni>
      <!-- vytvoření dodacích adres -->
      <id>ext:SHOPTET-SHIPPING:<xsl:value-of select="GUID"/></id>
      <firma>ext:SHOPTET-CUSTOMER:<xsl:value-of select="../../GUID"/></firma>
      <xsl:choose>
        <xsl:when test="FULL_NAME != ''">
          <nazev><xsl:value-of select="FULL_NAME"/></nazev>
        </xsl:when>
        <xsl:otherwise>
          <nazev><xsl:value-of select="../../ACCOUNTS/ACCOUNT/EMAIL"/></nazev>
        </xsl:otherwise>
      </xsl:choose>
      <nazev2><xsl:value-of select="COMPANY"/></nazev2>
      <ulice><xsl:value-of select="STREET"/> <xsl:value-of select="HOUSE_NUMBER"/></ulice>
      <mesto><xsl:value-of select="CITY"/></mesto>
      <psc><xsl:value-of select="ZIP"/></psc>
      <xsl:call-template name="STAT"/>
    </misto-urceni>
  </xsl:template>

  <xsl:template match="ACCOUNTS/ACCOUNT">
    <kontakt>
      <!-- vytvoření kontaktů -->
      <id>ext:SHOPTET-ACCOUNT:<xsl:value-of select="GUID"/></id>
      <prijmeni><xsl:value-of select="EMAIL"/></prijmeni>
      <email><xsl:value-of select="EMAIL"/></email>
      <tel><xsl:value-of select="PHONE"/></tel>
    </kontakt>
  </xsl:template>

  <xsl:template name="STAT">
    <!-- správné naplnění pole stát v adrese ve FlexiBee -->
    <xsl:choose>
      <xsl:when test="COUNTRY = ''"><stat></stat></xsl:when>
      <xsl:when test="COUNTRY = 'Česká republika'"><stat>code:CZ</stat></xsl:when>
      <xsl:when test="COUTNRY = 'Slovensko'"><stat>code:SK</stat></xsl:when>
      <!-- zde je potřeba doplnit mapování dalších států -->
      <xsl:otherwise><stat>NEDEFINOVANO - <xsl:value-of select="COUNTRY"/></stat></xsl:otherwise>
    </xsl:choose>
  </xsl:template>

</xsl:stylesheet>

Transformaci zadáme ve FlexiBee do evidence Uživatelské transformace (horní menu Nástroje → Uživatelské transformace). Vyplníme Zkratku (tu si zapamatujeme) a Název. Do pole Dotaz vložíme zdrojový kód XSLT transformace.


Pokud máme transformaci zadanou ve FlexiBee, můžeme začít skládat URL adresu, na kterou budeme data ze Shoptetu posílat.

Adresa bude vypadat takto:
https://{server}:{port}/c/{identifikátor firmy}/adresar.xml?format=code:{zkratka}
Server a port jsou standardní server a port FlexiBee serveru. Identifikátor firmy určuje, do které firmy budou zákazníci zapsáni. Zkratka určuje XSLT transformaci, kterou pro přenos využijeme.

Reálná ukázka adresy je například:
https://demo.flexibee.eu:5434/c/demo/adresar.xml?format=code:SHOPTET-ZAKAZNICI

Automatický přenos zákazníků

Opět máme několik možností, jak zákazníky přenést. Můžeme využít Integromat, nástroj cURL nebo si naprogramovat jednoduchý PHP script.

Scénář v Integromatu

Přenášení můžeme rozpohybovat pomocí scénáře v Integromatu. Tento scénář se bude opět skládat ze dvou HTTP modulů. První bude metodou GET načítat data ze Shoptetu a druhý je bude pomocí metody PUT posílat do FlexiBee.

Ukázky nastavení:

Scénář v Integromatu
Scénář v Integromatu

Načtení zákazníků ze Shoptetu
Načtení zákazníků ze Shoptetu

Zápis zákazníků do FlexiBee
Zápis zákazníků do FlexiBee


Využití nástroje cURL

Integromat nemusí být pro všechny tím správným řešením. To ale nevadí. Přenos je možné realizovat pomocí nástroje cURL. Tento nástroj funguje na Windows, macOS i na Linuxu. Vytvoříme si jednoduchý script, který bude složen ze dvou volání cURL.

Ukázka volání:
curl "https://123456.myshoptet.com/export/customers.xml?hash=e3ed846e17cbe694ae2072fbcc81234564fcd7375f64d07c6bf0714561b3c995" > shoptet-customers.xml

curl -X PUT "https://demo.flexibee.eu:5434/c/demo/adresar.xml?format=code:SHOPTET-CUSTOMERS" -T shoptet-customers.xml -u winstrom:winstrom

Shrnutí aktuálního stavu propojení

Pokud postupujeme podle těchto článků, máme již ve FlexiBee stejné produkty jako v e-shopu Shoptet. Také se nám z FlexiBee do e-shopu přenáší stav skladu. Po dnešku máme na obou místech stejný seznam zákazníků.

Příště popíšu postup, jak přenášet objednávky. Při tomto přenosu využijeme všechna doposud přenesená data. Objednávky budou navázány na konkrétního zákazníka a zboží mu bude zarezervováno. Tím bude snížen stav skladu, aby zákazník o zboží již nepřišel :-).

ABRA FlexiBee, E-Shop, REST API, Shoptet

- (10. 10. 2017)
Kája z Norska
Kája z Norska

Jsem programátor, horolezec a tak trochu FlexiBee fanatik :-).
Na CharlieBlogu sepisuji své nápady a poznatky už od roku 2006.