Abrufen und Verstehen von Magnetstreifendaten
Dieses Thema beschreibt, wie Sie die Daten aus einem Magnetstreifenleser mithilfe von Universelle Windows-Plattform (UWP) Point of Service (POS)-APIs abrufen und interpretieren.
Abonnieren von *DataReceived-Ereignissen
Nachdem Sie Ihren Magnetstreifenleser in Ihrer Anwendung mit den Schritten in Erste Schritte mit Point of Service eingerichtet haben, können Sie mit dem Abrufen von Daten beginnen.
Wenn der Leser eine Wischbewegung der Karte erkennt, löst er eines von drei Ereignissen aus:
- AamvaCardDataReceived-Ereignis: Tritt auf, wenn eine Kraftfahrzeugkarte durchgezogen wird.
- BankCardDataReceived-Ereignis: Tritt ein, wenn eine Bankkarte durchgezogen wird.
- VendorSpecificDataReceived-Ereignis: Tritt auf, wenn eine anbieterspezifische Karte durchgezogen wird.
Ihre Anwendung muss nur die Ereignisse abonnieren, die vom Magnetstreifenleser unterstützt werden. Sie können sehen, welche Arten von Karte mit MagneticStripeReader.SupportedCardTypes unterstützt werden.
Der folgende Code veranschaulicht das Abonnieren der drei *DataReceived-Ereignisse:
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;
}
}
}
Der Ereignishandler wird an den ClaimedMagneticStripeReader und ein Args-Objekt übergeben, dessen Typ je nach Ereignis variiert:
- AamvaCardDataReceived-Ereignis: MagneticStripeReaderAamvaCardDataReceivedEventArgs Class
- BankCardDataReceived-Ereignis: MagneticStripeReaderBankCardDataReceivedEventArgs Class
- VendorSpecificDataReceived-Ereignis: MagneticStripeReaderVendorSpecificCardDataReceivedEventArgs Class
Abrufen von Daten
Für die Ereignisse AamvaCardDataReceived und BankCardDataReceived können Sie einige der Daten direkt aus dem Args-Objekt abrufen. Das folgende Beispiel veranschaulicht das Abrufen einiger Eigenschaften und das Zuweisen dieser Eigenschaften zu Mitglieder-Variablen:
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...
}
Einige Daten, einschließlich aller Daten aus dem VendorSpecificDataReceived-Ereignis, müssen jedoch über das Report-Objekt abgerufen werden, das eine Eigenschaft des Args-Parameters ist. Dies ist vom Typ MagneticStripeReaderReport.
Mithilfe der CardType-Eigenschaft können Sie herausfinden, welche Art von Karte durchgezogen wurde. Diese Information verwenden Sie dann, um zu erfahren, wie Sie die Daten aus Track1, Track2, Track3 und Track4 interpretieren können.
Die Daten aus den einzelnen Spuren werden als MagneticStripeReaderTrackData-Objekte dargestellt. Von dieser Klasse aus können Sie die folgenden Datentypen abrufen:
- Daten: Die rohen oder decodierten Daten.
- DiscretionaryData: Die diskretionären Daten.
- EncryptedData: Die verschlüsselten Daten.
Der folgende Codeschnipsel ruft den Bericht und die Daten zum Nachverfolgen ab und überprüft dann den Kartentyp:
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
}
}
Support und Feedback
Antworten auf Ihre Fragen
Haben Sie Fragen? Fragen Sie uns entweder in unserem Docs F&A-Forum mit dem UWP-Tag oder auf Stack Overflow mit dem Pointofservice-Tag.
Helfen Sie uns bei der Einordnung Ihrer Fragen:
- Fügen Sie der Frage auf Stack Overflow das Pointofservice-Tag hinzu.
- Nehmen Sie in Ihren Beitrag im F&A-Forum den Begriff „UWP“ auf.