Post tecnico
Sviluppare per EMV, Parte III
Nella Parte I di questa serie, abbiamo discusso di come le transazioni con carta a chip differiscano dal MagStripe. Abbiamo visto che esiste una notevole quantità di comunicazioni bidirezionali tra il lettore e la carta. Ma (buona notizia!) abbiamo anche visto che gran parte di questa comunicazione 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 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 direttamente al lettore di carte (tramite USB o RS-232), in generale è più semplice interagire con il lettore utilizzando l'Universal SDK di ID TECH. (Visita il sito qui per i download. Tieni presente che dovrai specificare una piattaforma: Windows, Linux, MacOS, iOS o Android.)
Perché l'SDK è più semplice? Innanzitutto, si occupa di configurare le comunicazioni seriali (USB, RS-232 o Bluetooth) con il lettore. Inoltre, evita di dover conoscere i dettagli relativi a
comandi firmware a livello di dispositivo e i relativi protocolli di basso livello. Inoltre, sono disponibili 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 mostra 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 si conosce già il sistema operativo per cui si svilupperà, accedere a Development — Home nella Knowledge Base e navigare fino al download appropriato. Sono disponibili versioni separate per Windows, Linux, MacOS, iOS e Android.
Decomprimere l'archivio e provare a caricare il progetto di esempio (nella cartella Source Code) nell'IDE preferito. Compilare ed eseguire l'app di esempio con il lettore ID TECH collegato. Verificare che l'app riesca a comunicare con il lettore.
Passaggio 2: Configurare il lettore
Non aspettarti di poter eseguire una transazione EMV direttamente "out of the box"! La prima transazione fallirà se non hai dedicato il tempo necessario a configurare il lettore. Come requisito minimo, è necessario caricare sul lettore:
- Impostazioni del terminale
- AID
- CAPK (Certificate Authority Public Keys)
ID TECH fornisce valori di esempio per questi elementi (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! (Fortunatamente, una volta che il lettore dispone di questi elementi caricati, non è necessario ricaricarli a ogni avvio. I valori sono persistenti. La configurazione è un'operazione che si esegue una sola volta.) Consulta il codice di esempio dell'SDK per vedere come procedere.
La configurazione EMV è un argomento piuttosto ampio. Non cercheremo di trattarlo in modo esaustivo in questo articolo. Per un'introduzione all'argomento, ti consigliamo di consultare il nostro articolo precedente sulle Impostazioni del terminale, e di leggere anche 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 eseguire questa operazione. Scorri l'app per vedere come funziona. In alternativa, dovrai almeno configurare una callback personalizzata (una funzione che verrà richiamata automaticamente dall'SDK al momento opportuno), per poi chiamare emv_startTransaction() autonomamente.
La comunicazione con il lettore di carte avviene in modo asincrono, il che significa che quando si chiama 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 positivo/errore). Il codice SDK monitorerà il lettore per eventuali aggiornamenti. Quando il lettore completa la fase di avvio della transazione EMV, ad esempio, invia dati TLV al computer host (di norma tramite USB). L'SDK intercetterà tali dati, richiamerà la callback personalizzata e le trasmetterà i dati.
In sintesi, è necessario configurare una callback personalizzata per ricevere le risposte dal lettore!
Come si presenta una Callback?
Nella versione Windows dell'Universal SDK, la callback personalizzata deve avere una firma C# simile alla seguente:
Per assicurarsi che la callback sia effettivamente utilizzato, è necessario registrarlo con l'SDK in fase di esecuzione, come segue:
Questo esempio presuppone l'utilizzo del VP3300 come lettore di carte, 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 di transazione?
Per avviare una transazione, sarà necessario eseguire un codice simile al seguente:
La chiamata a emv_startTransaction() genererà l'invio di una richiesta (tramite USB o seriale) al lettore. Il lettore eseguirà un ATR (ovvero contatterà il chip sulla carta) 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. Il codice avrà pertanto un aspetto 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 così: 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 (e possibilmente altri) a emv_completeTransaction().
Per vedere 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 per l'analisi dei dati.
Domande?
È possibile che sorgano domande quando si inizia a utilizzare l'SDK. Tieni presente che l'SDK include un'ampia documentazione (in formato HTML e PDF). Se tuttavia hai bisogno di ulteriori chiarimenti, siamo a tua disposizione! Contatta i nostri esperti:
