Prepojenie eshopu s Pohodou

Pohoda je v súčasnej dobe pomerne rozšírený účtovný a ekonomický softvér. Umožňuje evidovať skladové zásoby, vytvárať objednávky a faktúry, viesť kompletné účtovné jednotky a mnoho ďalších funkcií. Pre ekonómov to je nepochybne vynikajúca voľba. O to viac ma prekvapilo, že prepojenie Pohody s internetom (e-shop, iná aplikácia v prostredí webu) nie je triviálna záležitosť, hoci podľa schémy to vyzerá jednoducho.

Pohoda komunikácia - schéma
Obrázok: https://www.stormware.sk

Ako prvé odporúčam nasledovnú stránku:

https://www.stormware.sk/pohoda/xml/

Je tam uvedený základný prehľad princípu komunikácie, zoznam podporovaných dokladov pre import a export. Je dobré web prejsť a trochu naštudovať problematiku. Ďalej sa pokúsim trochu načrtnúť moje riešenie prepojenia Pohoda a všeobecný internetový obchod (v jazyku PHP), ktoré som rozdelil na dve skupiny.

1. Manuálne prepojenie:

Ako je uvedené na stránkach Pohody: https://www.stormware.sk/pohoda/xml/obecny-obchod/nastaveni/, nastavenie nie je nejako extra náročné. V časti Export a Import zadávame URL webovej služby, ktorá dokáže komunikovať s Pohodou na jednej strane a odovzdávať získané údaje druhej strane, v tomto prípade e-shopu. Na stránkach stormware.sk nájdete ukážku webovej služby len v jazyku ASP. Nižšie priložený kód je ukážka jednoduchej webovej služby pre export zásob v jazyku PHP.

<?php
header("Content-Type: text/xml; charset=windows-1250"); 

//poziadavka na Pohodu, vratane atributu ResponsePack s parametrom state = ok
echo '<?xml version="1.0" encoding="Windows-1250"?>
<rsp:responsePack version="1.0" id="00000001" state="ok" application="Transformace" note="response from the EShop" xmlns:rsp="http://www.stormware.cz/schema/response.xsd">
<dat:dataPack id="Za001" ico="000000" application="StwTest" version="2.0" note="Export zásob"  
xmlns:dat="http://www.stormware.cz/schema/version_2/data.xsd"  
xmlns:stk="http://www.stormware.cz/schema/version_2/stock.xsd" 
xmlns:ftr="http://www.stormware.cz/schema/version_2/filter.xsd" 
xmlns:lStk="http://www.stormware.cz/schema/version_2/list_stock.xsd"  
xmlns:typ="http://www.stormware.cz/schema/version_2/type.xsd">
  <dat:dataPackItem id="a55" version="2.0">
  <!-- export zásoby -->
    <lStk:listStockRequest version="2.0" stockVersion="2.0">
      <lStk:requestStock>
        <ftr:filter>
     <!--export všech zásob-->
        </ftr:filter>
      </lStk:requestStock>
    </lStk:listStockRequest>
  </dat:dataPackItem>
</dat:dataPack></rsp:responsePack>';

file_put_contents('export-zasob-z-pohody-na-web.xml', file_get_contents('php://input')); //ulozenie POST dat z Pohody do suboru
?>

Tento kód je možné vložiť do súboru s koncovkou *php a s názvom napríklad export.php. Následne po nahratí súboru na doménu sa z neho stáva webová služba, umiestnená na:

www.domena.sk/export.php

Ak takýto link vložíme v Pohode do časti nastavenia všeobecného obchodu a následne spustíme dátovú komunikáciu / export údajov na internet webová služba uloží dáta z Pohody do súboru export-zasob-z-pohody-na-web.xml s ktorým je možné už elegantne ďalej pracovať. Pri kopírovaní kódu je potrebné nastaviť IČO vašej účtovnej jednotky. Podobnou filozofiou je možné vytvoriť webovú službu pre export a import ďalších dokladov, ktoré Pohoda podporuje. Veľmi dôležitá poznámka na záver: Prenos údajov medzi programom POHODA a všeobecným internetovým obchodom je možné spustiť len z programu POHODA. V praxi to znamená, že z internetového prostredia nie je možné priamo kontaktovať Pohodu pre získanie dát. Pohoda momentálne nepodporuje nastavenie pravidelného spúšťania dátovej komunikácie (čo sa veľmi čudujem). A tu nastáva otázka automatického prepojenia.

2. Automatické prepojenie:

Po dlhom hľadaní, konzultáciách s technickou podporou som dospel k záveru, že na automatickú komunikáciu Pohody s vašou aplikáciou na internete je potrebný nástroj, ktorý bude nainštalovaný na počítači, kde je aj Pohoda a ktorý bude zabezpečovať pravidelnú požiadavku. Neexistuje jednotné riešenie a tento problém je možné teda vyriešiť po svojom. Niektorí programátori využijú vlastný nástroj na priame napojenie na databázu Pohody a dáta posielajú pravidelne smerom z lokálnej siete na internet. Toto riešenie sa mi nepáčilo (štruktúra databáz Pohody nie je verejne zdokumentovaná, v porovnaní s využitím API, prípadne XML komunikácie je zaručená vyššia bezpečnosť). Skúšal som si teda vytvoriť vlastné. Pohoda obsahuje integrovaný http server, ktorý sa volá mServer. Využíva na prenos XML informácií HTTP protokol pomocou páru požiadavka a odpoveď. Bez nutnosti manuálneho spúšťania dátovej komunikácie v grafickom rozhraní Pohody. Ako je uvedené na stránkach stormware.sk, pre komunikáciu z internetovej siete do lokálnej je potrebné mať webový konektor.

mServer-webserver
Obrázok: https://www.stormware.sk

Moje riešenie je približne nasledovné: Na počítači, kde je inštalovaná Pohoda je potrebné nainštalovať lokálny server Apache, pre prácu s PHP skriptovaním (napríklad XAMPP). Vytvoríme si teda vlastný lokálny server, kde môžeme spúšťať PHP. mServer Pohody bude spustený pomocou príkazového riadku a bude bežať v pozadí. Využitím funkcií fsockopen, fputs, fgets z tohto Apache servera pošleme požiadavku na mServer, ktorý nám vráti požadované údaje. Týmto spôsobom získame dáta z Pohody do prostredia lokálneho servera, kde s nimi už môžeme robiť čokoľvek – aj poslať ich na FTP ako XML súbor, alebo inak do verejnej internetovej siete. Keďže dopyt vytvára spustenie PHP skriptu, je možné nastaviť časovač a pravidelne túto akciu opakovať. Taktiež by bolo zaujímavé mapovať porty na Apache localhost a spúšťať lokálne PHP skripty z internetu, napríklad automatickým spúšťaním cez CRON. Tento spôsob je podmienený vhodným zabezpečením.


Vyššie som rámcovo spomenul moje 2 riešenia dátovej komunikácie s Pohodou. Netvrdím, že sú najlepšie, ale fungujú. Najproblematickejšie je získať samotné údaje z Pohody v pravidelnom intervale a deponovať ich do prostredia webu. Ďalšie spracovanie parsovaním XML štruktúry už nie je väčší problém.

V prípade záujmu o spoluprácu pri prepojení internetovej aplikácie (napríklad e-shopu) s účtovným systémom Pohoda ma kontaktujte. Moje riešenia obsahujú ďalej:

Skript pre ukážku webovej služby pre export dát Pohoda -> e-shop s požadovaným dokladom

Skript pre ukážku webovej služby pre import dát e-shop -> Pohoda s požadovaným dokladom

Skript pre ukážku webovej služby pre dátovú komunikáciu localhost – mServer v oboch smeroch

Webový konektor pre dátovú komunikáciu z prostredia verejnej siete internet do privátnej siete intranet s vhodným zabezpečením

Skript pre parsovanie XML údajov do požadovanej podoby, prípadne skript s MySQL dopytmi na INSERT a UPDATE

https://www.stormware.sk

Pridať komentár k článku

Róbert Dermek: Dobrý deň, potrebovali by sme náš eshop, vytvorený cez systém Shoptet, prepojiť so skladom ekonomického systému Pohoda. Chceli by sme mať automaticky online aktualizované skladové zásoby. Momentálne komunikujeme s firmou Napojse.cz, ktorí tvrdili, že to dokážu zrealizovať. Požadujú URL adresu pre mServer, no my máme k dispozícií iba lokálne URL na našom serveri, ktoré však nie je dostupné online. Údaje by mali byť prístupné na nejakej HTTP(S) adrese. Vedeli by ste nám prosím pomôcť s vyriešením tohto problému? Ďakujem za odpoveď. S pozdravom