mk logo

Koncept integracije

Povezavo med spletno trgovino in MK se lahko izvede na naslednje načine :

Splošna oblika klicev

Za vse metode je značilno :

- opr_code : koda rezultata. Če je 0, potem je OK. Vse ostalo so napake,
- opr_code_app : koda aplikacijske napake, če do nje pride,
- opr_desc : tehnični opis napake v primeru sestemske napake,
- opr_desc_app : določene napake so aplikacijske in v tem primeru se izpiše enako sporočilo o napaki, kot se izpiše v MetaKocka aplikaciji.
- opr_time_ms : čas izvajanja zahtevka na strežniku v milisekundah

Sistemske napake :

opr_code opr_desc Opis oz. vzrok
0 / Operacija je bila uspešno izvedena.
1 Unknown internal server error Neznana napaka na strežniku
2 Paramether ‘X’ is required paramether ; Paramether ‘X’ is in wrong form Nekaj je narobe s vhodnim parametrov. Lahko, da je obvezen, podana vrednost predolga ali napačne oblike, itd
3 Invalid value for secret_key and company_id
4 IP address ‘192.1.1.1’ is not allowed for company_id = 23
5 Quote exceeds Preveliko število zahtevkov v določenem obdobju. Glej 'Omejitev števila klicev'.
6 Application error Napaka in opis napake se nahaja v parametru 'opr_code_app' in 'opr_desc_app'

Običajen odgovor v primeru napake :

{
    "opr_code":"2",
    "opr_desc":"artikel eshop_001",
    "opr_time_ms":"8"
}

Izvorna koda primerov

PHP

Artikli

product_add – dodajanje artiklov

Opis : Dodajanje novih artiklov. Če že obstaja artikel z enako count_code in code (to v praksi pomeni enaki artikel), dobimo napako. Ob uspešnem dodajanju dobimo tudi interno oznako artikla.
URL : https://main.metakocka.si/rest/eshop/v1/json/product_add

Primer klica

{
    "secret_key":"my_secreat_key",
    "company_id":"16",
    "count_code":"eshop_001",
    "code":"eshop_001_sif",
    "name":"artikel eshop_001",
    "name_desc": "artikel eshop_001 - daljsi opis",    
    "unit":"kos",
    "service":"false",
    "sales":"true",
    "purchasing":"false",
    "height":"12.23",
    "depth":"4.12",
    "weight":"6.3",
}
Atribut Obvezen? V MK Tip / max dolžina Opomba
count_code NE Id. Artikla char, 30 Edinstvena oznaka artikla v spletni trgovini (recimo ID sekvence v podatkovni bazi). Največ dolžine 30 znakov. Za podjetje mora biti nujno unique. Če ni, bo MK dodala dodatno številko (primer : '1000' -> '10001'). Če parameter ni podan, potem mora biti v MK nastavljeno avtomatično številčenje prodajnih artiklov
code DA Šifra char, 20 Običajno je to šifra artikla, ki jo določi proizvajalec. Največ 20 znakov.
name DA Naziv artikla char, 200 Poljubni naziv artikla
name_desc NE Dodatni opis char, 700 Dodatni poljubni opis artikla
unit DA EM 1 šifrant Primer vrednosti : kol, m2, par, ura, itd
Service NE Storitev bool Če je prazna vrednost, potem je to enako kot 'false'.
Sales NE Prodajni bool Če je prazna vrednost, potem je to enako kot 'false'.
Purchasing NE Nabavni bool Če je prazna vrednost, potem je to enako kot 'false'.
height NE Višina decimal /
width NE Širina decimal /
depth NE Globina decimal /
weight NE Teža decimal /

Primer odgovora

{
    "opr_code":"0",
    "opr_time_ms":"33",
    "mk_id":"1600001744",
    "count_code":"eshop_002"
}

Atribut Vedno prisoten? Tip / max dolžina Opis
mk_id DA Int, 18 ID artikla v MK. Uporabno za naslednje klice kot edinstveni identifikator.
count_code DA char, 20 Ponovitev poslanega count_code oz. spremenjeni, če v MK že obstaja.

Primer kode

(product_add_json.php)

<?php
    require_once("Pest.php");
 
    $url = 'https://main.metakocka.si/rest/eshop/v1/json/product_add';
    $company_id = '16';
    $secret_key = 'my_secret_key';
 
    $requestJSON = array (
        'secret_key'=>$secret_key, 'company_id'=>$company_id, 'count_code'=>'eshop_001',
        'code'=>'eshop_001_sif', 'name'=>'artikel eshop_001', 'name_desc'=>'artikel eshop_001 - daljsi opis',    
        'unit'=>'kos', 'service'=>'false', 'sales'=>'true', 'purchasing'=>'false', 'height'=>'12.23',
        'depth'=>'4.12', 'weight'=>'6.3'
    );
 
    echo '<html><body>';
    echo '<b>URL</b> : '.$url.'<br/>';
    echo '<b>POST data</b> : '.json_encode($requestJSON).'<br/>';
    echo '<hr/>';
    echo '<b>Request start...</b><br/>';
    $pest = new Pest($url);
    $thing = $pest->post('', 'application/json', json_encode($requestJSON));
 
    echo '<b>Respond : </b>'.$thing;
    echo '</body></html>';    
?>

product_update – sprememba opisa

Opis : izvedba popravkov podatkov na artiklu. V primeru konflikta s pravili za zagotavljanje konsistentnosti podatkov, metoda vrne ustrezno napako.
URL : https://main.metakocka.si/rest/eshop/v1/json/product_update

Primer klica

{
    "secret_key":"my_secreat_key",
    "company_id":"16",
    "count_code":"eshop_001",
    "code":"eshop_001_sif",
    "name":"artikel eshop_001",
    "name_desc": "artikel eshop_001 - daljsi opis",    
    "unit":"kos",
    "service":"false",
    "sales":"true",
    "purchasing":"false",
    "height":"12.23",
    "depth":"4.12",
    "weight":"6.3",
}

Opombe :

product_delete – brisanje artikla

Opis : brisanje obstoječega artikla. V primeru konflikta s pravili za zagotavljanje konsistentnosti, se vrne ustrezna napaka.
URL : https://main.metakocka.si/rest/eshop/v1/json/product_delete

Primer klica

{
    "secret_key":"my_secret_key",
    "company_id":"16",
    "count_code":"eshop_003"
}

Opombe :

product_list - podatki o artiklih

Opis : izpis vseh artiklov s pripadajočimi podatki in stanjem zaloge na skladišču
URL : https://main.metakocka.si/rest/eshop/v1/json/product_list

Primer klica

{
    "secret_key":"my_secret_key",
    "company_id":"16",
    "sales":"true",
    "return_warehause_stock":"true"
}

Atribut Obvezen? V MK Tip / max dolžina Opomba
sales NE Artikel -> Prodajni bool Artikel mora biti prodajni
purchase NE Artikel -> Nabavni bool Artikel mora biti nabavni
service NE Artikel -> Storitev bool Artikel mora biti storitev
work NE Artikel -> Delo bool Artikel mora biti delo
return_warehause_stock NE / bool ali vrnemo tudi podatke o zalogi. Če je parameter nastavljen, potem v odgovoru za vsak artikel dobimo vrednost "amount". Tudi če artikla nikoli ni bilo na skladišču, bo atribut prisoten s vrednostjo 0
offset NE / int Odmik od prvega zapisa po seznamu zapisov. Če ni nastavljen je vrednost 0. Glej opombe.
limit NE / int Število vrnjenih zapisov. Če ni nastavljen ali je nastavljen več kot 1000, je vrednost 0. Glej opombe

Opombe za zahtevek:

Primer odgovora

{
   "opr_code":"0",
   "opr_time_ms":"11762",
   "sales":"true",
   "return_warehause_stock":"true",
   "limit":"2",
   "offset":"0",
   "product_list_count":"2",
   "product_list":[
      {
         "company_id":"0",
         "mk_id":"1600000027",
         "code":"prod sifra 1",
         "name":"naziv sifra 1",
         "unit":"kos",
         "service":"false",
         "sales":"true",
         "purchasing":"true",
         "height":"1",
         "width":"2",
         "depth":"3",
         "weight":"4",
         "amount":"-2000"
      },
      {
         "company_id":"0",
         "mk_id":"1600000028",
         "code":"pod sifra 2",
         "name":"pod naziv 2",
         "unit":"dan",
         "service":"false",
         "sales":"true",
         "purchasing":"false",
         "amount":"-10"
      }
   ]
}

Opombe za odgovor:

Računi in Ponudbe

put_sales_bill – izdelava prodajnega računa

Opis : dodajanje novega prodajnega računa, pri katerem se avtomatično identificira obstoječega partnerja ali doda novega. Na podoben način se tudi identificirajo artikli ali dodajo novi. Za materialne artikle se samodejno generira dobavnica. Lahko se tudi doda oznaka, da je račun plačan preko banke ali blagajne.
URL : https://main.metakocka.si/rest/eshop/v1/json/put_sales_bill

Primer klica 1

{
   "secret_key":"my_secret",
   "company_id":"16",
   "foreign" : "true",   
   "count_code":"eshop001",
   "bill_date":"12.03.2011",
   "payment_date":"12.03.2011",
   "location_of_service":"Komenda",
   "warehouse":"glavno skladisce",
   "buyer_order":"narocilo 123",
   "partner":{
      "business_entity":"true",
      "taxpayer":"true",
      "foreign_county":"false",
      "tax_id_number":"SI10040073",
      "customer":"eshop 1",
      "street":"Slovenska cesta 100",
      "post_number":"1000",
      "place":"Ljubljana",
      "country":"Slovenia",
      "partner_contact": {
         "name": "Rok Doltar",
         "phone": "05 320 24 88",
         "fax": "05 320 24 84",
         "gsm": "071 333 444",
         "email": "test@test.co.uk"
       },
      "partner_delivery_address": {
         "street": "Ljubljanska 25",
         "post_number": "1001",
         "city": "Ljubljana",
         "country": "Slovenija"
      }
   },
   "mark_paid":[
      {
            "payment_type":"Transakcijski račun",
            "date":"12.03.2011"
      }
   ],
   "product_list":[
      {
         "count_code":"2",
         "amount":"10",
         "price":"11",
         "discount":"12",
         "tax":"085"         
      },
      {
         "code":"eshop_artikel_1",
         "amount":"20",
         "price_with_tax":"21",
         "discount":"22",
         "tax":"200"         
      },
      {
         "count_code":"eshop_artikel_2",
         "code":"eshop_artikel_2",
         "name":"eshop_artikel_2",
         "name_desc":"eshop_artikel_2 opis",
         "unit":"kom",
         "service":"false",
         "sales":"true",
         "purchasing":"false",
         "amount":"30",
         "price":"31",
         "discount":"32",
         "tax":"000"
      }      
   ]   
}
Atribut Obvezen? V MK Tip / max dolžina Opomba
count_code DA Id. Računa char, 30 Edinstvena oznaka računa v spletni trgovini (recimo ID sekvence v podatkovni bazi). Največ dolžine 30 znakov. Za podrobnosti glej 'Številčenje računov / ponudb'
foreign NE Ali je tuji račun Boolean Če parameter ni podan ali nima vrednost 'true', potem je to domači račun
bill_date DA Datum računa date
payment_date DA Rok plačila date
location_of_service NE Kraj opravljene storitve char,50 Če parameter ni podan, se prebere iz Nastavitev podjetja ('Kraj za opravljeno storitev'). Če tudi tam ni nastavljen, je odgovor napaka
warehouse NE Ime skladišča char,50 Glej poglavje 'Izdelava dobavnice'
buyer_order NE Naročilo kupca char,50 /
partner DA Kupec / Glej poglavje 'Postopek identifikacije partnerja in naslova'
mark_paid NE / / Glej poglavje 'Označba plačila'
product_list NE / / Glej poglavje 'Postopek identifikacije artikla'
partner_contact NE Kontakt partnerja Object Vsebina se zapiše kot dodatni kontakt partnerja
partner_delivery_address NE Naslov partnerja / Dostava na računu Object Vsebina se zapiše kot dodatni naslov partnerja in označi na računu kot naslov za dostavo

Opombe :

Primer kode

<?php
    require_once("Pest.php");
 
    $url = 'https://main.metakocka.si/rest/eshop/v1/json/put_sales_bill';
    $company_id = '16';
    $secret_key = 'my_secret';
 
    $requestJSON = array (
        'secret_key'=>$secret_key, 'company_id'=>$company_id, 'count_code'=>'eshop_003', 
        'bill_date'=>'12.03.2011', 'payment_date'=>'12.03.2011', 'location_of_service'=>'Komenda', 
        'partner'=>array(
          'business_entity'=>'true',
          'taxpayer'=>'true',
          'foreign_county'=>'false',
          'tax_id_number'=>'SI10040073',
          'customer'=>'eshop 1',
          'street'=>'Slovenska cesta 100',
          'post_number'=>'1000',
          'place'=>'Ljubljana',
          'country'=>'Slovenia'
        ),
        'mark_paid'=>array(
            array(
             'payment_type'=>'Transakcijski račun',
             'date'=>'25.03.2011'
            )
        ),
        'product_list'=>array(
            array(
             'count_code'=>'2',
             'amount'=>'10',
             'price'=>'11',
             'discount'=>'12',
             'tax'=>'085'                
            ),
            array(            
             'code'=>'eshop_artikel_1',
             'amount'=>'20',
             'price'=>'21',
             'discount'=>'22',
             'tax'=>'200'                     
            ),            
            array(                        
             'count_code'=>'eshop_artikel_2',
             'code'=>'eshop_artikel_2',
             'name'=>'eshop_artikel_2',
             'name_desc'=>'eshop_artikel_2 opis',
             'unit'=>'kom',
             'service'=>'false',
             'sales'=>'true',
             'purchasing'=>'false',
             'amount'=>'30',
             'price'=>'31',
             'discount'=>'32',
             'tax'=>'000'            
            )            
        )
    );
 
    echo '<html><body>';
    echo '<b>URL</b> : '.$url.'<br/>';
    echo '<b>POST data</b> : '.json_encode($requestJSON).'<br/>';
    echo '<hr/>';
    echo '<b>Request start...</b><br/>';
    $pest = new Pest($url);
    $thing = $pest->post('', 'application/json', json_encode($requestJSON));
 
    echo '<b>Respond : </b>'.$thing;
    echo '</body></html>';    
?>

put_sales_offer – izdelava ponudbe

Opis : dodajanje nove ponudbe, pri kateri se samodejno prepozna obstoječega partnerja ali doda novega. Na podoben način se tudi prepozna artikle ali dodajo novi. Lahko se tudi doda oznaka, da je ponudba plačan preko banke ali blagajne.
URL : https://main.metakocka.si/rest/eshop/v1/json/put_sales_offer

Primer klica 1

{
   "secret_key":"test",
   "company_id":"16",
   "count_code":"eshop_offer_1",
   "date":"08.05.2011",
   "validity":"30",
   "advance_payment_percent":"10",
   "partner":{
      "business_entity":"true",
      "taxpayer":"true",
      "foreign_county":"false",
      "tax_id_number":"SI10040073",
      "customer":"eshop 1",
      "street":"Slovenska cesta 100",
      "post_number":"1000",
      "place":"Ljubljana",
      "country":"Slovenia"
   },
   "mark_paid":[
      {
          "payment_type":"Transakcijski račun",
          "date":"08.05.2011"
      }
   ],
   "product_list":[
      {
         "count_code":"2",
         "amount":"10",
         "price":"11",
         "discount":"12",
         "tax":"085"         
      },
      {
         "code":"eshop_artikel_1",
         "amount":"20",
         "price":"21",
         "discount":"22",
         "tax":"200"         
      },
      {
         "count_code":"eshop_artikel_2",
         "code":"eshop_artikel_2",
         "name":"eshop_artikel_2",
         "name_desc":"eshop_artikel_2 opis",
         "unit":"kom",
         "service":"false",
         "sales":"true",
         "purchasing":"false",
         "amount":"30",
         "price":"31",
         "discount":"32",
         "tax":"000"
      }      
   ]   
}
Atribut Obvezen? V MK Tip / max dolžina Opomba
count_code DA Id. Ponudbe char, 30 Edinstvena oznaka ponudbe v MetaKocka (recimo ID sekvence v podatkovni bazi). Za podrobnosti glej 'Številčenje računov / ponudb'
date DA Datum date Datum ponudbe
validity NE Veljavnost ponudbe int, pozitiven Veljavnost ponudbe. Če parameter ni podan, se samodejno nastavi vrednost 30 dni
advance_payment_percent NE Predplačilo v odstotkih double med 0-100 Glej spodaj
advance_payment_amount NE Predplačilo v vrednosti pozitivna cena Lahko je podan samo en parameter 'advance_payment' - 'percent' ali 'amount'
partner DA Kupec / Glej poglavje 'Postopek identifikacije partnerja in naslova'
mark_paid NE / / Glej poglavje 'Označba plačila'
product_list NE / / Glej poglavje 'Postopek identifikacije artikla'

Opombe :

Primer kode

<?php
    require_once("Pest.php");
 
    $url = 'https://main.metakocka.si/rest/eshop/v1/json/put_sales_offer';
    $company_id = '16';
    $secret_key = 'my_secret';
 
    $requestJSON = array (
        'secret_key'=>$secret_key, 'company_id'=>$company_id, 'count_code'=>'eshop_offer_001', 
        'date'=>'8.5.2011', 
        'partner'=>array(
          'business_entity'=>'true',
          'taxpayer'=>'true',
          'foreign_county'=>'false',
          'tax_id_number'=>'SI10040073',
          'customer'=>'eshop 1',
          'street'=>'Slovenska cesta 100',
          'post_number'=>'1000',
          'place'=>'Ljubljana',
          'country'=>'Slovenia'
        ),
        'mark_paid'=>array(
            array(
             'payment_type=>'Transakcijski račun',
             'date'=>'8.5.2011'
            )
        ),
        'product_list'=>array(
            array(
             'count_code'=>'2',
             'amount'=>'10',
             'price'=>'11',
             'discount'=>'12',
             'tax'=>'085'                
            ),
            array(            
             'code'=>'eshop_artikel_1',
             'amount'=>'20',
             'price'=>'21',
             'discount'=>'22',
             'tax'=>'200'                     
            ),            
            array(                        
             'count_code'=>'eshop_artikel_2',
             'code'=>'eshop_artikel_2',
             'name'=>'eshop_artikel_2',
             'name_desc'=>'eshop_artikel_2 opis',
             'unit'=>'kom',
             'service'=>'false',
             'sales'=>'true',
             'purchasing'=>'false',
             'amount'=>'30',
             'price'=>'31',
             'discount'=>'32',
             'tax'=>'000'            
            )            
        )
    );
 
    echo '<html><body>';
    echo '<b>URL</b> : '.$url.'<br/>';
    echo '<b>POST data</b> : '.json_encode($requestJSON).'<br/>';
    echo '<hr/>';
    echo '<b>Request start...</b><br/>';
    $pest = new Pest($url);
    $thing = $pest->post('', 'application/json', json_encode($requestJSON));
 
    echo '<b>Respond : </b>'.$thing;
    echo '</body></html>';    
?>

report_bill in report_offer - izdelava PDF dokumentov za račun in ponudbo

Opis : izdelava PDF dokumenta računa oz. ponudbe. Enako, kot če bi v MK izbral tiskanje računa oz. ponudbe in izbral prevzeti izpis.
URL : https://main.metakocka.si/rest/eshop/v1/pdf/report_bill ali https://main.metakocka.si/rest/eshop/v1/pdf/report_offer

Primer klica 1

{
   "secret_key":"test",
   "company_id":"16",
   "count_code":"PRD_110_PRD1",
   "hide_code":"false",
   "country":"si",
   "locale":"sl"
}

Primer kode 1

<?php
    require_once("Pest.php");
 
    $url = 'https://main.metakocka.si/rest/eshop/v1/pdf/report_bill';
    $company_id = '16';
    $secret_key = 'my_key';
 
    $requestJSON = array (
        'secret_key'=>$secret_key, 'company_id'=>$company_id, 'count_code'=>'PRD_543_PRD',
        'hide_code'=>'false'
    );
 
    echo '<html><body>';
    echo '<b>URL</b> : '.$url.'<br/>';
    echo '<b>POST data</b> : '.json_encode($requestJSON).'<br/>';
    echo '<hr/>';
    echo '<b>Request start...</b><br/>';
    $pest = new Pest($url);
    $thing = $pest->post('', 'application/json', json_encode($requestJSON));
 
    // write respond into file
    $fileName = '/Users/mk_eshop/output.pdf';
    $fh = fopen($fileName, 'w');     
    fwrite($fh, $thing);
    fclose($fh);
 
    echo '<b>Write output into : '.$fileName.'</b><br/>';
 
    echo '</body></html>';    
?>
Atribut Obvezen? V MK Tip / max dolžina Opomba
mk_id NE id zapisa računa oz. ponudbe Int, 18 Vrednost dobimo v parametru mk_id kot odgovor klica put_sales_offer oz. pot_sales_bill
count_code NE Id. Računa oz. Id ponudbe char, 30 Ko izvedemo dodajanje novega računa ali ponudbe preko put_sales_bill oz. put_sales_offer klica, nam le ta vedno vrne parameter 'mk_count_code'.
hide_code NE Pri poročilih - Izpiši šifro artikla bool Če je vrednost 'true', potem na poročilu ne prikažemo šifre artikla. V ostalih primerih pa se prikaže.
country NE Pri poročilih - jezik String Nastavimo jezik izhodnega dokumente. Pri tem moramo paziti, da imata country in locale prave nabore vrednost. Možne kombinacije so naslednje (Country-Locale): si-sl, us-en, at-de
locale NE Pri poročilih - jezik String Glej spodaj razlago za country

Odgovor klica je v dveh oblikah :

  1. Uspešno izvedeno generiranje. Odgovor je PDF datoteka, ki jo zatem lahko posredujemo odjemalcu. Dve opozorili : iz odjemalca (recimo preko JavaScript POST zahtevka) ne smemo direktno klicati MK API, ker klic vsebuje secret_key. Vedno moramo v spletni trgovini narediti t.i. server-to-server komunikacijo zatem dokument posredovati iz spletne trgovine.
  2. JSON odgovor v primeru napake. Primer :
{
   "opr_code":"6",
   "opr_code_app":"201",
   "opr_time_ms":"0",
    "opr_desc_app":"Cannot find offer with count_code = PRD_110_PRD1"
}

Splošno za izdelavo računa in ponudbe

Postopek identifikacije partnerja in naslova

MetaKocka poizkuša na podlagi podanih podatkov prepoznati obstoječega partnerja. Postopek je naslednji :

Naslov se določi po naslednjem postopku :

V primeru, da partnerja po zgornjih kriterijih ne najdemo, dodamo novega partnerja. Za novega partnerja so na voljo naslednja polja :

Atribut Obvezen? V MK Tip / max dolžina Opomba
business_entity NE fizična oseba bool če atribut ni podan, potem se v MK označi kot pravna oseba. Če je podan, pa se ustrezno negira fizično osebo
taxpayer NE davčni zavezanec bool če atribut ni podan, potem se v MK označi, da ni davčni zavezanec
foreign_county NE tujina bool pri podjetjih iz tujine se ne preverja pravilne oblike davčne številke
tax_id_number DA id.Davčna št. char,30 če je podjetje iz Slovenije (foreign_county != 'true'), potem se preverja pravilno obliko številke
customer DA naziv kupca char,100 /
street DA (*) ulica in hišna številke char,50 Obvezen samo v primeru pravne osebe. Če ni podana ulica, potem se ne zapiše tudi ostali podatki (poštna številka, pošta, država)
post_number NE poštna številka char,20 /
place NE kraj char,35 /
country NE država char,šifrant vpisana vrednost se primerja glede na vrednosti v MK šifrantu. Mora biti enaka imenu v šifrantu (case insensitive). Lahko je slovensko ime (npr. 'Nemčija'), angleško ime (npr. 'Germany') ali dvočrkovna oznaka (npr. 'DE')
partner_contact NE kontakt partnerja Object Objekt predstavlja kontakt, ki se zapiše pod partnerja.
partner_delivery_address NE dodatni naslov za dostavo Object Objekt predstavlja dodatni naslov, ki se zapiše pod partnerja in v primeru dodajanja računa še pod naslov za dostavo na računu

Atributi objekta "partner_contact":

Če partner v Metakocki že obstaja, se za "partner_contact" izvede naslednji postopek:

Atributi objekta "partner_delivery_address":

Če partner v Metakocki že obstaja, se za "partner_delivery_address" izvede naslednji postopek:

Postopek identifikacije artikla

MetaKocka poizkuša na podlagi podanih podatkov identificirati obstoječi artikel. Postopek je naslednji :

V primeru, da artikla po zgornjih kriterijih ne najdemo, dodamo novi artikel. Za novi artikel so na voljo naslednja polja :

Atribut Obvezen? V MK Tip / max dolžina Opomba
mk_id NE (ni viden) Int, 18 ID artikla v MK. Uporabno za naslednje klice kot edinstveni identifikator.
count_code NE Id. Artikla char, 30 Edinstvena oznaka artikla v spletni trgovini (recimo ID sekvence v podatkovni bazi). Za podjetje mora biti nujno edinstveni. Če ni, bo MK dodala dodatno številko (primer : '1000' -> '10001'). Opozorilo : count_code se lahko ponovi, če imam dva artikla, kjer je eden samo prodajni in drugi samo nabavni.
code NE Šifra char, 20 Običajno je to šifra artikla, ki jo določi proizvajalec.
name NE Naziv artikla char, 200 Poljubni naziv artikla
name_desc NE Dodatni opis char, 700 Dodatni poljubni opis artikla. Se zapiše samo v primeru prvega dodajanja artikla v bazo artiklov v polje 'Dodatni opis'
bill_desc / offer_desc NE Podrobnejši opis vrstice char, 700 Ko v MK na račun / ponudbo dodamo artikle iz šifranta, lahko vsakemu dodamo še dodatni opis ('knofca' na koncu vrstice). Le ta se potem izpiše na računu / ponudbi pod samim artiklom
unit NE EM 1 šifrant Primer vrednosti : kol, m2, par, ura, itd
service NE Storitev bool Če je prazna vrednost, potem je to enako kot 'false'.
sales NE Prodajni bool Če je prazna vrednost, potem je to enako kot 'false'.
purchasing NE Nabavni bool Če je prazna vrednost, potem je to enako kot 'false'.

Vsak dodani artikel mora vsebovati še podatke, ki so vezane na račun / ponudbo :

Atribut Obvezen? V MK Tip / max dolžina Opomba
amount DA Količina decimal
price DA Cena oblika SLO cen Oblika SLO cen je recimo "1200,12" ali "1.200,12" ali "1200.12". Priporočamo uporabo "1200.12"
price_with_tax NE Cena z DDV oblika SLO cen Podan mora biti natančno eden izmed podatkov "price" ali "price_with_tax".
discount NE Popust decimal 0-100
tax DA Davek glej opomba Vrednosti : 000, 085, 095, 200, 220, N85, N95, N20, N22

Primer 1 : identifikacija artikla preko 'count_code' :

{
    "count_code":"2",
    "amount":"10",
    "price":"11",
    "discount":"12",
    "tax":"085"         
}

Primer 2 : vstavljanje novega artikla :

{
    "count_code":"eshop_artikel_2",
    "code":"eshop_artikel_2",
    "name":"eshop_artikel_2",
    "name_desc":"eshop_artikel_2 opis",
    "unit":"kom",
    "service":"false",
    "sales":"true",
    "purchasing":"false",
    "amount":"30",
    "price":"31",
    "discount":"32",
    "tax":"000"
}

Številčenje računov in ponudb

Številčenje računov in ponudb je mogoče implementirati na dva načina :

Za vsak tip dokumenta (tudi prodajnih račun / ponudbo) je v MetaKocka mogoče nastaviti pravila samodejnega številčenja. V tem primeru se bo ob klicu storitev izbrala naslednja številka računa / ponudbe.
V tem primeru uporabniku ni potrebno paziti na pravo številčenje in le te lahko izdajamo preko nakupov v spletni trgovini ali neposredno iz MetaKocke.
Izvedba : ob klicu ne smemo podati parametra "count_code". V odgovoru bomo dobili številko računa / ponudbe v parametru count_code. V primeru, da bo podan parameter "count_code", se bo le ta uporabil. Na ta način lahko obidemo obstoječi način številčenja.

V primeru že uveljavljenega načina številčenja v spletni trgovni, lahko le ta posreduje številko direktno v MetaKocko. Pri tem je potrebno paziti na to, da se številke ne bodo podvojile (v tem primeru pride do napake pri klicu storitve). Na ta način lahko implementiramo ločeno številčenje za račune / ponudbe iz spletne trgovine in tiste, ki jih direktno izdajamo iz MetaKocke.
Izvedba : ob klicu moramo podati parameter "count_code".

Izdelava dobavnice

V primeru, da na račun dodamo artikel, ki ni označen kot storitev (to pomeni, da je materialni artikel), je potrebno izdelati dobavnico. Izdelava je mogoča na naslednje načine :

na skladišču"

{
   "secret_key":"test",
   .........
   "warehouse":"skladisce1",
   "partner":{
   .........
}

V primeru, da je podamo napačno ime skladišča, dobimo napako oblike :

{
   "opr_code":"2",
   "opr_desc":"Warehouse with name 'oznaka1X' does not exist.","opr_time_ms":"102"
}

V primeru, da zgornje dva pogoja nista izpolnjena, se samodejno izbere glavno skladišče. V MetaKocka mora uporabnik vedno imeti ena skladišče, ki je glavno.

Ko se izdela dobavnica, se tudi na skladišču odpiše materialno zalogo. MK prevzeto ne dovoli negativno količino. Možne rešitve :

  1. če imamo dejansko zalogo na svojem skladišču, jo predhodno uvozimo s pomočjo prevzemnice.
  2. na podjetju nastavimo, da ima lahko skladišče z negativno količino ('Nastavitve' -> 'Skladišče ima lahko negativno stanje')

V primeru, da pri uvozu pride do napake zaradi negativnega stanja artikla, je napaka naslednje oblike :

{
  "opr_code":"6",
  "opr_desc":"Artikel 'Kolo' ima na skladišču 'Glavno skladišče' negativnost količino z vrednostjo -1",
  "opr_time_ms":"383"
}

Primer in oblika odgovora

V primeru uspešnega sprejetja zahtevka dobimo odgovor naslednje oblike :

{
    "opr_code":"0",
    "opr_time_ms":"33",
    "mk_id":"1600001744",
    "count_code":"eshop_002"
}

Atribut Vedno prisoten? Tip / max dolžina Opis
mk_id DA Int, 18 ID računa / ponudbe v MK. Uporabno za naslednje klice kot edinstveni identifikator.
count_code DA char, 20 Ponovitev poslanega 'count_code' ali na novo generirana 'Št. ponudbe' / 'Št. računa'

Označba plačila

Na posameznih dokumentih (računi, ponudbe, naročilnice) je mogoče označiti, da je bil le ta že plačan preko izbrane vrste plačila. Pomen posameznih atributov :

Atribut Vedno prisoten? Tip / max dolžina Opis
payment_type DA String V MK je to 'Vrsta plačila', ki ga uporabnik lahko nastavi v dinamičnem šifrantu. Privzeto so vedno na voljo vrednosti 'Transakcijski račun' in 'Blagajna'. Te vrednosti uporabnik ne more spremeniti ali zbrisati. Lahko pa doda dodatne - Moneta, kreditna kartica, Paypal …
date DA date Datum, ko je bilo plačilo izvedeno
mark_prepaid NE bool Če ima vrednost 'true', potem je to avansni priliv. V nasprotnem primeru ('false' ali NULL) pa plačilo obravnavamo kot običjano plačilo
amount / oblika SLO cen V kolikor imamo samo eno plačilo, tega podatka ni potrebno navesti, ker bo prevzel vrednost celotnega računa. To pomeni, da bo celotni račun označen kot plačan. Če pa sta podani dve ali več transakcij za plačilo, potem je atribut nujno potrebno podati

Primer : celotni račun označimo kot plačan preko Transakcijskega računa

     "mark_paid":[
          {
               "payment_type":"Transakcijski račun",
               "date":"25.03.2011",
          }
     ]

Primer : 10 EUR je bilo plačanih preko gotovine

     "mark_paid":[
          {   
               "payment_type":"Gotovina",
               "date":"25.03.2011",
               "amount":"10.00"
          }
     ]

Primer : 200 EUR je bilo plačanih kot predplačilo preko Transakcijskega računa, ostalih 800 EUR pa dan pozneje preko Monete

   "mark_paid":[
     {
          "payment_type":"Transakcijski račun",
          "date":"25.03.2011",
          "mark_prepaid":"true",
          "amount" : "200"
     },
     {
          "payment_type":"Moneta",
          "date":"26.03.2011",
          "amount" : "800"
     }
   ],

Vpis potnih stroškov, kuponov, skupnih popustov, itd

Potne stroške v MK dodamo na naslednji način :

{
    "code":"potni_stroski",
    "amount":"1",
    "price":"10",
    "discount":"0",
    "tax":"020"         
}

Na podobni način lahko naredimo artikel 'skupni_popust' in ga uporabimo za nek fiksni popust na celotni račun.

Pri kuponih pa je implementacija malenkostno drugačna. Primer : uporabnik je za nakup vnovčil še kupon za 10 EUR. Potrebno je narediti naslednje :

{
    "code":"kupon_za_popust",
    "amount":"-1",
    "price":"10",
    "discount":"0",
    "tax":"000"         
}

Skladišče

check_inventories - ali je artikel na zalogi

Opis : preveri, če je podani artikel na zalogi in vrne skupno zalogo ter zalogo po posameznih skladiščih.
URL : https://main.metakocka.si/rest/eshop/v1/json/check_inventories

Primer klica

{
    "secret_key":"test",
    "company_id":"16",
    "code":"skatla_d1"    
}
Atribut Obvezen? V MK Tip / max dolžina Opomba
count_code NE Id. artikla char, 30 Edinstvena oznaka artikla. Mora biti podan ta parameter ali code
code NE Šifra char,20 Šifra artikla. Mora biti podan ta parameter ali count_code

Primer odgovora

{
    "opr_code":"0",
    "opr_time_ms":"33",
    "count_code":"PRD_542_PRD",
    "code":"skatla",
    "unit":"kos",
    "all_amount":"20",
    warehouse_amount:[
        {
            "warehouse_mark":"skladisce1",
            "amount":"10"
        },
        {
            "warehouse_mark":"skladisce2",
            "amount":"20"
        }        
    ]            
}
Atribut ~ V MK Tip / max dolžina Opomba
count_code Id. artikla char, 30 podatki o vhodnem artiklu
code Šifra char, 20 podatki o vhodnem artiklu
unit Enota mere 1 char, 10 podatki o vhodnem artiklu
all_amount / double as string seštevel zalog iz vseh skladišč. 0, če ni nobene zaloge
warehouse_amount / array seznam zalog po posameznih skladiščih
warehouse_mark Oznaka String,10 Oznaka skladišča
amount / double as string vrednost zaloge na tem skladišču

Predvidene napake :

opr_code opr_desc Opis oz. vzrok
20 Paramether 'count_code' is too long. Max length : 30. Value length : X /
30 Paramether 'code' is too long. Max length : 20. Value length : X /
40 Parameter 'count_code' or 'code' must be set Vsaj eden od teh parametrov mora biti podan, da lahko identificiramo artikel
50 Product with count_code = 'A1' or code = 'A1' do not exist. Najprej se izvede iskanje po count_code in zatem po code. Če po obeh ne najdemo artikla, vrnemo to napako

Ostalo o delovanju storitev

Varnost

Varnost prenešenih podatkov je zagotovljena na naslednji način :

Dosegljivost

MetaKocka ne podpira 100% uptime (recimo v času nadgradnje), zato mora spletna trgovina podpirati primere, da storitve na strani MetaKocke niso dosegljive. Možni scenariji :

Omejitev števila klicev

MetaKocka ima implementirane določene omejitev število klicev, da zaradi napačne ali zlonamerne uporabe ne pride do preobremenitve backend sistema. Kvota se nastavi na dovolj veliko vrednost, da ne bi smelo prihajati do težav pri običajni uporabi.

Vsak klic je svoja transakcija

Vsak klic se obravnava kot ena transakcija. Kar pomeni, da se v celoti izvede uspešno oz. se v primeru napak ne zapišejo nobene spremembe v MetaKocka.

Predvideni klici v prihodnosti

V primeru potreb so za prihodnost planirani naslednji klici: