ID TECH
Contacto
Todos los artículos técnicos

Publicación técnica

Desarrollo para EMV, parte III

En Parte I de esta serie, hablamos de cómo las transacciones con tarjeta chip se diferencian de las de banda magnética. Vimos que existe una cantidad considerable de comunicación bidireccional entre el lector y la tarjeta. Pero (¡buenas noticias!) también vimos que gran parte de esa comunicación se gestiona de forma automática —es decir, fuera del control del desarrollador de la aplicación de pagos— por el kernel EMV del lector.

En Parte II, hablamos un poco sobre las distintas etiquetas (o datos TLV) que cabe esperar recibir durante una transacción EMV, y qué significan algunas de ellas. También mencionamos que una transacción EMV ocurre en fases (con nombres como Start, Authenticate y Complete). Y vimos que distintos TLVs se devuelven durante las distintas fases.

También hemos mencionado (de hecho, muchas veces) que, aunque ciertamente puedes llevar a cabo una transacción EMV enviando comandos de firmware directamente al lector de tarjetas (a través de USB o RS-232), generalmente resulta más fácil interactuar con el lector utilizando el Universal SDK de ID TECH. (Ve aquí para las descargas. Prepárate para especificar una plataforma: Windows, Linux, MacOS, iOS o Android.)

¿Por qué es más fácil el SDK? Pues, para empezar, se encarga de configurar las comunicaciones serie (USB, RS-232 o Bluetooth) con el lector. Además, te evita tener que conocer

los comandos de firmware a nivel de dispositivo y los protocolos de bajo nivel asociados. También obtienes bibliotecas de código listas para usar que ayudan con la interpretación de códigos de error y el análisis de datos.

Otra gran ventaja del Universal SDK es que viene con código de ejemplo que muestra cómo usar las distintas bibliotecas que facilitan estas tareas. (Sigue leyendo.)

¿Cómo empezar con el SDK? Veamos los pasos principales.

Paso 1: Instala el SDK

Si ya sabes para qué sistema operativo vas a desarrollar, ve a Desarrollo — Inicio en la Knowledge Base y navega hasta la descarga correspondiente. Hay versiones independientes para Windows, Linux, MacOS, iOS y Android.

Descomprime el archivo e intenta cargar el proyecto de ejemplo (búscalo en la carpeta Source Code) en tu IDE preferido. Compila y ejecuta la aplicación de ejemplo, con tu lector ID TECH conectado. Comprueba que la aplicación puede comunicarse con el lector.

Paso 2: Configura tu lector

¡No esperes poder ejecutar una transacción EMV nada más sacarlo de la caja! Tu primera transacción fallará si no te has tomado el tiempo de configurar el lector. Como mínimo, esto significa cargar en el lector:

  • Ajustes del terminal
  • AIDs
  • CAPKs (claves públicas de la autoridad de certificación)

ID TECH proporciona valores de ejemplo para estos elementos (solo con fines de prueba), pero aun así tendrás que ejecutar los comandos que cargan los valores de ejemplo. ¡No se cargan hasta que ejecutes los comandos! (Por suerte, una vez que el lector tiene estos elementos cargados, no es necesario volver a cargarlos en cada arranque. Los valores son persistentes. La configuración es algo que se hace una sola vez.) Echa un vistazo al código de ejemplo del SDK para ver cómo se hace.

La configuración EMV es un tema bastante amplio. No intentaremos abordarlo en profundidad en esta publicación. Para una introducción al tema, no dejes de consultar nuestra publicación anterior sobre los Ajustes del terminal, y lee también la sección de Configuración de nuestro White Paper sobre EMV (PDF: descarga gratuita).

Paso 3: Ejecuta una transacción

La aplicación de ejemplo contiene código para hacerlo. Recorre paso a paso la aplicación para ver cómo funciona. De lo contrario, al menos tendrás que configurar un callback personalizado (una función que el SDK invocará automáticamente en el momento adecuado) y, a continuación, llamar a emv_startTransaction() usted mismo.

La comunicación con el lector de tarjetas se realiza de forma asíncrona, lo que significa que cuando se llama a un método como emv_startTransaction(), el SDK se pondrá en contacto con el lector, desencadenando una cadena de eventos, pero su programa no se bloqueará mientras se producen dichos eventos. En su lugar, el control se devuelve inmediatamente a su aplicación (junto con un código de éxito o error). El código del SDK supervisará el lector en busca de actualizaciones. Cuando el lector finalice la fase Start de la transacción EMV, por ejemplo, enviará datos TLV al equipo anfitrión (normalmente por USB). El SDK interceptará esos datos, invocará su callback personalizado y le entregará los datos.

En resumen: ¡necesita configurar un callback personalizado si quiere recibir respuesta del lector!

¿Qué aspecto tiene un callback?

En la versión para Windows del Universal SDK, su callback personalizado debe tener una firma en C# similar a la siguiente:

Para garantizar que su callback se utilicerealmente, debe registrarlo en el SDK en tiempo de ejecución, de este modo:

Este ejemplo asume que está utilizando el VP3300 como lector de tarjetas, pero obviamente el SDK admitirá cualquier lector de pagos de ID TECH que esté empleando. Al fin y al cabo, es un SDK Universal .

¿Qué aspecto tiene el código de la transacción?

Cuando desee iniciar una transacción, deberá ejecutar un código similar al siguiente:

La llamada a emv_startTransaction() dará lugar al envío de una solicitud (por USB o por serie) al lector. El lector realizará un ATR (es decir, se pondrá en contacto con el chip de la tarjeta) y hará que el kernel EMV entre en acción.

Suponiendo que el Start Transaction se complete con éxito (sin agotar el tiempo de espera ni generar errores) y que haya registrado un callback (como se ha descrito anteriormente), su callback se ejecutará después de uno o dos segundos. El código de su callback debería contener una sentencia “switch” bastante grande con muchos casos para gestionar diversos tipos de resultados. El resultado que espera, por supuesto, es una transacción EMV exitosa con datos TLV. Por lo tanto, es probable que tenga un código parecido al siguiente, que se ejecutará (en su callback) al final de la fase Start:

Este código asume que ha configurado sus preferencias de forma que se ejecute automáticamente la fase Authenticate Transaction, de modo que pueda pasar directamente de Start a Complete. (No tiene por qué hacerse así, naturalmente. Todo depende de sus requisitos). En una aplicación de pago real, su aplicación se detendría durante este ‘case’ para conectarse en línea con la pasarela o el adquirente. A continuación, pasaría el tag 8A (y quizá otros) a emv_completeTransaction().

Para ver cómo analizar los datos de la transacción (los TLV) que se devuelven después de cada fase, busque en el código de ejemplo “displayCardData(IDTTransactionData cardData)”. Encontrará varios ejemplos para analizar los datos.

¿Tiene preguntas?

Es posible que le surjan preguntas a medida que comience a utilizar el SDK. Tenga en cuenta que el SDK incluye abundante documentación (tanto en HTML como en PDF). Pero si sus preguntas requieren respuestas más detalladas, ¡estamos a su disposición! Póngase en contacto con nuestros expertos:

Número gratuito
1-800-984-1010