Article technique
Développer pour EMV, Partie III
Dans Partie I de cette série, nous avons expliqué en quoi les transactions par carte à puce diffèrent des transactions MagStripe. Nous avons constaté qu'il existe un nombre considérable d'échanges entre le lecteur et la carte. Mais (bonne nouvelle !) nous avons également vu qu'une grande partie de ces échanges est gérée automatiquement — c'est-à-dire en dehors du contrôle du développeur d'application de paiement — par le noyau EMV du lecteur.
Dans Partie II, nous avons abordé les différents tags (ou données TLV) que vous pouvez vous attendre à recevoir au cours d'une transaction EMV, ainsi que leur signification. Nous avons également mentionné qu'une transaction EMV se déroule en plusieurs phases (portant des noms tels que Démarrage, Authentification et Finalisation). Nous avons aussi observé que des différents TLV sont retournés lors des différentes phases.
Nous avons également mentionné (à de nombreuses reprises, d'ailleurs) que, bien qu'il soit tout à fait possible d'effectuer une transaction EMV en envoyant des commandes firmware brutes directement au lecteur de carte (via USB ou RS-232), il est généralement plus simple d'interagir avec le lecteur à l'aide du SDK universel d'ID TECH. (Rendez-vous ici pour les téléchargements. Soyez prêt à spécifier une plateforme : Windows, Linux, MacOS, iOS ou Android.)
Pourquoi le SDK est-il plus simple à utiliser ? Tout d'abord, il prend en charge la configuration des communications série (USB, RS-232 ou Bluetooth) avec le lecteur. Il vous évite également d'avoir à vous préoccuper de
commandes firmware au niveau du dispositif et protocoles bas niveau associés. Vous bénéficiez également de bibliothèques de code prêtes à l'emploi pour faciliter l'interprétation des codes d'erreur et l'analyse des données.
L'Universal SDK présente un autre atout majeur : il est fourni avec du code d'exemple illustrant l'utilisation des différentes bibliothèques qui simplifient ces tâches. (Lisez la suite.)
Comment démarrer avec le SDK ? Voici les principales étapes.
Étape 1 : Installer le SDK
Si vous savez pour quel système d'exploitation vous allez développer, rendez-vous dans Development — Home sur la base de connaissances et naviguez jusqu'au téléchargement correspondant. Des versions distinctes sont disponibles pour Windows, Linux, MacOS, iOS et Android.
Décompressez l'archive et essayez de charger le projet d'exemple (dans le dossier Source Code) dans l'IDE de votre choix. Compilez et exécutez l'application d'exemple avec votre lecteur ID TECH connecté. Vérifiez que l'application peut communiquer avec le lecteur.
Étape 2 : Configurer votre lecteur
Ne vous attendez pas à pouvoir effectuer une transaction EMV directement après déballage ! Votre première transaction échouera si vous n'avez pas pris le temps de configurer votre lecteur. Au minimum, cela implique de charger dans le lecteur :
- Les paramètres du terminal
- Les AIDs
- Les CAPKs (clés publiques d'autorité de certification)
ID TECH fournit des valeurs d'exemple pour ces éléments (à des fins de test uniquement), mais vous devez tout de même exécuter les commandes qui chargent ces valeurs d'exemple. Elles ne sont pas chargées tant que vous n'avez pas exécuté les commandes ! (Heureusement, une fois ces éléments chargés dans votre lecteur, il n'est pas nécessaire de les recharger à chaque démarrage. Les valeurs sont persistantes. La configuration est une opération unique.) Consultez le code d'exemple du SDK pour voir comment procéder.
La configuration EMV est un sujet assez vaste que nous ne prétendons pas traiter en profondeur dans cet article. Pour une introduction au sujet, consultez notre article précédent sur les paramètres du terminal, et lisez également la section Configuration de notre EMV White Paper (PDF : téléchargement gratuit).
Étape 3 : Exécuter une transaction
L'application exemple contient le code nécessaire à cet effet. Parcourez l'application pour comprendre son fonctionnement. Sinon, vous devrez au minimum configurer un callback personnalisé (une fonction qui sera invoquée automatiquement par le SDK au moment approprié), puis appeler emv_startTransaction() vous-même.
La communication avec le lecteur de carte s'effectue de manière asynchrone, ce qui signifie que lorsque vous appelez une méthode telle que emv_startTransaction(), le SDK contacte le lecteur et déclenche une série d'événements, sans pour autant bloquer l'exécution de votre programme pendant leur déroulement. Le contrôle est immédiatement rendu à votre application (accompagné d'un code de succès ou d'erreur). Le code du SDK surveille le lecteur afin de détecter toute mise à jour. Lorsque le lecteur termine la phase de démarrage de la transaction EMV, par exemple, il envoie des données TLV à l'ordinateur hôte (généralement via USB). Le SDK intercepte ces données, invoque votre callback personnalisé et lui transmet les données.
En résumé, vous devez configurer un callback personnalisé si vous souhaitez recevoir des réponses du lecteur !
À quoi ressemble un callback ?
Dans la version Windows de l'Universal SDK, votre callback personnalisé doit avoir une signature C# similaire à celle-ci :
Pour vous assurer que votre callback est bien utilisé, vous devez l'enregistrer auprès du SDK au moment de l'exécution, comme suit :
Cet exemple suppose que vous utilisez le VP3300 comme lecteur de carte, mais le SDK prend bien entendu en charge n'importe quel lecteur de paiement ID TECH que vous utilisez. C'est, après tout, un SDK universel .
À quoi ressemble le code de transaction ?
Lorsque vous souhaitez initier une transaction, vous devez exécuter un code similaire à celui-ci :
L'appel à emv_startTransaction() entraîne l'envoi d'une requête (via USB ou port série) au lecteur. Le lecteur effectue un ATR (c'est-à-dire qu'il contacte la puce de la carte) et déclenche l'activation du noyau EMV.
En supposant que le démarrage de la transaction aboutisse (sans expiration ni erreur) et que vous ayez enregistré un rappel (callback) tel que décrit précédemment, celui-ci sera exécuté au bout d'une à deux secondes. Votre code de rappel doit contenir une instruction « switch » suffisamment étoffée, avec de nombreux cas pour gérer les différents types de résultats. Le résultat attendu est bien entendu une transaction EMV réussie avec des données TLV. Vous aurez donc probablement un code similaire à celui qui suit, qui s'exécutera (dans votre rappel) à la fin de la phase de démarrage :
Ce code suppose que vous avez configuré vos préférences de manière à exécuter automatiquement la phase d'authentification de la transaction, afin de passer directement du démarrage à la finalisation. (Ce n'est pas la seule façon de procéder ; tout dépend de vos exigences.) Dans une application de paiement réelle, votre application marquerait une pause lors de ce « case » pour se connecter en ligne à la passerelle ou à l'acquéreur. Vous transmettriez ensuite le tag 8A (et éventuellement d'autres) à emv_completeTransaction().
Pour savoir comment analyser les données de transaction (les TLV) renvoyées après chaque phase de la transaction, recherchez dans le code d'exemple « displayCardData(IDTTransactionData cardData) ». Vous y trouverez différents exemples d'analyse des données.
Des questions ?
Des questions peuvent surgir lorsque vous commencez à utiliser le SDK. N'oubliez pas que le SDK est accompagné d'une documentation complète (aux formats HTML et PDF). Mais si vous avez besoin de réponses supplémentaires, nous sommes là pour vous aider ! Contactez nos experts :
