Kasutaja tarvikud

Lehe tööriistad



lt:xmlcore

Skirtumai

Čia matote skirtumus tarp pasirinktos versijos ir esamo dokumento.

Lõlita võrdlemise vaatele

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
lt:xmlcore [2020/07/28 09:17]
ieva [2.4. Pavyzdys PHP kalba]
lt:xmlcore [2021/12/16 15:57]
ignas [Bendras XML duomenų mainų sąsajos aprašymas]
Linija 1: Linija 1:
 ======Bendras XML duomenų mainų sąsajos aprašymas====== ======Bendras XML duomenų mainų sąsajos aprašymas======
 +
 +=====Bendra informacija=====
 +
 +Jei pageidaujama,​ kiekvienoje Directo bazėje galima nustatyti duomenų mainų sąsają, įgalinančią dvipusį duomenų srautą. Svarbu atsiminti, kad sąsaja nėra prieinama pagal numatytuosius nustatymus, tačiau konfigūruojama kiekvienu konkrečiu atveju, atsižvelgiant į konkretaus užduočių rinkinio poreikius. Sąsajos įdiegimas yra apmokamas pagal kainoraštį,​ o apmokėjimo dydis priklauso nuo kiekviena kryptimi judančių duomenų tipų skaičiaus, todėl prieš pradedant darbą, būtina susisiekti su Directo prekybos atstovu ir susitarti dėl tikslių poreikių bei derinti projekto kainą.
  
 Integracijos principai: Integracijos principai:
-    ​* Duomenų formatas XML; +  ​* Duomenų formatas XML; 
-    * Duomenų koduotė UTF-8; +  * Duomenų koduotė UTF-8; 
-    * Metodas informacijai pasiekti HTTPS  (sertifikatas viešai pripažįstamas);​ +  * Metodas informacijai pasiekti HTTPS (sertifikatas viešai pripažįstamas);​ 
-    * GET metodas naudojamas duomenims gauti; +  * GET metodas naudojamas duomenims gauti; 
-    * POST metodas yra naudojamas duomenis išsiųsti;​ +  * POST metodas yra naudojamas duomenis išsiųsti;​ 
-    * Duomenų apsikeitimą visuomet inicijuoja išorinė šalis, nepriklausomai nuo apsikeitimo krypties; +  * Duomenų apsikeitimą visuomet inicijuoja išorinė šalis, nepriklausomai nuo apsikeitimo krypties; 
-    * Į POST užklausą atsakoma sinchronizuotu XML pranešimu, kurio apdorojimas gali daryti įtaką sėkmingam procesui; +  * Į POST užklausą atsakoma sinchronizuotu XML pranešimu, kurio apdorojimas gali daryti įtaką sėkmingam procesui; 
-    * Duomenų struktūra turi atitikti paruoštą XSD schemą. Pageidaujama reikšmes siųsti atributuose.+  * Duomenų struktūra turi atitikti paruoštą XSD schemą. Pageidaujama reikšmes siųsti atributuose
 +  * Directo dokumentų numerių tipas yra integer, tai reiškia, kad didžiausias galimas skaičius yra 2147483647. 
 +  * Tuščios (NULL) reikšmės nebus įtraukiamos į XML su lauko pavadinimu. Tą patį darykite ir siųsdami duomenis į Directo - praleiskite laukus, kuriuose turi būti tuščių (NULL) reikšmių. Reikėtų vengti siųsti laukus su tuščia reikšme, kaip pavyzdžiui:​ customer_code = ""​.
  
 +**Endpoint URL:** [[https://​login.directo.ee/​xmlcore/​demo_lt_153/​xmlcore.asp]] (Jūsų sukurtam servisui pasikeis tik „demo_lt_153“ dalis).
  
-  * **Endpoint URL:** https://​login.directo.ee/​xmlcore/​demo_lt_153/​xmlcore.asp (Jūsų sukurtam servisui pasikeis tik „demo_lt_153“ dalis). 
  
-==== 2.1. Informacijos pasiėmimas iš Directo (OUT) ====+ 
 +==== 2.1. Prieiga prie serviso ==== 
 + 
 +Serviso nuorodos yra pasiekiamos ''​form/​urlencoded''​ POST metodu. Autorizacijai reikalingas raktas turi būti perduodamas POST metodu kintamajame KEY siunčiant užklausą. Jei raktas neteisingas arba raktas siunčiamas neteisingu būdu, gaunamas atsakymas:​ 
 +<code xml><​result type="​5"​ desc="​Unauthorized"/></​code>​ 
 + 
 +Pavyzdys naudojant cURL: 
 +<code bash> 
 +curl -v -d "​key=2852DD553B767B463C807ADB36B5BB2F&​what=item&​get=1&​ts=01.01.2021&​code=000001"​ -H "​Content-Type:​ application/​x-www-form-urlencoded"​ -X POST "​https://​login.directo.ee/​xmlcore/​demo_ee/​xmlcore.asp"​ 
 +</​code>​ 
 + 
 + 
 +==== 2.2. Informacijos pasiėmimas iš Directo (OUT) ====
  
 GET metodo atveju bent 3 parametrai turi būti nurodyti: GET metodo atveju bent 3 parametrai turi būti nurodyti:
-  * get=1 +  ​* **get**=1 
-  * what=SERVISO_KODAS +  ​* **what**=SERVISO_KODAS 
-  * key=SUGENERUOTAS_RAKTAS+  ​* **key**=SUGENERUOTAS_RAKTAS
  
 Papildomi parametrai yra derinami individualiai pagal poreikį, integracijos derinimo metu. Papildomi parametrai yra derinami individualiai pagal poreikį, integracijos derinimo metu.
 +
 +<wrap important>​
 +Šiuose pavyzdžiuose esančios nuorodos yra iliustracinio pobūdžio. Jokiu būdu negarantuojama,​ kad šie URL iš tikrųjų atitiks užklausą. Jei užklausos metu duomenys yra gaunami, jie yra 100% fiktyvūs ir nesusiję su jokių tikrų įmonių duomenimis.
 +</​wrap>​
  
  
-Šio pavyzdžio atveju yra naudjamas ​**what** = "​item"​ ir **key** reikšmė yra "​20DAF3F822B782AF12D1198C23F45604"​. Esant poreikiui, galite peržiūrėti šio pavyzdinio serviso XSD schemą: [[http://​wiki.directo.ee/​_media/​et/​ws_artiklid.xsd|ws_artiklid.xsd]].+Šio pavyzdžio atveju yra naudojamas ​**what** = "​item"​ ir **key** reikšmė yra "​20DAF3F822B782AF12D1198C23F45604"​. Esant poreikiui, galite peržiūrėti šio pavyzdinio serviso XSD schemą: [[http://​wiki.directo.ee/​_media/​et/​ws_artiklid.xsd|ws_artiklid.xsd]].
  
  
 Užklausos pavyzdys, norint gauti visų prekių sąrašą: Užklausos pavyzdys, norint gauti visų prekių sąrašą:
  
-https://​login.directo.ee/​xmlcore/​demo_ee/​xmlcore.asp?​get=1&​what=item&​key=20DAF3F822B782AF12D1198C23F45604+https://​login.directo.ee/​xmlcore/​demo_ee/​xmlcore.asp?​get=1&​what=item
  
 Užklausos pavyzdys, norint gauti konkrečios prekės informaciją:​ Užklausos pavyzdys, norint gauti konkrečios prekės informaciją:​
  
-https://​login.directo.ee/​xmlcore/​demo_ee/​xmlcore.asp?​get=1&​what=item&​code=0000&​key=20DAF3F822B782AF12D1198C23F45604+https://​login.directo.ee/​xmlcore/​demo_ee/​xmlcore.asp?​get=1&​what=item&​code=0000
  
-==== 2.2. Informacijos siuntimas į Directo (IN) ====+==== 2.3. Informacijos siuntimas į Directo (IN) ====
  
-Duomenys siunčiami naudojant POST metodą. +Duomenys siunčiami naudojant ​''​form/​urlencoded'' ​POST metodą.
- +
-Užpildomi trys formos kintamieji:​ +
-  * put=1 +
-  * what=INVOICE +
-  * xmldata=<?​xml version="​1.0"​ encoding="​utf-8"?><​PAYLOAD>​+
  
 +Užpildomi formos kintamieji:
 +  * **put**=1
 +  * **what**=INVOICE
 +  * **key**=SUGENERUOTAS_RAKTAS
 +  * **xmldata**=<?​xml version="​1.0"​ encoding="​utf-8"?><​PAYLOAD>​
  
 Šis siuntimas naudojamas, pavyzdžiui,​ kai pardavimo sąskaita yra sugeneruojama išorinėje sistemoje, kurią reikia perduoti į „Directo“. Šis siuntimas naudojamas, pavyzdžiui,​ kai pardavimo sąskaita yra sugeneruojama išorinėje sistemoje, kurią reikia perduoti į „Directo“.
  
-Šiame pavyzdyje nurodyti URL ir XML pvz. yra visiškai išgalvoti ir negali būti naudojami testavimui. Testavimas visada atliekamas realiame procese.+<wrap important>​ 
 +Šiame pavyzdyje nurodyti URL ir XML pavyzdžiai ​yra visiškai išgalvoti ir negali būti naudojami testavimui. Testavimas visada atliekamas realiame procese. 
 +</​wrap>​
  
 Tarkime, kad šiuo atveju URL pvz. https://​login.directo.ee/​xmlcore/​this_is_the_worlds_greatest_company/​xmlcore.asp Tarkime, kad šiuo atveju URL pvz. https://​login.directo.ee/​xmlcore/​this_is_the_worlds_greatest_company/​xmlcore.asp
Linija 55: Linija 79:
 Pavyzdinis XML: Pavyzdinis XML:
  
-<​code>​+<​code ​xml>
 <?xml version="​1.0"​ encoding="​utf-8"?>​ <?xml version="​1.0"​ encoding="​utf-8"?>​
 <​invoices>​ <​invoices>​
-  <​invoice ​AppKey="​1234567879012345678790" ​InvoiceNr="​123" ​+  <invoice InvoiceNr="​123" ​
       InvoiceDate="​2015-06-07"​ CustomerCode="​CUST001">​       InvoiceDate="​2015-06-07"​ CustomerCode="​CUST001">​
     <​lines>​     <​lines>​
Linija 68: Linija 92:
 </​code>​ </​code>​
  
-Servisas ​sinchroninškai grąžins XML atsakymą su pranešimu kas įvyko.+Servisas ​sinchroniškai grąžins XML atsakymą su pranešimu kas įvyko.
  
 Pavyzdžiui įkėlimas buvo sėkmingas ir Directo sąskaitos dokumentui priskyrė numerį 123: Pavyzdžiui įkėlimas buvo sėkmingas ir Directo sąskaitos dokumentui priskyrė numerį 123:
  
-<​code>​+<​code ​xml>
 <?xml version="​1.0"​ encoding="​UTF-8"​ ?>  <?xml version="​1.0"​ encoding="​UTF-8"​ ?> 
 <​results>​ <​results>​
Linija 83: Linija 107:
 Pavyzdžiui sąskaita numeriu 123 buvo atmesta, nes Directo sistemoje jau egzistavo sąskaitos dokumentas tokiu numeriu: Pavyzdžiui sąskaita numeriu 123 buvo atmesta, nes Directo sistemoje jau egzistavo sąskaitos dokumentas tokiu numeriu:
  
-<​code>​+<​code ​xml>
 <?xml version="​1.0"​ encoding="​UTF-8"​ ?>  <?xml version="​1.0"​ encoding="​UTF-8"​ ?> 
 <​results>​ <​results>​
Linija 92: Linija 116:
 Vienu siuntimu galima įkelti kelias sąskaitas iš karto. Tokiu atveju rezultatas turi būti grąžinamas kiekvienai sąskaitai: Vienu siuntimu galima įkelti kelias sąskaitas iš karto. Tokiu atveju rezultatas turi būti grąžinamas kiekvienai sąskaitai:
  
-<​code>​+<​code ​xml>
 <?xml version="​1.0"​ encoding="​UTF-8"​ ?>  <?xml version="​1.0"​ encoding="​UTF-8"​ ?> 
 <​results>​ <​results>​
Linija 100: Linija 124:
 </​code>​ </​code>​
  
-:!: Svarbu sulaukti atsakymo apie sėkmingą įkėlimą. Jeigu tokio rezultato nesulaukiama arba yra gaunama klaida, siuntimą reikia pakartoti ne anksčiau kaip po minutės.+<wrap important>​ 
 +Svarbu sulaukti atsakymo apie sėkmingą įkėlimą. Jeigu tokio rezultato nesulaukiama arba yra gaunama klaida, siuntimą reikia pakartoti ne anksčiau kaip po minutės. ​Reikėtų vengti kelių užklausų siuntimo vienu metu. 
 +</​wrap>​
  
-==== 2.3. HTML forma ====+==== 2.4. HTML forma ====
  
 Parametrai, kuriuos reikia nurodyti: Parametrai, kuriuos reikia nurodyti:
-  * **What** – webserviso ​pavadinimas. Pvz.: “invoice” jei tai sąskaitos dokumentas.+  * **What** – web serviso ​pavadinimas. Pvz.: “invoice” jei tai sąskaitos dokumentas.
   * **Put** – statinis. Visada „1“ jei tai importas į Directo.   * **Put** – statinis. Visada „1“ jei tai importas į Directo.
   * **Get** - statinis. Visada „1“ jei tai eksportas iš Directo.   * **Get** - statinis. Visada „1“ jei tai eksportas iš Directo.
 +  * **Key** - web serviso autorizacijos raktas.
   * **Xmldata** – dinaminis. Laukus reiktų derinti, kadangi servisas būtų programuojamas individualiai pagal poreikį.   * **Xmldata** – dinaminis. Laukus reiktų derinti, kadangi servisas būtų programuojamas individualiai pagal poreikį.
  
Linija 113: Linija 140:
 Pavyzdinė užsakymo forma: Pavyzdinė užsakymo forma:
  
-<​code>​ +<​code ​html
-<form method="​POST"​ action="​https://​login.directo.ee/​xmlcore/​demo_lt_153/​xmlcore.asp">​+<form method="​POST"​ action="​https://​login.directo.ee/​xmlcore/​this_is_the_worlds_greatest_company/​xmlcore.asp">​
  
  <input name="​what"​ value="​order">​  <input name="​what"​ value="​order">​
Linija 120: Linija 147:
  <input name="​put"​ value="​1">​  <input name="​put"​ value="​1">​
  
- <​textarea name="​xmldata"​ rows="​10"><​orders><​order ​key="​asdf12345678" ​order_time="​31.01.2018"​ number="​111222"​ customer_code="​FA"​ customer_name="​TEST TEST pirkejas"​ customer_order="​PORD11111"​ deliverydate="​31.01.2018"​ paymentterm="​10"​ customer_contact="​customer contact"​ phone="​phone"​ email="​email@test.com <​mailto:​email@test.com>​ " email_notification="​email notification"​ fax="​fax"​ regno="​regno"​ VATno="​vatno"​ comment="​comment"​ address1="​Address1"​ address2="​Address2"​ address3="​Address3"​ deliveryaddress1="​DAddress1"​ deliveryaddress2="​DAddress2"​ deliveryaddress3="​DAddress2"​ order_type="​otype"​ order_status="​ostatus"><​line item="​109819-0001"​ variant="​Dydziai_a"​ price="​100"​ discount="​15"​ qty="​10"​ unit="​unit"​ description="​item description"​ comment="​comment"​ supplier="​supp"​ rn="​1"></​line><​line barcode="​8714554972899"​ price="​100"​ discount="​15"​ qty="​10"​ unit="​unit"​ description="​item description"​ comment="​comment"​ supplier="​supp"​ rn="​2"></​line></​order></​orders></​textarea>​+ <input name="​key"​ value="​2852DD553B767B463C807ADB36B5BB2F">​ 
 + 
 + <​textarea name="​xmldata"​ rows="​10"><​orders><​order order_time="​31.01.2018"​ number="​111222"​ customer_code="​FA"​ customer_name="​TEST TEST pirkejas"​ customer_order="​PORD11111"​ deliverydate="​31.01.2018"​ paymentterm="​10"​ customer_contact="​customer contact"​ phone="​phone"​ email="​email@test.com <​mailto:​email@test.com>​ " email_notification="​email notification"​ fax="​fax"​ regno="​regno"​ VATno="​vatno"​ comment="​comment"​ address1="​Address1"​ address2="​Address2"​ address3="​Address3"​ deliveryaddress1="​DAddress1"​ deliveryaddress2="​DAddress2"​ deliveryaddress3="​DAddress2"​ order_type="​otype"​ order_status="​ostatus"><​line item="​109819-0001"​ variant="​Dydziai_a"​ price="​100"​ discount="​15"​ qty="​10"​ unit="​unit"​ description="​item description"​ comment="​comment"​ supplier="​supp"​ rn="​1"></​line><​line barcode="​8714554972899"​ price="​100"​ discount="​15"​ qty="​10"​ unit="​unit"​ description="​item description"​ comment="​comment"​ supplier="​supp"​ rn="​2"></​line></​order></​orders></​textarea>​
  
  <input TYPE="​submit">​  <input TYPE="​submit">​
Linija 130: Linija 159:
 ==== 2.4. Pavyzdys PHP kalba ==== ==== 2.4. Pavyzdys PHP kalba ====
  
-Į servisą kreiptis ​gali bet kokia kalba, jeigu ta programavimo kalba yra galimybė padaryti https request‘ą,​ pateikiame pavyzdį PHP kalba:+Į servisą ​ ​galima ​kreiptis bet kokia kalba, jeigu ta programavimo kalba yra galimybė padaryti https request‘ą,​ pateikiame pavyzdį PHP kalba:
  
 **OUT** **OUT**
-<​code>​ +<​code ​php
-$url = '​https://​login.directo.ee/​xmlcore/​demo_ee/​xmlcore.asp?​get=1&​what=item&​key=20DAF3F822B782AF12D1198C23F45604';+$url = '​https://​login.directo.ee/​xmlcore/​this_is_the_worlds_greatest_company/​xmlcore.asp'; 
 +$key = '​2852DD553B767B463C807ADB36B5BB2F';
  
 $ch = curl_init();​ $ch = curl_init();​
Linija 141: Linija 171:
 curl_setopt($ch,​ CURLOPT_FOLLOWLOCATION,​ true); curl_setopt($ch,​ CURLOPT_FOLLOWLOCATION,​ true);
 curl_setopt($ch,​ CURLOPT_URL,​ $url ); curl_setopt($ch,​ CURLOPT_URL,​ $url );
-curl_setopt($ch,​ CURLOPT_POST, ​0); +curl_setopt($ch,​ CURLOPT_POSTFIELDS,​ '​key='​.urlencode($key) . '&​what=item&​get=1&​ts=01.01.2021&​code=000001'​ );  
 +curl_setopt($ch,​ CURLOPT_POST, ​1); 
 + 
 $result = curl_exec($ch);​ $result = curl_exec($ch);​
    
Linija 152: Linija 183:
    
 print '<​pre>';​ print '<​pre>';​
-  +print_r($data);​ 
-foreach ($data->items->item as $item) { +foreach ($data->​item as $item) { 
-      print $item['​Code'] . chr(9) .  '<​b>'​ . $item['​Name'] . '</​b>'​ . chr(9) .  $item['​Class'] . '<​br>';​ + print ​'​Code:'​.$item['​code'] . chr(9) .  '<​b>'​ . $item['​name'] . '</​b>'​ . chr(9) .  $item['​class'] . '<​br>​Datafields:​<​br>';​ 
-      foreach ($item->​datafields->​data as $df ) { + foreach ($item->​datafields->​data as $df ) { 
-            print chr(9) . $df['​code'​] . ':'​ . $df['​content'​] . '<​br>';​ + print chr(9) . $df['​code'​] . ':'​ . $df['​content'​] . '<​br>';​ 
-      }+ }
 } }
 </​code>​ </​code>​
Linija 163: Linija 194:
  
 **IN** **IN**
-<​code>​ +<​code ​php
-$xmldata ​= '<'.'?xml version="​1.0"​ encoding="​UTF-8"?>​ +$url = 'https://​login.directo.ee/​xmlcore/​this_is_the_worlds_greatest_company/​xmlcore.asp'
-<​invoice ​AppKey="​1234567879012345678790" ​InvoiceNr="​123" ​+$key = '​2852DD553B767B463C807ADB36B5BB2F';​ 
 + 
 +$xmldata =  <<<​XML 
 +<?xml version="​1.0"​ encoding="​utf-8"?>​ 
 +<invoice InvoiceNr="​123" ​
       InvoiceDate="​2015-06-07"​ CustomerCode="​CUST001">​       InvoiceDate="​2015-06-07"​ CustomerCode="​CUST001">​
     <​lines>​     <​lines>​
Linija 171: Linija 206:
       <line ProductID="​FREESAMPLE"​ Quantity="​1"​ UnitPriceWoVAT="​0.00"/>​       <line ProductID="​FREESAMPLE"​ Quantity="​1"​ UnitPriceWoVAT="​0.00"/>​
     </​lines>​     </​lines>​
-</​invoice>';​+</​invoice>'​ 
 +XML; 
    
-$url '​https://​login.directo.ee/​xmlcore/​this_is_the_worlds_greatest_company/​xmlcore.asp'​;+$ch curl_init();
    
-$ch = curl_init();​ 
 curl_setopt($ch,​ CURLOPT_HEADER,​ 0); curl_setopt($ch,​ CURLOPT_HEADER,​ 0);
 curl_setopt($ch,​ CURLOPT_RETURNTRANSFER,​ true); curl_setopt($ch,​ CURLOPT_RETURNTRANSFER,​ true);
Linija 181: Linija 217:
 curl_setopt($ch,​ CURLOPT_URL,​ $url ); curl_setopt($ch,​ CURLOPT_URL,​ $url );
 curl_setopt($ch,​ CURLOPT_POST,​ 1); curl_setopt($ch,​ CURLOPT_POST,​ 1);
-  +curl_setopt($ch,​ CURLOPT_POSTFIELDS,​ 'key='​.urlencode($key).'&​xmldata='​.urlencode($xmldata).'&​put=1&​what=invoice'​ ); 
-curl_setopt($ch,​ CURLOPT_POSTFIELDS,​ '​xmldata='​.urlencode($xmldata).'&​put=1&​what=invoice'​ ); +
 $result = curl_exec($ch);​ $result = curl_exec($ch);​
 +curl_close($ch);​
    
-print '<textarea cols=80 rows=10>'​ . $result . '</​textarea>';+echo '<pre>';
    
-curl_close($ch);+print '</​pre><​textarea cols=80 rows=10>'​ . $result . '</​textarea>'​;
  
 </​code>​ </​code>​
lt/xmlcore.txt · Keista: 2023/09/15 15:27 vartotojo jaroslav