Exemple #1
0
        static void Main()
        {
            // Verbindung mit einem Chipkartenterminal herstellen und (falls eingesteckt) die Versichertenstammdaten einer eGK oder KVK/PKV-Card auslesen
            CardResult result = CardTerminalClient.ReadCard("ctacs.dll");

            if (result.Success)
            {
                // die ausgelesenen Versichertenstammdaten als JSON auf der Konsole ausgeben
                string json = JsonConvert.SerializeObject(result, Formatting.Indented);
                Console.WriteLine(json);

                Console.ReadKey();
            }
        }
        /// <summary>
        /// Stellt eine Verbindung mit einem Chipkartenterminal her und liest (falls eingesteckt) die Versichertenstammdaten einer eGK oder KVK/PKV-Card aus
        /// </summary>
        /// <param name="path">der Pfad zur herstellerspezifischen DLL mit der CT-API-Implementierung</param>
        /// <param name="portNumber">Portnummer der physikalischen Schnittstelle des Kartenterminals</param>
        /// <param name="terminalID">die logische Kartenterminal-Nummer</param>
        /// <param name="requestCardWaitingPeriodInSeconds">die Zeit (in Sekunden), die auf das Einstecken einer Chipkarte gewartet wird</param>
        /// <param name="ejectCardWaitingPeriodInSeconds">die Zeit (in Sekunden), die gewartet wird, bis eine eingesteckte Chipkarte entnommen wurde</param>
        /// <returns></returns>
        public static CardResult ReadCard(string path, ushort portNumber = 1, ushort terminalID = 1, byte requestCardWaitingPeriodInSeconds = 0, byte ejectCardWaitingPeriodInSeconds = 0)
        {
            using (CardTerminalClient cardTerminalClient = new CardTerminalClient(path, portNumber, terminalID)) // eine neue Host/CT-Verbindung mithilfe der herstellerspezifischen CT-API-Bibliothek initiieren
            {
                cardTerminalClient.ResetCT();                                                                    // das Gerät in einen definierten Grundzustand versetzen
                cardTerminalClient.RequestICC(requestCardWaitingPeriodInSeconds);                                // zum Einstecken einer Chipkarte auffordern (ggf. mit Wartezeit) und nach dem Einstecken einer Karte einen Reset durchführen

                CardResult result = new CardResult();

                // Daten einer elektronischen Versichertenkarte (eGK) auslesen
                try
                {
                    if (!cardTerminalClient.SelectEGK().StatusIsError())                     // Container mit den eGK-Daten für folgende Auslesevorgänge auswählen
                    {
                        result.EgkResult = cardTerminalClient.ReadEGK();                     // ggf. eGK-Datensätze für die Patientendaten und die Versicherungsdaten auslesen
                    }
                }
                catch (CtException ex) when(ex.ErrorCode == -128)
                {
                }                                                                    // ERR_HTSI

                // Daten einer Krankenversichertenkarte (KVK) bzw. Card für Privatversicherte (PVK-Card) auslesen
                try
                {
                    if (!cardTerminalClient.SelectKVK().StatusIsError())                     // Container mit den KVK-Daten für folgende Auslesevorgänge auswählen
                    {
                        result.KvKResult = cardTerminalClient.ReadKVK();                     // ggf. KVK-Datensatz auslesen
                    }
                }
                catch (CtException ex) when(ex.ErrorCode == -128)
                {
                }                                                                    // ERR_HTSI

                cardTerminalClient.EjectICC(ejectCardWaitingPeriodInSeconds);        // Auslesevorgang beenden und Chipkarte auswerfen (ggf. mit Wartezeit)

                return(result);
            }
        }