Obter e compreender os dados de tarja magnética
Este tópico descreve como obter e interpretar os dados de um leitor de tarja magnética usando APIs de ponto de serviço (PDV) da Plataforma Universal do Windows (UWP).
Inscrever-se em eventos *DataReceived
Depois de configurar o leitor de tarja magnética no aplicativo usando as etapas descritas em Introdução ao ponto de serviço, você estará pronto para começar a obter dados dele.
Sempre que o leitor reconhecer um cartão passado, ele iniciará um dos três eventos:
- Evento AamvaCardDataReceived: ocorre quando um cartão de veículo motorizado é passado.
- Evento BankCardDataReceived: ocorre quando um cartão bancário é passado.
- Evento VendorSpecificDataReceived: ocorre quando um cartão específico do fornecedor é passado.
O aplicativo só precisa se inscrever nos eventos que são compatíveis pelo leitor de tarja magnética. É possível ver quais tipos de placas são compatíveis com MagneticStripeReader.SupportedCardTypes.
O código a seguir demonstra a assinatura dos três 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;
}
}
}
O manipulador de eventos passará o ClaimedMagneticStripeReader e um objeto args, cujo tipo irá variar dependendo do evento:
- Evento AamvaCardDataReceived: Classe MagneticStripeReaderAamvaCardDataReceivedEventArgs
- Evento BankCardDataReceived: Classe MagneticStripeReaderBankCardDataReceivedEventArgs
- Evento VendorSpecificDataReceived: Classe MagneticStripeReaderVendorSpecificCardDataReceivedEventArgs
Obter os dados
Para os eventos AamvaCardDataReceived e BankCardDataReceived, é possível obter alguns dos dados diretamente do objeto args. O seguinte exemplo demonstra como obter algumas propriedades e atribuí-las a variáveis de membro:
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...
}
No entanto, alguns dados, incluindo todos os dados do evento VendorSpecificDataReceived, devem ser recuperados por meio do objeto Report, que é uma propriedade do parâmetro args. Este é do tipo MagneticStripeReaderReport.
É possível usar a propriedade CardType para descobrir que tipo de cartão foi passado e, em seguida, usá-la para informar como você interpreta os dados de Track1, Track2, Track3 e Track4.
Os dados de cada uma das faixas são representados como objetos MagneticStripeReaderTrackData. Nessa classe, é possível obter os seguintes tipos de dados:
- Data: os dados brutos ou decodificados.
- DiscretionaryData: os dados discricionários.
- EncryptedData: os dados criptografados.
O snippet de código a seguir obtém o relatório e os dados de controle e, em seguida, verifica o tipo de cartão:
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
}
}
Suporte e comentários
Encontrar respostas para suas dúvidas
Tem dúvidas? Pergunte-nos em nosso fórum de P e R do Docs com a tag UWP ou no Stack Overflow com a tag pointofservice.
Ajude-nos a localizar suas perguntas:
- Adicione a tag pointofservice à pergunta sobre Stack Overflow.
- Incluir o termo "UWP" na sua postagem no fórum de P e R