Sisujuht

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:

Endpoint URL: https://login.directo.ee/xmlcore/demo_lt_153/xmlcore.asp (Jūsų sukurtam servisui pasikeis tik „demo_lt_153“ dalis).

1. Prieiga prie serviso

Serviso nuorodos yra pasiekiamos form/urlencoded POST metodu. Autorizacijai reikalingas raktas turi būti perduodamas POST metodu kintamajame KEY: 2852DD553B767B463C807ADB36B5BB2F siunčiant užklausą. Jei raktas neteisingas arba raktas siunčiamas neteisingu būdu, gaunamas atsakymas:

<result type="5" desc="Unauthorized"/>

Pavyzdys naudojant cURL:

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"

2. Pavydžiai

Toliau pateikti pavyzdžiai turi būti laikomi tik apytiksliais ir svarbu atsiminti, kad konkrečioje kuriamoje sąsajoje beveik tikrai bus naudojamos kitokios schemos, URL, parametrai, apribojimai, žinutės atsakymai ir raktai nei pateiktos pavyzdyje. 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. Norėdami išbandyti, naudokite šią formą: https://login.directo.ee/xmlcore/demo_ee/webupload.html

2.1. Informacijos pasiėmimas iš Directo (OUT)

GET metodo atveju bent 3 parametrai turi būti nurodyti:

Papildomi parametrai yra derinami individualiai pagal poreikį, integracijos derinimo metu.

Šiame pavyzdyje naudojami what=item ir get=1. Visi filtrai galimi, jei schemoje yra atitinkamas laukas. Pavyzdžiui, „class“, „code“, „barcode“, „supplier“, „supplieritem“, „closed“, „ts“ straipsnių aprašomoji struktūros schema: https://login.directo.ee/xmlcore/demo_ee /ws_artiklid.xsd

Užklausa prekėms pagal išsaugojimo datą (ts = Time stamp): https://login.directo.ee/xmlcore/demo_ee/xmlcore.asp?what=item&get=1&ts=01.01.2021

Laiko filtras taip pat gali naudoti laiką taip: & ts = 01.03.2021 12:30 / & ts = 01.03.2021%2012:30

Užklausos pavyzdys, norint gauti visų prekių sąrašą: https://login.directo.ee/xmlcore/demo_ee/xmlcore.asp?get=1&what=item

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

Pirkėjo išvestis (OUT):

https://login.directo.ee/xmlcore/demo_ee/xmlcore.asp?get=1&what=customer&ts=01.01.2021

Filtro parinkčių pavyzdžiai: „code“, „loyaltycard“, „regno“, „email“, „phone“, „closed“, „ts“ pirkėjo struktūros schema: https://login.directo.ee/xmlcore/demo_ee/ws_customers.xsd

Sandėlio kiekio išvestis (OUT):

https://login.directo.ee/xmlcore/demo_ee/xmlcore.asp?get=1&what=stocklevel

Filtro parinkčių pavyzdžius: „code“, „stock“, apibūdinanti sandėlio kiekio schema: https://login.directo.ee/xmlcore/demo_ee/ws_laoseis.xsdt

2.3. Informacijos siuntimas į Directo (IN)

Duomenys siunčiami naudojant form/urlencoded POST metodą.

Užpildomi formos kintamieji:

Įvesties sąsajoje XML turi būti išsiųstas adresu https://login.directo.ee/xmlcore/demo_ee/xmlcore.asp POST su kintamaisiais put = 1, key = [appkey value], what = order (arba what = customer arba what = item) ir xmldata = [XML turinys] XML įvestis turi atitikti schemą.

Šiame pavyzdyje nurodyti URL ir XML pavyzdžiai yra visiškai išgalvoti ir negali būti naudojami testavimui. Testavimas visada atliekamas realiame procese.

Praktinis pavyzdys

Tokio tipo įvestis naudojama, pavyzdžiui, kai išorinėje sistemoje generuojami pardavimo užsakymai, kurie turi būti atspindėti Directo. Taip pat, pateikiamas pirkėjų schemos aprašymas.

Tarkime, kad šiuo atveju URL pvz. https://login.directo.ee/xmlcore/this_is_the_worlds_greatest_company/xmlcore.asp

Pavyzdinio serviso XSD schemą: http://wiki.directo.ee/_media/et/xml_in_arved.xsd.

Pavyzdinis XML:

<?xml version="1.0" encoding="utf-8"?>
<invoices>
  <invoice InvoiceNr="123" 
      InvoiceDate="2015-06-07" CustomerCode="CUST001">
    <lines>
      <line ProductID="KILLERPRODUCT" Quantity="3" UnitPriceWoVAT="123.45"/>
      <line ProductID="FREESAMPLE" Quantity="1" UnitPriceWoVAT="0.00"/>
    </lines>
  </invoice>
</invoices>

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:

<?xml version="1.0" encoding="UTF-8" ?> 
<results>
  <Result Type="0" Desc="OK" docid="123" doctype="INVOICE" submit="Invoices" /> 
</results>

Jeigu atributo „Type“ reikšmė nėra „0“, tuomet įkėlimo metu įvyko klaida. Tokiu atveju klaidos patikslinimas yra aprašytas atribute „Desc“.

Pavyzdžiui sąskaita numeriu 123 buvo atmesta, nes Directo sistemoje jau egzistavo sąskaitos dokumentas tokiu numeriu:

<?xml version="1.0" encoding="UTF-8" ?> 
<results>
  <Result Type="1" Desc="Duplicate" docid="123" doctype="INVOICE" submit="Invoices" /> 
</results>

Vienu siuntimu galima įkelti kelias sąskaitas iš karto. Tokiu atveju rezultatas turi būti grąžinamas kiekvienai sąskaitai:

<?xml version="1.0" encoding="UTF-8" ?> 
<results>
  <Result Type="1" Desc="Duplicate" docid="123" doctype="INVOICE" submit="Invoices" /> 
  <Result Type="0" Desc="OK" docid="124" doctype="INVOICE" submit="Invoices" /> 
</results>

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.

Pirkėjo įvesties sąsaja:

Duomenys aprašyti schemoje https://login.directo.ee/xmlcore/demo_ee/xml_IN_kliendid.xsd . Duomenų registravimas yra toks pat kaip užsakymų registravimas. XML, kuris atitinka schemą, bet nenaudoja visų galimų atributų, gali atrodyti taip:

<?xml  version = "1.0"  encoding = "utf-8" ?> 
<customers >
   <customer  code = "Customer  code1 " name = "Name"  address1 = "address11"  address2 = "address21"  address3 = "address31"  email = " email1 "  regno = " regno1 "  class = " class1 "  type = " 1 "  > 
  </ customer >
  </ customers >

2.4. HTML forma

Parametrai, kuriuos reikia nurodyti:

Pavyzdinė užsakymo forma:

<form method="POST" action="https://login.directo.ee/xmlcore/this_is_the_worlds_greatest_company/xmlcore.asp">
 
	<input name="what" value="order">
 
	<input name="put" value="1">
 
	<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">
 
</form>

2.5. Pavyzdys PHP kalba

Į servisą galima kreiptis bet kokia kalba, jeigu ta programavimo kalba yra galimybė padaryti https request‘ą, pateikiame pavyzdį PHP kalba:

OUT

$url = 'https://login.directo.ee/xmlcore/this_is_the_worlds_greatest_company/xmlcore.asp';
$key = '2852DD553B767B463C807ADB36B5BB2F';
 
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_URL, $url );
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);
 
header('Content-Type: text/html; charset=utf-8');
 
print '<textarea cols=80 rows=10>' . $result . '</textarea>';
 
$data = new SimpleXMLElement($result);
 
print '<pre>';
print_r($data);
foreach ($data->item as $item) {
	print 'Code:'.$item['code'] . chr(9) .  '<b>' . $item['name'] . '</b>' . chr(9) .  $item['class'] . '<br>Datafields:<br>';
	foreach ($item->datafields->data as $df ) {
		print chr(9) . $df['code'] . ':' . $df['content'] . '<br>';
	}
}

IN

$url = 'https://login.directo.ee/xmlcore/this_is_the_worlds_greatest_company/xmlcore.asp';
$key = '2852DD553B767B463C807ADB36B5BB2F';
 
$xmldata =  <<<XML
<?xml version="1.0" encoding="utf-8"?>
<invoice InvoiceNr="123" 
      InvoiceDate="2015-06-07" CustomerCode="CUST001">
    <lines>
      <line ProductID="KILLERPRODUCT" Quantity="3" UnitPriceWoVAT="123.45"/>
      <line ProductID="FREESAMPLE" Quantity="1" UnitPriceWoVAT="0.00"/>
    </lines>
</invoice>
XML;
 
 
$ch = curl_init();
 
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_URL, $url );
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'key='.urlencode($key).'&xmldata='.urlencode($xmldata).'&put=1&what=invoice' );
 
$result = curl_exec($ch);
curl_close($ch);
 
echo '<pre>';
 
print '</pre><textarea cols=80 rows=10>' . $result . '</textarea>';

2.6. Postman

Postman aplinkos išvestį ir įvestį galima atsisiųsti čia, tada importuoti kaip kolekciją į Postman ir ten išbandyti.

3. Atsakymų kodai

kodas atsakymas/ResponsePaaiškinimasDescription
0 Created Dokumentas sėkmingai sukurtas Document successfully created
0 Updated Dokumentas sėkmingai atnaujintas (jei naudojamas automatinis dokumentų atnaujinimas) Document successfully updated (if document update feature is used)
0 ConfirmedDokumentas sėkmingai patvirtintas (jei naudojamas automatinis dokumentų patvirtinimas)Document successfully confirmed (if auto document confirmation is used)
2 Too secure location Informuokite DirectoPlease inform Directo
3 Database is moved to a new server. Takes about 15 minutes Duomenų bazė perkelta į kitą serverį, prašome palaukti 15 minučiųDatabase has been transferred to another server, please wait 15 minutes
4 Database is closed - user count is zero Duomenų bazė uždaryta Database closed
5 Unauthorized Neteisingas raktas ar neteisingai paduotas raktas (key)Incorrect key or incorrect given key
6 Invalid user given Neegzistuojantis darbuotojas Non-existent user
7 Invalid IP source given Neegzistuojantis arba apribotas darbuotojasNon-existent or restricted user
8 Invalid xml given: … Klaidingas ar neteisingos struktūros XML (skaityti pranešimo tekstą)Invalid, incorrectly structured XML (please read the message)
9 Error on import: … Klaida susijusi su procedūra, informuokite DirectoAn error is related to the procedure, please inform Directo
11 Duplicate Toks dokumentas jau egzistuoja Document already exists
12 Missing document identificator Nenustatytas dokumento unikalus laukasDocument unique field has not been set
13 Missing customer code / Missing customer regno Nenusiųstas arba nenustatytas pirkėjo unikalus laukasCustomer unique field has not been sent or set
14 Update not allowed Negalima atnaujinti dokumento (greičiausiai su dokumentu yra kitų susijusių dokumentų)Unable to update document (if document is commited or has related documents)
17 Document insert failed Dokumentas nesukurtas, nes nerasta numeracija (nenurodyta, nenustatyta, pasibaigusi,…) Document not created, this is because the number has not been found (not identified, not set up, expired…)
18 uniqueid field not found Nenustatytas unikalus laukas, reikalingi nustatymai transporto parametruoseUnique field has not been set up, please check transports parameters
19 Removal of document not allowed Dokumento ištrinti nepavyko (gali būti patvirtintas, yra susijusių dokumentų,…)Failed to delete document (can be confirmed, it has related documents,…)
29 Not confirmed: … Dokumentas nepatvirtintas, jei naudojamas automatinis patvirtinimas, priežastis pateikta atsakymeDocument not confirmed, reason given in response
30 Created Antrinis dokumentas sukurtas sėkmingai (susijusio dokumento: pirkėjo, apmokėjimo,…)Related document created successfully
30 Updated Antrinis dokumentas atnaujintas sėkmingai (susijusio dokumento: pirkėjo, apmokėjimo,…)Related document updated successfully
30 Confirmed Antrinis dokumentas patvirtintas sėkmingai (susijusio dokumento: pirkėjo, apmokėjimo,…)Related document confirmed successfully
31 … not found Klaidos priežastis nurodyta atsakyme (neįvykdyta būtina sąlyga norint sukurti susijusį dokumentą, pvz., klientas, apmokėjimas ir pan.) The reason for the error is given in the response (prerequisite of creation of related document like customer, payment etc. not met)
39 … not confirmed: … Antrinio dokumento patvirtinti nepavyko (jei naudojamas susijusio dokumento automatinis dokumento patvirtinimas), priežastis nurodyrta atsakymeThe related document could not be confirmed (if auto document confirmation for related document is in use), reason is given in the responde
90 Another request is currently active Šiuo metu yra vykdoma kita užklausa. Palaukite, kol ankstesnė užklausa bus atlikta prieš siunčiant sekančią užklausą.Another request is currently active. Please wait until previous request is completed before sending another request.
99 No processable XML data found for document: … Informuokite DirectoPlease inform Directo