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/HR_Fiskalizacija/Stranice/Tehni%C4%8Dke-specifikacije.aspx 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);
        }
    }
}

Last edited Jan 30 at 10:57 PM by tgrospic, version 41