Već duže vreme pratim temu oko CelikNet-a (pošto posao zahteva jbg) i usled par nepogodnosti sa CelikNet rešenjem rešio sam da napravim novi paket za rad sa ličnim karticama: DirectCelik
Oslanja se na .NET Standard 1.1, odnosno podržava .NET Framework 4.5 pa na više, kao i .NET/Core verzije 1.0 pa na više.
On je efektivno wrapper za MUPov celikapi.dll. specifično je pravljen sa celikapi.dll verzijom 1.4.1, kako god morao bi da radi sa svakom 1.4.* verzijom.
Inspiracija za novi paket su prateći izazovi na koje sam naišao:
- CelikNet Ne podržava celikapi v1.4.*,
- Potencijalno baca exception u finalizeru (fatalno, bez meni jasnog načina da se izbegne ili handluje) i,
- Nije na nuget.org, niti mi nije jasno gde glavni git repozitorijum github/gitlab (više linkova po ovoj tabli, najverovatnije je glavni repo na gitlab od lika mitrocelik)
INSTALACIJA
Okačen je na nuget.org repozitorijumu, pa ga možete instalirati preko bilo kog package manager-a. u VS idite desnim klikom na projekat u koji ga želite instalirati, izaberite Manage Nuget Packages, u pod tabom Browse pretražite "DirectCelik"
Pored instalacije NuGet paketa morate dodati celikapi.dll u project output KAKO GOD, trebate da preuzmete i 32bit i 64bit verzije, i da ih preimenujete u "CelikApiX32.dll" i "CelikApiX64.dll".
Paket može da radi sa obe u zavisnosti da li vaš sistem podržava x64 ili ako je vaš projekat buildovan specifilno za x86 ili x64.
KORIŠĆENJE
Primer korišćenja možete videti u sample projektima na GitHub-u, a evo i ovde jedan sample:
using DirectCelik;
using var celik = Celik.Create();
var readers = CardReaders.Readers();
var result = celik.Execute<CardData>(readers.FirstOrDefault(), session =>
{
var fpd = session.ReadFixedPersonalData();
var vpd = session.ReadVariableParsonalData();
var dd = session.ReadDocumentData();
var image = session.ReadPortrait();
return new CardData(
fpd.Data.givenName,
fpd.Data.surname,
fpd.Data.dateOfBirth,
vpd.Data.state,
image.Data);
});
Console.ReadKey();
record CardData(string firstName, string lastName, string birthDate, string state, byte[] profileImage);
Treba obratiti pažnju na par stvari, DirectCelik.Celik klasa implementira IDisposable, i zato je najbolje staviti ga u using blok
Dodatno ona je efektivno singletonske prirode (tj. možete je instancirati na startup programa i dispozovati je na kraju programa), ali možete i praviti više instanci ove klase slobodno bez problema.
Celik pruža metodu T Execute<T>(string reader, Func<ICelikSession, T> function) kojim vršite čitanje podataka sa kratica.
- reader je ime čitača kartica, koje možete nabrojati iz pomoćne metode CardReaders.Readers()
- function je callback kojim vi čitate podatke sa kartice pomoću prosleđenog ICelikSession
- T je tip povratne vrednosti ove metode, odnosno prosleđene funkcije. Ako hoćete da vraća void, koristite .Execute bez generičkog parametra.
Celik klasa predstavlja lifetime celikapi biblioteke (od EidStartup, do EidCleanup)
ICelikSession, odnosno trajanje poziva .Execute metode predstavlja lifetime jednog očitavanja kartice(od EidBeginRead, do EidEndRead)
Svi response-ovi ICelikSession metoda daju informacije o status kodu vraćenom od celikapi.dll
Nadam se da će ovo pomoći bar jednom kolegi programeru :)
Dodatno ako imate zahteve, probleme sa paketom ili šta već javite.