Pomoćni API za pozivanje fiskalizacijskog servisa porezne uprave(CIS).
Verzija CIS servisa 1.1.2
Najjednostavnije rečeno ovo je fiskalizacija u jednoj klasi
Fiscalization sa malo više od 500 linija kôda.
Preko Wsdl.exe tool-a je generirana proxy klasa
FiskalizacijaService, sa svim klasama po shemi i wsdl-u koji je objavljen na stranicama porezne uprave -
http://www.porezna-uprava.hr/fiskalizacija/dokumenti/Fiskalizacija-WSDL_v1.1.2.zip koji je uključen u source kôd projekta.
Preko
FiskalizacijaService se rade svi SOAP pozivi na CIS servis.
Cilj projekta
- uključiti source kôd u postojeći projekt umjesto referenciranja third party dll-a, naravno dostupan i preko NuGet-a - NuGet install
- svaki poziv servisa treba automatski odraditi generiranje ZKI kôda i potpisivanje, isto tako i provjeru potpisa CIS odgovora, ali imati i opcije - Sign(ICisRequest, X509Certificate2), GenerateZki(X509Certificate2)
- sve greške koje šalje CIS servis pretvoriti u Exception-e, unificirati logiranje i imati pregled svih grešaka na jednak način
- ne parsirati raw SOAP poruke, a istovremeno omogućiti potpisivanje i logiranje raw poruka
- compile-time check - ništa se ne dohvaća preko string-ova(čak ni Signature node na potpisivanju)
API
Sastoji od tri metode za slanje podataka na servis:
public static class Fiscalization
{
SendInvoiceRequest(RacunZahtjev request, X509Certificate2 cert = null);
SendLocationRequest(PoslovniProstorZahtjev request, X509Certificate2 cert = null);
SendEcho(string echo);
}
Svaka metoda još prima opcionalno funkciju za postavljanje parametara generiranoj proxy klasi
FiskalizacijaService (npr. url, timeout...):
Action<FiskalizacijaService> Primjer poziva servisa za slanje računa:
// Pošalji račun, generiraj ZKI, potpiši i provjeri potpis CIS odgovora
Fiscalization.SendInvoiceRequest(request, certificate);
// I k'o što obično biva, neki default nije po želji
Fiscalization.SendInvoiceRequest(request, certificate,
x =>
{
// SOAP service settings
// Change service URL
// default = Fiscalization.SERVICE_URL_PRODUCTION
x.Url = Fiscalization.SERVICE_URL_DEMO;
// Set request timeout in miliseconds
// default = 100s
x.Timeout = 2000;
// Disable response signature checking
// default = true
x.CheckResponseSignature = false;
});
Logiranje raw SOAP poruka
Logiranje se radi preko implementacije partial metode na
FiskalizacijaService klasi.
Par linija kôda govori 1000 riječi - odlazna i dolazna SOAP poruka kao
XmlDocument.
Ovako bi mogao izgledati trace ili file logger:
// Must be defined in same project with Cis.FiskalizacijaService class
namespace Cis
{
public partial class FiskalizacijaService
{
partial void LogResponseRaw(XmlDocument request, XmlDocument response)
{
// Trace logger
Trace.WriteLine(request.OuterXml);
Trace.WriteLine(response.OuterXml);
// File logger
File.AppendAllText(logFileName, request.OuterXml, Encoding.UTF8);
File.AppendAllText(logFileName, response.OuterXml, Encoding.UTF8);
}
}
}