Ottenere e comprendere i dati di banda magnetica
Questo argomento descrive come ottenere e interpretare i dati da un lettore di striping magnetico usando le API POS (Point of Service) di piattaforma UWP (Universal Windows Platform) (UWP).
Sottoscrivere *Eventi DataReceived
Dopo aver configurato il lettore di strisce magnetiche nell'applicazione usando i passaggi descritti in Introduzione con un point of service, si è pronti per iniziare a ottenere dati da esso.
Ogni volta che il lettore riconosce una scheda con scorrimento rapido, genera uno dei tre eventi seguenti:
- AamvaCardDataReceived Event: si verifica quando viene eseguito lo scorrimento rapido di una scheda del veicolo a motore.
- BankCardDataReceived Event: si verifica quando viene eseguito lo scorrimento rapido di una carta di credito.
- VendorSpecificDataReceived Event: si verifica quando viene eseguito lo scorrimento rapido di una scheda specifica del fornitore.
L'applicazione deve solo sottoscrivere gli eventi supportati dal lettore di strisce magnetiche. È possibile vedere quali tipi di schede sono supportati con MagneticStripeReader.SupportedCardTypes.
Il codice seguente illustra la sottoscrizione dei tre eventi *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;
}
}
}
Il gestore eventi verrà inoltrato all'oggetto ClaimedMagneticStripeReader e args , il cui tipo varia a seconda dell'evento:
- AamvaCardDataReceived event: MagneticStripeReaderAamvaCardDataReceivedEventArgs Class
- BankCardDataReceived event: MagneticStripeReaderBankCardDataReceivedEventArgs Class
- VendorSpecificDataReceived event: MagneticStripeReaderVendorSpecificCardDataReceivedEventArgs Class
Ottenere i dati
Per gli eventi AamvaCardDataReceived e BankCardDataReceived è possibile ottenere alcuni dati direttamente dall'oggetto args. L'esempio seguente illustra come ottenere alcune proprietà e assegnarle alle variabili 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...
}
Tuttavia, alcuni dati, inclusi tutti i dati dell'evento VendorSpecificDataReceived devono essere recuperati tramite l'oggetto Report che è una proprietà del parametro args. Questo è di tipo MagneticStripeReaderReport.
È possibile utilizzare la proprietà CardType per capire che tipo di carta è stata strisciata, e poi utilizzare questo dato per interpretare i dati provenienti da Track1, Track2, Track3 e Track4.
I dati di ciascuna delle tracce sono rappresentati come oggetti MagneticStripeReaderTrackData . Da questa classe è possibile ottenere i tipi di dati seguenti:
- Dati: dati non elaborati o decodificati.
- DiscretionaryData: dati discrezionali.
- EncryptedData: dati crittografati.
Il frammento di codice seguente ottiene il report e i dati di traccia e quindi controlla il tipo di scheda:
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
}
}
Supporto, commenti e suggerimenti
Trova le risposte alle tue domande
Altre domande? Chiedi di noi sia sul forum Docs Q& utilizzando il tag UWP or on Stack Overflow con il tag pointofservice.
Aiutaci a individuare le tue domande:
- Aggiungere il tag pointofservice alla domanda in Stack Overflow.
- Includi il termine "UWP" nel tuo post sul forum Q&