Primjeri iz prakse

ECHO

Različiti primjeri pozivanja:

Raverus.FiskalizacijaDEV.CentralniInformacijskiSustav cis = new CentralniInformacijskiSustav();

bool bTest = cis.Echo();
bTest = cis.Echo("moj test");

XmlDocument doc = cis.PosaljiEcho("");
doc = cis.PosaljiEcho("moja poruka");

doc = Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.DohvatiPorukuEchoZahtjev("moj prvi test");
doc = cis.PosaljiSoapPoruku(doc);

 

PoslovniProstorZahtjev

Primjer:

Raverus.FiskalizacijaDEV.CentralniInformacijskiSustav cis = new CentralniInformacijskiSustav();

Raverus.FiskalizacijaDEV.Schema.PoslovniProstorType poslovniProstor = new Schema.PoslovniProstorType();
poslovniProstor.Oib = oib;
poslovniProstor.OznPoslProstora = "123";

Raverus.FiskalizacijaDEV.Schema.AdresaType adresa = new Schema.AdresaType();
adresa.Ulica = "Ilica";
adresa.KucniBroj = "1";
adresa.KucniBrojDodatak = "c";
adresa.BrojPoste = "10000";
adresa.Naselje = "Zagreb";
adresa.Opcina = "Centar";
Raverus.FiskalizacijaDEV.Schema.AdresniPodatakType adresniPodatak = new Schema.AdresniPodatakType();
adresniPodatak.Item = adresa;
poslovniProstor.AdresniPodatak = adresniPodatak;

poslovniProstor.RadnoVrijeme = "od 8 do 8";
poslovniProstor.DatumPocetkaPrimjene = Raverus.FiskalizacijaDEV.PopratneFunkcije.Razno.FormatirajDatum(DateTime.Now.Date);

XmlDocument doc = cis.PosaljiPoslovniProstor(poslovniProstor, "FISKAL 1");

 

RacunZahtjev

Primjer:

Raverus.FiskalizacijaDEV.CentralniInformacijskiSustav cis = new CentralniInformacijskiSustav();

Raverus.FiskalizacijaDEV.Schema.RacunType racun = new Schema.RacunType();
racun.Oib = oib;
racun.USustPdv = true;
racun.DatVrijeme = Raverus.FiskalizacijaDEV.PopratneFunkcije.Razno.DohvatiFormatiranoTrenutnoDatumVrijeme();
racun.OznSlijed = Schema.OznakaSlijednostiType.P;

Raverus.FiskalizacijaDEV.Schema.BrojRacunaType broj = new Schema.BrojRacunaType();
broj.BrOznRac = "1";
broj.OznPosPr = "123";
broj.OznNapUr = "1";
racun.BrRac = broj;

Raverus.FiskalizacijaDEV.Schema.PdvType pdv = new Schema.PdvType();
Raverus.FiskalizacijaDEV.Schema.PorezType porez = new Schema.PorezType();
porez.Stopa = 25.00m;   // XSD schema tahtjeva dvije decimale, obratite paznju na to!
porez.Osnovica = 10.00m;
porez.Iznos = 2.50m;
pdv.Porez.Add(porez);

racun.IznosUkupno = 12.50m;
racun.NacinPlac = Schema.NacinPlacanjaType.G;
racun.OibOper = "12345678900";
racun.ZastKod = "e4d909c290d0fb1ca068ffaddf22cbd0"; 
racun.NakDost = false;

XmlDocument doc = cis.PosaljiRacun(racun, "FISKAL 1");

 

Primjer sa certifikatom u datoteci (upute sa export certifikata u datoteku su ovdje):

X509Certificate2 cert = Raverus.FiskalizacijaDEV.PopratneFunkcije.Potpisivanje.DohvatiCertifikat(@"D:\Users\Nino\Desktop\MojCert.pfx", "PASSWORD");
if (cert != null)
{
    Schema.RacunZahtjev zahtjev = PopratneFunkcije.XmlDokumenti.KreirajRacunZahtjev(racun);
    XmlDocument zahtjevXml = PopratneFunkcije.XmlDokumenti.SerijalizirajRacunZahtjev(zahtjev);

    PopratneFunkcije.Potpisivanje.PotpisiXmlDokument(zahtjevXml, cert);
    PopratneFunkcije.XmlDokumenti.DodajSoapEnvelope(ref zahtjevXml);

    XmlDocument doc = cis.PosaljiSoapPoruku(zahtjevXml);
}

 

Snimanje XML dokumenata u datoteku

Ukoliko imate potrebu snimati zahtjeve i odgovore koje šaljete u CIS u datoteku, tada to možete napraviti na dva načina:

1. snimanjem u točno određenu datoteku, pri čemu vi sami određujete naziv datoteke

 

Raverus.FiskalizacijaDEV.CentralniInformacijskiSustav cis = new CentralniInformacijskiSustav();

Raverus.FiskalizacijaDEV.Schema.RacunType racun = GetRacun(oib);


Schema.RacunZahtjev zahtjev = PopratneFunkcije.XmlDokumenti.KreirajRacunZahtjev(racun);
XmlDocument zahtjevXml = PopratneFunkcije.XmlDokumenti.SerijalizirajRacunZahtjev(zahtjev);

PopratneFunkcije.Potpisivanje.PotpisiXmlDokument(zahtjevXml, PopratneFunkcije.Potpisivanje.DohvatiCertifikat("FISKAL 1"));
PopratneFunkcije.XmlDokumenti.DodajSoapEnvelope(ref zahtjevXml);

Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.SnimiXmlDokumentDatoteka(zahtjevXml, @"D:\Users\Nino\Desktop\Zahtjev.xml");

XmlDocument doc = cis.PosaljiSoapPoruku(zahtjevXml);

Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.SnimiXmlDokumentDatoteka(doc, @"D:\Users\Nino\Desktop\Odgovor.xml");

 

2. snimanjem u datoteku, pri čemu se naziv određuje automatski - vi određujete u koje mape se datoteke snimanju

 

Raverus.FiskalizacijaDEV.CentralniInformacijskiSustav cis = new CentralniInformacijskiSustav() { NazivMapeZahtjev = @"D:\Users\Nino\Desktop\Zahtjevi", NazivMapeOdgovor = @"D:\Users\Nino\Desktop\Odgovori", NazivAutoGeneriranje = true };

Raverus.FiskalizacijaDEV.Schema.RacunType racun = GetRacun(oib);

XmlDocument doc = cis.PosaljiRacun(racun, "FISKAL 1");

 

 

Slanje računa a više stopa poreza

Primjer sa više stopa poreza:

 

Raverus.FiskalizacijaDEV.CentralniInformacijskiSustav cis = new CentralniInformacijskiSustav();

Raverus.FiskalizacijaDEV.Schema.RacunType racun = new Schema.RacunType();
racun.Oib = oib;
racun.USustPdv = true;
racun.DatVrijeme = Raverus.FiskalizacijaDEV.PopratneFunkcije.Razno.DohvatiFormatiranoTrenutnoDatumVrijeme();
racun.OznSlijed = Schema.OznakaSlijednostiType.P;

Raverus.FiskalizacijaDEV.Schema.BrojRacunaType broj = new Schema.BrojRacunaType();
broj.BrOznRac = "1";
broj.OznPosPr = "123";
broj.OznNapUr = "1";
racun.BrRac = broj;

Raverus.FiskalizacijaDEV.Schema.PorezType porez25 = new Schema.PorezType();
porez25.Stopa = 25.00m;
porez25.Osnovica = 10.00m;
porez25.Iznos = 2.50m;

Raverus.FiskalizacijaDEV.Schema.PorezType porez0 = new Schema.PorezType();
porez0.Stopa = 0.00m;
porez0.Osnovica = 10.00m;
porez0.Iznos = 0.00m;

racun.Pdv.Add(porez25);
racun.Pdv.Add(porez0);


racun.IznosUkupno = 22.50m;
racun.NacinPlac = Schema.NacinPlacanjaType.G;
racun.OibOper = "12345678900";
racun.ZastKod = "e4d909c290d0fb1ca068ffaddf22cbd0";
racun.NakDost = false;


XmlDocument doc = cis.PosaljiRacun(racun, "FISKAL 1");

 

 

Primjer u kojem se ne koriste klase i objekti za rad

Ukoliko želite ili imate potrebe sami kreirati XML dokument (npr. za RacunZahtjev), kreirajte ga koristeći StringBuilder ili na neki drugi način, pazite pri tome da dokument bude u skladu sa XSD schemom, i potpišite ga i pošaljite na ovaj način:

 

string xml = @"<?xml version=""1.0"" encoding=""utf-8""?><tns:RacunZahtjev xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" Id=""signXmlId"" xmlns:tns=""http://www.apis-it.hr/fin/2012/types/f73""><tns:Zaglavlje><tns:IdPoruke>cff93023-850b-403c-ac8b-277619e81dc9</tns:IdPoruke><tns:DatumVrijeme>21.10.2012T10:10:28</tns:DatumVrijeme></tns:Zaglavlje><tns:Racun><tns:Oib>44718633471</tns:Oib><tns:USustPdv>true</tns:USustPdv><tns:DatVrijeme>21.10.2012T10:10:22</tns:DatVrijeme><tns:OznSlijed>P</tns:OznSlijed><tns:BrRac><tns:BrOznRac>1</tns:BrOznRac><tns:OznPosPr>123</tns:OznPosPr><tns:OznNapUr>1</tns:OznNapUr></tns:BrRac><tns:Pdv><tns:Porez><tns:Stopa>25.00</tns:Stopa><tns:Osnovica>10.00</tns:Osnovica><tns:Iznos>2.50</tns:Iznos></tns:Porez></tns:Pdv><tns:IznosUkupno>12.50</tns:IznosUkupno><tns:NacinPlac>G</tns:NacinPlac><tns:OibOper>12345678900</tns:OibOper><tns:ZastKod>e4d909c290d0fb1ca068ffaddf22cbd0</tns:ZastKod><tns:NakDost>false</tns:NakDost></tns:Racun></tns:RacunZahtjev>";


XmlDocument dokument = new XmlDocument();
dokument.LoadXml(xml);

Raverus.FiskalizacijaDEV.CentralniInformacijskiSustav cis = new CentralniInformacijskiSustav();

X509Certificate2 certifikat = Raverus.FiskalizacijaDEV.PopratneFunkcije.Potpisivanje.DohvatiCertifikat("FISKAL 1");
PopratneFunkcije.Potpisivanje.PotpisiXmlDokument(dokument, certifikat);

PopratneFunkcije.XmlDokumenti.DodajSoapEnvelope(ref dokument);

XmlDocument odgovor = cis.PosaljiSoapPoruku(dokument);

VAŽNOObratiti pažnju na OIB, koji mora biti isti kao i OIB u FISKAL certifikatu. Naravno, UUID, datum i vrijeme i ostale informacije se isto dinamički generiraju i svaki su puta drugačije.

Kod priprema XML-a, obratite pažnju na Id="signXmlId" uz RacunZahtjev ili PoslovniProstorZahtjev - ovaj podatak rutini za potpisivanje "objašnjava" koji dio XML poruke treba digitalno potpisati

 

Obrada grešaka (exceptions handling)

PosaljiSoapPoruku, PosaljiRacun, PosaljiPoslovniProstor i ostale slične metode vraćaju null ukoliko je došlo do exception-a i isti vraćaju dalje, da ga vi obradite prema potrebi. Ukoliko je CIS ipak vratio neki odgovor, tada se odgovor nalazi unutar OdgovorGreska. OdgovorGreska sadrži kompletnu XML poruku vraćenu od CIS-a, u skladu sa Tehničkom dokumentacijom. U slučaju greške, koristi se i System.Diagnostics.Trace.TraceError koji ispisuje poruku greške.

Ovo je jedan od načina kako obraditi grešku:

 

//Greska je u datumu i vremenu slanja, "21.10.201210:10:28" umjesto "21.10.2012T10:10:28"
string xml = @"<?xml version=""1.0"" encoding=""utf-8""?><tns:RacunZahtjev xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" Id=""signXmlId"" xmlns:tns=""http://www.apis-it.hr/fin/2012/types/f73""><tns:Zaglavlje><tns:IdPoruke>cff93023-850b-403c-ac8b-277619e81dc9</tns:IdPoruke><tns:DatumVrijeme>21.10.201210:10:28</tns:DatumVrijeme></tns:Zaglavlje><tns:Racun><tns:Oib>44718633471</tns:Oib><tns:USustPdv>true</tns:USustPdv><tns:DatVrijeme>21.10.2012T10:10:22</tns:DatVrijeme><tns:OznSlijed>P</tns:OznSlijed><tns:BrRac><tns:BrOznRac>1</tns:BrOznRac><tns:OznPosPr>123</tns:OznPosPr><tns:OznNapUr>1</tns:OznNapUr></tns:BrRac><tns:Pdv><tns:Porez><tns:Stopa>25.00</tns:Stopa><tns:Osnovica>10.00</tns:Osnovica><tns:Iznos>2.50</tns:Iznos></tns:Porez></tns:Pdv><tns:IznosUkupno>12.50</tns:IznosUkupno><tns:NacinPlac>G</tns:NacinPlac><tns:OibOper>12345678900</tns:OibOper><tns:ZastKod>e4d909c290d0fb1ca068ffaddf22cbd0</tns:ZastKod><tns:NakDost>false</tns:NakDost></tns:Racun></tns:RacunZahtjev>";

XmlDocument dokument = new XmlDocument();
dokument.LoadXml(xml);

Raverus.FiskalizacijaDEV.CentralniInformacijskiSustav cis = new CentralniInformacijskiSustav();

X509Certificate2 certifikat = Raverus.FiskalizacijaDEV.PopratneFunkcije.Potpisivanje.DohvatiCertifikat("FISKAL 1");
PopratneFunkcije.Potpisivanje.PotpisiXmlDokument(dokument, certifikat);

PopratneFunkcije.XmlDokumenti.DodajSoapEnvelope(ref dokument);

try
{
    XmlDocument odgovor = cis.PosaljiSoapPoruku(dokument);
    if (odgovor != null)
    {
        string jir = Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.DohvatiJir(odgovor);
        MessageBox.Show(jir);
    }
}
catch (Exception ex)
{
    if (cis.OdgovorGreska != null)
    {
        MessageBox.Show(cis.OdgovorGreska.InnerXml);
    }
    else
        MessageBox.Show(String.Format("Greska: {0}", ex.Message));
}

 

Last edited Nov 11, 2012 at 5:59 AM by nrasinec, version 9

Comments

No comments yet.