Obtener y comprender los datos de bandas magnéticas
En este tema se describe cómo obtener e interpretar los datos de un lector de banda magnética mediante las API de punto de servicio (POS) de la Plataforma Universal de Windows (UWP).
Suscribirse a eventos *DataReceived
Una vez que haya configurado el lector de banda magnética en su aplicación con los pasos descritos en Introducción a Punto de Servicio, estará listo para empezar a obtener datos de él.
Cada vez que el lector reconozca una tarjeta pasada, lanzará uno de estos tres eventos:
- Evento AamvaCardDataReceived: Ocurre cuando se pasa una tarjeta de automóvil.
- Evento BankCardDataReceived: Se produce al pasar una tarjeta bancaria.
- Evento VendorSpecificDataReceived: Se produce cuando se pasa una tarjeta específica de un proveedor.
La aplicación solo necesita suscribirse a los eventos soportados por el lector de banda magnética. Puede ver qué tipos de tarjetas son compatibles con MagneticStripeReader.SupportedCardTypes.
El siguiente código muestra la suscripción a los tres eventos *DataReceived:
private void SubscribeToEvents(ClaimedMagneticStripeReader claimedReader, MagneticStripeReader reader)
{
foreach (var type in reader.SupportedCardTypes)
{
if (item == MagneticStripeReaderCardTypes.Aamva)
{
claimedReader.AamvaCardDataReceived += Reader_AamvaCardDataReceived;
}
else if (item == MagneticStripeReaderCardTypes.Bank)
{
claimedReader.BankCardDataReceived += Reader_BankCardDataReceived;
}
else if (item == MagneticStripeReaderCardTypes.ExtendedBase)
{
claimedReader.VendorSpecificDataReceived += Reader_VendorSpecificDataReceived;
}
}
}
Al controlador de eventos se le pasará el ClaimedMagneticStripeReader y un objeto args, cuyo tipo variará en función del evento:
- Evento AamvaCardDataReceived: Clase MagneticStripeReaderAamvaCardDataReceivedEventArgs
- Evento BankCardDataReceived: Clase MagneticStripeReaderBankCardDataReceivedEventArgs
- Evento VendorSpecificDataReceived: Clase MagneticStripeReaderVendorSpecificCardDataReceivedEventArgs
Obtener los datos
Para los eventos AamvaCardDataReceived y BankCardDataReceived, puede obtener algunos de los datos directamente del objeto args. El siguiente ejemplo muestra cómo obtener algunas propiedades y asignarlas a variables miembro:
private string _accountNumber;
private string _expirationDate;
private string _firstName;
private void Reader_BankCardDataReceived(
ClaimedMagneticStripeReader sender,
MagneticStripeReaderBankCardDataReceivedEventArgs args)
{
_accountNumber = args.AccountNumber;
_expirationDate = args.ExpirationDate;
_firstName = args.FirstName;
// etc...
}
Sin embargo, algunos datos, incluidos todos los datos del evento VendorSpecificDataReceived, deben recuperarse a través del objeto Report, que es una propiedad del parámetro args. Este es de tipo MagneticStripeReaderReport.
Puede usar la propiedad CardType para averiguar qué tipo de tarjeta se ha deslizado, y luego usar eso para informar cómo interpreta los datos de Track1, Track2, Track3, y Track4.
Los datos de cada una de las pistas se representan como objetos MagneticStripeReaderTrackData. Desde esta clase, puede obtener los siguientes tipos de datos:
- Datos: los datos en bruto o decodificados.
- DiscretionaryData: los datos confidenciales.
- EncryptedData: los datos encriptados.
El siguiente fragmento de código obtiene el informe y los datos de seguimiento y, a continuación, comprueba el tipo de tarjeta:
private void GetTrackData(MagneticStripeReaderBankCardDataReceivedEventArgs args)
{
MagneticStripeReaderReport report = args.Report;
IBuffer track1 = report.Track1.Data;
IBuffer track2 = report.Track2.Data;
IBuffer track3 = report.Track3.Data;
IBuffer track4 = report.Track4.Data;
if (report.CardType == MagneticStripeReaderCardTypes.Aamva)
{
// Card type is AAMVA
}
else if (report.CardType == MagneticStripeReaderCardTypes.Bank)
{
// Card type is bank card
}
else if (report.CardType == MagneticStripeReaderCardTypes.ExtendedBase)
{
// Card type is vendor-specific
}
else if (report.CardType == MagneticStripeReaderCardTypes.Unknown)
{
// Card type is unknown
}
}
Soporte y comentarios
Encontrar respuestas a tus preguntas
¿Tienes alguna pregunta? Pregúntenos en nuestro foro de preguntas y respuestas Docs con la etiqueta UWP o en Stack Overflow con la etiqueta pointofservice.
Ayúdenos a localizar sus preguntas:
- Agregue la etiqueta pointofservice a la pregunta en Stack Overflow.
- Incluya el término "UWP" en su mensaje en el foro de preguntas y respuestas.