ID TECH
Kontakt
Alle technischen Beiträge

Technischer Beitrag

Entwicklung für EMV, Teil III

In Teil I dieser Seriehaben wir besprochen, wie sich Chip-Kartentransaktionen von MagStripe unterscheiden. Wir haben gesehen, dass zwischen dem Lesegerät und der Karte ein erheblicher Kommunikationsaustausch stattfindet. Aber (die gute Nachricht!) wir haben auch festgestellt, dass ein Großteil dieser Kommunikation automatisch abgewickelt wird – das heißt, außerhalb des Einflussbereichs des Zahlungsanwendungsentwicklers – durch den EMV-Kernel des Lesegeräts.

In Teil IIhaben wir kurz über die verschiedenen Tags (bzw. TLV-Daten) gesprochen, die Sie während einer EMV-Transaktion zurückerhalten können, und was einige davon bedeuten. Wir haben auch 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 es zwar möglich ist, eine EMV-Transaktion durch das direkte Senden von Rohdaten-Firmwarebefehlen an das Kartenlesegerät (über USB oder RS-232) durchzuführen, es jedoch in der Regel einfacher ist, über das Universal SDK von ID TECH mit dem Lesegerät zu interagieren. (Weiter hier für Downloads. Halten Sie die Plattform bereit, für die Sie entwickeln: Windows, Linux, MacOS, iOS oder Android.)

Warum ist die SDK einfacher? Zunächst übernimmt sie die Einrichtung der seriellen Kommunikation (USB, RS-232 oder Bluetooth) mit dem Lesegerät. Außerdem müssen Sie sich keine Kenntnisse über

gerätespezifische Firmware-Befehle und die zugehörigen Low-Level-Protokolle aneignen. Darüber hinaus stehen Ihnen fertige Code-Bibliotheken zur Verfügung, die bei der Interpretation von Fehlercodes und der Datenverarbeitung helfen.

Ein weiterer großer Vorteil der Universal SDK ist, dass sie 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 SDK ein? Werfen wir einen Blick auf die wichtigsten Schritte.

Schritt 1: SDK installieren

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

Entpacken Sie das Archiv und versuchen Sie, das Beispielprojekt (zu finden im Ordner „Source Code") in Ihrer bevorzugten Entwicklungsumgebung zu laden. Kompilieren Sie die Beispielanwendung und führen Sie sie aus, während Ihr ID TECH Lesegerät angeschlossen ist. Überprüfen Sie, ob die Anwendung mit dem Lesegerät kommunizieren kann.

Schritt 2: Lesegerät konfigurieren

Erwarten Sie nicht, dass Sie sofort eine EMV-Transaktion durchführen können! Ihre erste Transaktion wird fehlschlagen, wenn Sie sich nicht die Zeit genommen haben, Ihr Lesegerät zu konfigurieren. Mindestens müssen folgende Daten auf das Lesegerät geladen werden:

  • Terminaleinstellungen
  • AIDs
  • CAPKs (öffentliche Schlüssel der Zertifizierungsstelle)

ID TECH stellt Beispielwerte für diese Parameter bereit (ausschließlich zu Testzwecken), jedoch müssen Sie dennoch die Befehle ausführen, die diese Beispielwerte laden. Sie werden erst geladen, wenn Sie die entsprechenden Befehle ausführen! (Zum Glück müssen diese Werte nach dem ersten Laden nicht bei jedem Neustart erneut geladen werden. Die Werte bleiben dauerhaft 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, auf das wir in diesem Beitrag nicht vollständig eingehen können. Als Einstieg in die Materie empfehlen wir unseren früherer Beitrag zu Terminal-Einstellungen, und lesen Sie außerdem den Abschnitt „Konfiguration" in unserem 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 dann emv_startTransaction() selbst aufrufen.

Die Kommunikation mit dem Kartenlesegerät erfolgt asynchron, das heißt: Wenn Sie eine Methode wie emv_startTransaction()aufrufen, nimmt das SDK Kontakt zum Lesegerät auf und löst damit eine Abfolge von Ereignissen aus – Ihr Programm wird dabei jedoch nicht blockiert, während diese Ereignisse ablaufen. 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 abschließt, 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 Callback.

Kurz gesagt: Sie müssen einen benutzerdefinierten Callback einrichten, wenn Sie Rückmeldungen vom Lesegerät erhalten 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 so aussieht:

Um sicherzustellen, dass Ihr Callback tatsächlich verwendetwird, müssen Sie ihn zur Laufzeit beim SDK registrieren, und zwar wie folgt:

Dieses Beispiel geht davon aus, dass Sie den VP3300 als Kartenlesegerät verwenden. Selbstverständlich unterstützt das SDK jedoch jedes ID TECH Zahlungslesegerät, das Sie einsetzen. Es handelt sich schließlich um ein Universal 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 das Lesegerät gesendet wird. Das Lesegerät führt ein ATR durch (d. h. es nimmt Kontakt mit dem Chip auf der Karte auf) und veranlasst den EMV-Kernel, seine Arbeit aufzunehmen.

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 Fällen enthalten, um verschiedene Ergebnistypen zu behandeln. Das erhoffte Ergebnis ist natürlich eine erfolgreiche EMV-Transaktion mit TLV-Daten. Daher werden Sie wahrscheinlich Code verwenden, der in etwa dem folgenden entspricht und am Ende der Startphase (in Ihrem Callback) ausgeführt wird:

Dieser Code setzt voraus, dass Sie Ihre Einstellungen so konfiguriert haben, dass die Phase „Authenticate Transaction" automatisch ausgeführt wird – Sie können also direkt von „Start" zu „Complete" übergehen. (Das ist natürlich nicht zwingend erforderlich – es hängt alles von Ihren Anforderungen ab.) In einer echten Zahlungsanwendung würde Ihre App während dieses „case"-Schritts pausieren, um eine Online-Verbindung zum Gateway oder Acquirer herzustellen. Anschließend übergeben Sie Tag 8A (und ggf. weitere Tags) an emv_completeTransaction().

Um zu verstehen, wie die Transaktionsdaten (die TLVs) ausgewertet werden, die nach jeder Transaktionsphase zurückgegeben werden, suchen Sie im Beispielcode nach „displayCardData(IDTTransactionData cardData)". Dort finden Sie verschiedene Beispiele für das Parsen der Daten.

Fragen?

Beim Einstieg in die Arbeit mit dem SDK können Fragen aufkommen. Beachten Sie, dass das SDK eine umfangreiche Dokumentation enthält (sowohl im HTML- als auch im PDF-Format). Sollten Ihre Fragen darüber hinaus weiterer Klärung bedürfen, stehen wir Ihnen gerne zur Verfügung! Wenden Sie sich an unsere Experten:

Gebührenfreie Rufnummer
1-800-984-1010