ID TECH
Kontakt
Alle technischen Beiträge

Technischer Beitrag

Entwicklung für EMV, Teil III

Im Teil I dieser Seriehaben wir besprochen, wie sich Chip-Kartentransaktionen von MagStripe-Transaktionen unterscheiden. Dabei haben wir festgestellt, dass zwischen dem Lesegerät und der Karte ein erheblicher Kommunikationsaufwand anfällt. Doch (die gute Nachricht!) haben wir auch gesehen, dass ein Großteil dieser Kommunikation automatisch abgewickelt wird – also außerhalb des Einflussbereichs des Zahlungsanwendungsentwicklers – durch den EMV Kernel des Lesegeräts.

Im Teil IIhaben wir uns mit den verschiedenen Tags (bzw. TLV-Daten) befasst, die bei einer EMV-Transaktion zurückgegeben werden können, und erläutert, was einige davon bedeuten. Außerdem haben wir erwähnt, dass eine EMV-Transaktion in Phasen abläuft (mit Bezeichnungen wie Start, Authentifizierung und Abschluss). Und wir haben gesehen, dass unterschiedliche TLVs in den verschiedenen Phasen zurückgegeben werden.

Wir haben auch (tatsächlich mehrfach) erwähnt, dass Sie eine EMV-Transaktion zwar durch das direkte Senden von Firmware-Befehlen an das Kartenlesegerät (über USB oder RS-232) durchführen können, es jedoch in der Regel einfacher ist, über das Universal SDK von ID TECH mit dem Lesegerät zu interagieren. (Besuchen Sie uns hier für Downloads. Bitte geben Sie dabei Ihre Plattform an: Windows, Linux, MacOS, iOS oder Android.)

Warum ist das SDK einfacher? Zum einen übernimmt es die Einrichtung der seriellen Kommunikation (USB, RS-232 oder Bluetooth) mit dem Lesegerät. Außerdem müssen Sie sich keine Gedanken machen über

Firmware-Befehle auf Geräteebene und zugehörige Low-Level-Protokolle. Darüber hinaus erhalten Sie fertige Code-Bibliotheken, die bei der Interpretation von Fehlercodes und der Datenverarbeitung unterstützen.

Ein weiterer großer Vorteil des Universal SDK ist, dass es Beispielcode enthält, der zeigt, wie die verschiedenen Bibliotheken genutzt werden können, um diese Aufgaben zu vereinfachen. (Lesen Sie weiter.)

Wie steigen Sie in die Arbeit mit dem SDK ein? Werfen wir einen Blick auf die wichtigsten Schritte.

Schritt 1: SDK installieren

Wenn Sie bereits wissen, für welches Betriebssystem Sie entwickeln möchten, besuchen Sie Development — Home in der Knowledge Base und navigieren Sie zum entsprechenden Download. Es stehen separate Builds für Windows, Linux, MacOS, iOS und Android zur Verfügung.

Entpacken Sie das Archiv und versuchen Sie, das Beispielprojekt (zu finden im Ordner „Source Code") in Ihrer bevorzugten Entwicklungsumgebung zu laden. Kompilieren und starten Sie die Beispiel-App mit angeschlossenem ID TECH Lesegerät. Stellen Sie sicher, dass die App erfolgreich mit dem Lesegerät kommunizieren kann.

Schritt 2: Lesegerät konfigurieren

Erwarten Sie nicht, dass Sie eine EMV-Transaktion direkt nach dem Auspacken durchführen können! Ihre erste Transaktion wird fehlschlagen, wenn Sie sich nicht die Zeit genommen haben, Ihr Lesegerät zu konfigurieren. Dies bedeutet mindestens, das Lesegerät mit folgenden Daten zu laden:

  • Terminal-Einstellungen
  • AIDs
  • CAPKs (öffentliche Schlüssel der Zertifizierungsstelle)

ID TECH stellt Beispielwerte für diese Zwecke bereit (nur für Testzwecke), jedoch müssen Sie dennoch die Befehle ausführen, die die Beispielwerte laden. Sie werden erst geladen, wenn Sie die entsprechenden Befehle ausführen! (Sobald Ihr Lesegerät diese Daten geladen hat, müssen Sie sie glücklicherweise nicht bei jedem Start neu laden. Die Werte bleiben gespeichert. Die Konfiguration ist ein einmaliger Vorgang.) Sehen Sie sich den Beispielcode des SDK an, um zu erfahren, wie dies durchgeführt wird.

Die EMV-Konfiguration ist ein recht umfangreiches Thema, dem wir in diesem Beitrag nicht vollständig gerecht werden können. Eine Einführung in das Thema finden Sie in unserem früheren Beitrag zu Terminal-Einstellungensowie im Konfigurationsabschnitt unserer EMV White Paper (PDF: kostenloser Download).

Schritt 3: Eine Transaktion durchführen

Die Beispiel-App enthält entsprechenden Code. Gehen Sie die App Schritt für Schritt durch, um zu verstehen, wie sie funktioniert. Andernfalls müssen Sie mindestens einen benutzerdefinierten Callback einrichten (eine Funktion, die vom SDK zum richtigen Zeitpunkt automatisch aufgerufen wird), und anschließend emv_startTransaction() selbst aufrufen.

Die Kommunikation mit dem Kartenlesegerät erfolgt asynchron. Das bedeutet: Wenn Sie eine Methode wie emv_startTransaction()aufrufen, nimmt das SDK Kontakt mit dem Lesegerät auf und löst damit eine Abfolge von Ereignissen aus – Ihr Programm wird dabei jedoch nicht blockiert. Stattdessen wird die Kontrolle sofort an Ihre App zurückgegeben (zusammen mit einem Erfolgs- oder Fehlercode). Der SDK-Code überwacht das Lesegerät kontinuierlich auf Aktualisierungen. Wenn das Lesegerät beispielsweise die Startphase der EMV-Transaktion abgeschlossen hat, sendet es TLV-Daten an den Host-Computer (in der Regel über USB). Das SDK fängt diese Daten ab, ruft Ihren benutzerdefinierten Callback auf und übergibt die Daten an diesen.

Kurz gesagt: Sie müssen einen benutzerdefinierten Callback einrichten, wenn Sie Rückmeldungen vom Lesegerät empfangen möchten!

Wie sieht ein Callback aus?

In der Windows-Version des Universal SDK sollte Ihr benutzerdefinierter Callback eine C#-Signatur haben, die in etwa wie folgt aussieht:

Um sicherzustellen, dass Ihr Callback tatsächlich verwendet, müssen Sie es zur Laufzeit beim SDK registrieren, wie folgt:

Dieses Beispiel setzt voraus, dass Sie den VP3300 als Kartenlesegerät verwenden, aber selbstverständlich unterstützt das SDK jeden ID TECH Zahlungsleser, den Sie einsetzen. Es handelt sich schließlich um ein universelles SDK.

Wie sieht der Transaktionscode aus?

Wenn Sie eine Transaktion starten möchten, müssen Sie Code ausführen, der in etwa so aussieht:

Der Aufruf von emv_startTransaction() führt dazu, dass eine Anfrage (über USB oder seriell) an den Leser gesendet wird. Der Leser führt ein ATR durch (d. h. er nimmt Kontakt mit dem Chip auf der Karte auf) und veranlasst den EMV-Kernel, aktiv zu werden.

Vorausgesetzt, die Starttransaktion ist erfolgreich (kein Timeout, kein Fehler) und Sie haben einen Callback registriert (wie zuvor beschrieben), wird Ihr Callback nach ein bis zwei Sekunden ausgeführt. Ihr Callback-Code sollte eine recht umfangreiche „switch"-Anweisung mit zahlreichen Cases enthalten, um verschiedene Arten von Ergebnissen zu verarbeiten. Das gewünschte Ergebnis ist natürlich eine erfolgreiche EMV-Transaktion mit TLV-Daten. Daher werden Sie wahrscheinlich Code verwenden, der dem folgenden ähnelt und am Ende der Startphase (in Ihrem Callback) ausgeführt wird:

Dieser Code setzt voraus, dass Sie Ihre Einstellungen so konfiguriert haben, dass die Authenticate-Transaction-Phase automatisch ausgeführt wird, sodass Sie direkt von Start zu Complete wechseln können. (Dies muss nicht zwingend so umgesetzt werden – es hängt ganz von Ihren Anforderungen ab.) In einer echten Zahlungsanwendung würde Ihre App in diesem „case" pausieren, um online eine Verbindung zum Gateway oder Acquirer herzustellen. Anschließend würden Sie Tag 8A (und möglicherweise weitere) an emv_completeTransaction().

Um zu verstehen, wie die Transaktionsdaten (die TLVs) analysiert werden, die nach jeder Transaktionsphase zurückgegeben werden, suchen Sie im Beispielcode nach „displayCardData(IDTTransactionData cardData)". Dort finden Sie verschiedene Beispiele zur Datenauswertung.

Fragen?

Beim Einstieg in die Arbeit mit dem SDK werden möglicherweise Fragen aufkommen. Beachten Sie, dass das SDK eine umfangreiche Dokumentation (sowohl im HTML- als auch im PDF-Format) enthält. Sollten Ihre Fragen darüber hinausgehende Antworten erfordern, stehen wir Ihnen gerne zur Verfügung! Kontaktieren Sie unsere Experten:

Gebührenfreie Rufnummer
1-800-984-1010