Lesen der eGK (elektronische Gesundheitskarte)

Sonstiges (nicht kategorisierbar)

Moderator: Moderatoren

Antworten
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Lesen der eGK (elektronische Gesundheitskarte)

Beitrag von mini990 »

Hallo,
habe lange nichts mehr von mir hören lassen aber das hat ganz eigene Gründe....

Ich programmiere momentan eine Routine zum Lesen der eGK. Oder eher versuche ich es....
Habe mich an dem im Forum zu findenden Thread orientiert.
Mir stehen zum testen ein Orga 920M (Mobilgerät) und ein Gemalto GCR 5600-D zur Verfügung.
DLL öffnen geht
CT-Init geht (anscheinend)
weitere Funktionsaufrufe (reset, request etc.) scheitern.
Habe mal den Quellcode beigefügt. Irgendwo scheine ich einen Denkfehler zu haben.....
Für Hilfe wäre ich sehr dankbar... :)

Gruß Stefan

Code: Alles auswählen

***   nDll := DllLoad( "ctorg32.DLL" )
   nDll := DllLoad( "ct_gem.DLL" )

//** hier wird '49546216'  zurckgegeben

   if(nDll != 0)
      //-- DLL-Init
      iCtn := 1   //-- Logical card terminal number
      iPN  := 5   //-- Port COM1
      nInit:= dllCall( nDll, DLL_STDCALL, "CT_init",iCtn, iPN)
//** Rckgabewert '0'
			@ 1,0 say nInit

      //-- RESET 
      nReturn := resetCT ( nDll, iCtn )
			@ 2,0 say nReturn
//** Rckgabewert '-4096'

			if nReturn=0
				//-- REQUEST
	       nReturn := requestCT ( nDll, iCtn )
			 	 @ 3,0 say nReturn



FUNCTION resetCT ( nDll, iCtn )
    LOCAL nData     := 0
    LOCAL cDad      := 0x01             //-- destination address (receiver)
    LOCAL cSad      := 0x02             //-- source address (sender)
    LOCAL iLenc     := 127              //-- length command
    LOCAL cCommand  := SPACE(127)       //-- ICC or CT command.
    LOCAL iLenr     := 1031             //-- length response
    LOCAL cResponse := SPACE(1031)      //-- Response to the command

    cCommand := Chr(0x20)+Chr(0x11)+Chr(0x00)+Chr(0x00)+Chr(0x00)
    iLenc    := LEN(cCommand)

    iLenr    := 1031
    cResponse:= replicate(Chr(0x00),iLenr)

    nData:= dllCall( nDll, DLL_STDCALL, "CT_data",iCtn, @cDad, @cSad, iLenc,;
                                                  @cCommand, @iLenr, @cResponse)
    if(nData == 0)
        if ((iLenr >= 2).And.(iLenr <= 1031)).And.;
            (cResponse[iLenr-1] == Chr(0x90) ).And.;
            (cResponse[iLenr]   == Chr(0x00) )
            cLog := cLog + "STATE: RESET CT successful!"+cEol
            //? "STATE: RESET CT successful!"
        else
            cLog := cLog + "STATE: RESET CT unsuccessful!"+cEol
            //? "STATE: RESET CT unsuccessful!"
        endif
    endif
    @ 5,0 say clog
    
RETURN nData

FUNCTION requestCT ( nDll, iCtn )
    LOCAL nData     := 0
    LOCAL cDad      := 0x01             //-- destination address (receiver)
    LOCAL cSad      := 0x02             //-- source address (sender)
    LOCAL iLenc     := 127              //-- length command
    LOCAL cCommand  := SPACE(127)       //-- ICC or CT command.
    LOCAL iLenr     := 1031             //-- length response
    LOCAL cResponse := SPACE(1031)      //-- Response to the command

    cCommand := Chr(0x20)+Chr(0x12)+Chr(0x01)+Chr(0x00)
    iLenc    := LEN(cCommand)

    iLenr    := 1031
    cResponse:= replicate(Chr(0x00),iLenr)

    nData:= dllCall( nDll, DLL_STDCALL, "CT_data",iCtn, @cDad, @cSad, iLenc,;
                                                  @cCommand, @iLenr, @cResponse)
RETURN nData


  
Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Re: Lesen der eGK (elektronische Gesundheitskarte)

Beitrag von Rolf »

Ich habe es am Ende in C gelöst.

Unter http://www.kbv.de/ita/register_G.html die Datei "G03: CardTerminal Application Programming Interface" gibt es am Ende ein C-Quellcode und dann nach die Datei "G01" fürs weitere Vorgehen.

und dann noch unter
http://www.gematik.de Suche nach "Implementierungsleitfaden" und du müsstest was mit "Implementierungsleitfaden zur Einbindung der eGK in die Primärsysteme der Leistungserbringer" finden. Dort ist am Ende eine Logdatei der Binärdaten enthalten.

Liebe Grüße
Rolf
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Lesen der eGK (elektronische Gesundheitskarte)

Beitrag von mini990 »

Kann mir jemand die "Programmierhilfen" von Orga zukommen lassen?
Bei der Nachfolgefirma (Sagem-Monetel) bekomme ich nichts....
Im Voraus vielen Dank!!!

Gruß Stefan
@Rolf: Ich probier's gerade in C++
DLL laden, init ok.
Reset mit Rückgabe "0".
Alle weiteren CT_Data Aufrufe enden mit "-1"
????????
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Lesen der eGK (elektronische Gesundheitskarte)

Beitrag von mini990 »

sorry, meinte nicht Sagem sondern: Ingenico Healthcare

Gruß Stefan
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Lesen der eGK (elektronische Gesundheitskarte)

Beitrag von mini990 »

es geht auch mit xBase ohne sich zu verrenken.
Nur mit den Unterlagen der Gematik habe ich ziemlich gekämpft.
Den Durchblick zu finden... ein Graus!

@ Rolf: Danke nochmal für die Links, waren hilfreich... :)

Gruß Stefan
PS: hat solange gedauert weil ich mich im Urlaub demonstrativ gewehrt habe einen Computer auch nur aus der
Ferne anzusehen geschweige denn anzufassen..... :D
Antworten