ID TECH
Contatto
Tutti gli articoli tecnici

Post tecnico

Sviluppare per EMV, Parte III

Nella Parte I di questa serie, abbiamo parlato di come le transazioni con carta a chip si differenziano da quelle con MagStripe. Abbiamo visto che tra il lettore e la carta avviene una notevole quantità di comunicazioni bidirezionali. Ma (buona notizia!) abbiamo anche visto che gran parte di queste comunicazioni viene gestita automaticamente — ovvero, al di fuori del controllo dello sviluppatore dell'applicazione di pagamento — dal kernel EMV del lettore.

Nella Parte II, abbiamo parlato brevemente dei vari tag (o dati TLV) che ci si può aspettare di ricevere durante una transazione EMV e del significato di alcuni di essi. Abbiamo anche menzionato che una transazione EMV si svolge in fasi (con nomi come Avvio, Autenticazione e Completamento). Abbiamo inoltre visto che diversi TLV vengono restituiti nelle diverse fasi.

Abbiamo anche menzionato (molte volte, in realtà) che, sebbene sia certamente possibile eseguire una transazione EMV inviando comandi firmware grezzi direttamente al lettore di carte (tramite USB o RS-232), in genere è più semplice interagire con il lettore utilizzando l'Universal SDK di ID TECH. (Accedere qui per i download. Essere pronti a specificare una piattaforma: Windows, Linux, MacOS, iOS o Android.)

Perché l'SDK è più semplice? Prima di tutto, si occupa di configurare le comunicazioni seriali (USB, RS-232 o Bluetooth) con il lettore. Protegge inoltre lo sviluppatore dalla necessità di conoscere

comandi firmware a livello di dispositivo e i relativi protocolli di basso livello. Sono inoltre incluse librerie di codice già pronte che facilitano l'interpretazione dei codici di errore e il parsing dei dati.

Un altro grande vantaggio dell'Universal SDK è che include codice di esempio che illustra come utilizzare le varie librerie per semplificare queste operazioni. (Continua a leggere.)

Come si inizia a lavorare con l'SDK? Vediamo i passaggi principali.

Passaggio 1: Installare l'SDK

Se sai già per quale sistema operativo svilupperai, vai su Development — Home nella Knowledge Base e accedi al download appropriato. Sono disponibili versioni separate per Windows, Linux, MacOS, iOS e Android.

Decomprimi l'archivio e prova a caricare il progetto di esempio (disponibile nella cartella Source Code) nel tuo IDE preferito. Compila ed esegui l'app di esempio con il lettore ID TECH collegato. Verifica che l'app sia in grado di comunicare con il lettore.

Passaggio 2: Configurare il lettore

Non aspettarti di poter eseguire una transazione EMV direttamente all'avvio! La prima transazione fallirà se non hai configurato il lettore in anticipo. Come requisito minimo indispensabile, è necessario caricare nel lettore:

  • Impostazioni del terminale
  • AID
  • CAPK (Certificate Authority Public Keys)

ID TECH fornisce valori di esempio per questi parametri (solo a scopo di test), ma è comunque necessario eseguire i comandi che caricano i valori di esempio. I valori non vengono caricati finché non si eseguono i comandi! (Per fortuna, una volta caricati questi elementi nel lettore, non è necessario ricaricarli a ogni avvio. I valori sono persistenti. La configurazione è un'operazione che si effettua una sola volta.) Consulta il codice di esempio dell'SDK per vedere come procedere.

La configurazione EMV è un argomento piuttosto ampio. Non è nostra intenzione trattarlo in modo esaustivo in questo articolo. Per un'introduzione all'argomento, ti consigliamo di leggere il nostro articolo precedente sulle impostazioni del terminale, nonché la sezione Configurazione del nostro EMV White Paper (PDF: download gratuito).

Passaggio 3: Eseguire una transazione

L'app di esempio contiene il codice necessario per farlo. Scorri l'app per vedere come funziona. In alternativa, dovrai almeno configurare un callback personalizzato (una funzione che verrà invocata automaticamente dall'SDK al momento opportuno), quindi chiamare emv_startTransaction() autonomamente.

La comunicazione con il lettore di carte avviene in modo asincrono, il che significa che quando si richiama un metodo come emv_startTransaction(), l'SDK contatterà il lettore avviando una serie di eventi, ma il programma non rimarrà in attesa durante lo svolgimento di tali eventi. Il controllo viene invece restituito immediatamente all'app (insieme a un codice di esito/errore). Il codice SDK monitorerà il lettore per eventuali aggiornamenti. Quando il lettore completa la fase di avvio della transazione EMV, ad esempio, invia i dati TLV al computer host (di solito via USB). L'SDK intercetterà quei dati, invocherà il callback personalizzato e trasmetterà i dati al callback.

In sostanza, è necessario configurare un callback personalizzato per ricevere le risposte dal lettore!

Come si presenta un callback?

Nella versione Windows dell'SDK universale, il callback personalizzato deve avere una firma C# simile alla seguente:

Per assicurarsi che il callback sia effettivamente utilizzato, è necessario registrarlo con l'SDK in fase di esecuzione, come segue:

Questo esempio presuppone che si stia utilizzando il VP3300 come lettore di schede, ma ovviamente l'SDK supporterà qualsiasi lettore di pagamento ID TECH in uso. Si tratta, dopotutto, di un SDK Universale .

Come si presenta il codice della transazione?

Per avviare una transazione, sarà necessario eseguire un codice simile al seguente:

La chiamata a emv_startTransaction() comporterà l'invio di una richiesta (via USB o seriale) al lettore. Il lettore eseguirà un ATR (ovvero contatterà il chip sulla scheda) e attiverà il kernel EMV.

Supponendo che la transazione di avvio abbia esito positivo (senza timeout o errori) e che sia stato registrato un callback (come descritto in precedenza), il callback verrà eseguito dopo uno o due secondi. Il codice del callback dovrebbe contenere un'istruzione "switch" piuttosto articolata, con numerosi casi per gestire i diversi tipi di esito. L'esito auspicato è, naturalmente, una transazione EMV riuscita con dati TLV. È quindi probabile che il codice sia simile al seguente, che verrà eseguito (nel callback) al termine della fase di avvio:

Questo codice presuppone che le preferenze siano state configurate in modo da eseguire automaticamente la fase di autenticazione della transazione, consentendo di passare direttamente dall'avvio al completamento. (Non è necessariamente l'unico approccio: tutto dipende dai requisiti specifici.) In un'applicazione di pagamento reale, l'app si metterebbe in pausa durante questo "caso" per connettersi online al gateway o all'acquirer. Si passerebbe quindi il tag 8A (ed eventualmente altri) a emv_completeTransaction().

Per capire come analizzare i dati della transazione (i TLV) restituiti dopo ogni fase della transazione, cerca nel codice di esempio "displayCardData(IDTTransactionData cardData)". Troverai vari esempi di parsing dei dati.

Domande?

Potrebbero sorgere domande man mano che inizi a utilizzare l'SDK. Tieni presente che l'SDK è corredato da un'ampia documentazione (in formato HTML e PDF). Se però le tue domande richiedono ulteriori chiarimenti, siamo a tua disposizione! Contatta i nostri esperti:

Numero Verde
1-800-984-1010