获取并了解磁条数据
本主题介绍如何使用通用 Windows 平台 (UWP) 服务点 (POS) API 从磁条阅读器获取数据并进行解释。
订阅 *DataReceived 事件
使用服务点入门中概述的步骤在应用程序中设置磁条阅读器后,你就可以开始从中获取数据了。
每当读卡器识别出刷卡时,它将引发以下三个事件之一:
- AamvaCardDataReceived 事件:在刷机动车卡时发生。
- BankCardDataReceived Event:刷银行卡时发生。
- VendorSpecificDataReceived Event:刷供应商特定的卡时发生。
你的应用程序只需要订阅磁条阅读器支持的事件。 你可以查看 MagneticStripeReader.SupportedCardTypes 支持哪些类型的卡片。
以下代码演示了订阅三个 *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;
}
}
}
事件处理程序将传递 ClaimedMagneticStripeReader 和一个 args 对象,其类型将根据事件而有所不同:
- AamvaCardDataReceived 事件:MagneticStripeReaderAamvaCardDataReceivedEventArgs 类
- BankCardDataReceived 事件:MagneticStripeReaderBankCardDataReceivedEventArgs 类
- VendorSpecificDataReceived 事件:MagneticStripeReaderVendorSpecificCardDataReceivedEventArgs 类
获取数据
对于 AamvaCardDataReceived 和 BankCardDataReceived 事件,你可以直接从 args 对象中获取一些数据。 以下示例演示了获取一些属性并将它们分配给成员变量:
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...
}
但是,某些数据,包括来自 VendorSpecificDataReceived 事件的所有数据,必须通过 Report 对象检索,该对象是 args 参数的一个属性。 这是 MagneticStripeReaderReport 类型。
你可以使用 CardType 属性来确定已刷卡的类型,然后使用它来告知你如何解释来自 Track1、Track2, Track3 和 Track4 的数据。
每个轨迹的数据都表示为 MagneticStripeReaderTrackData 对象。 从这个类中,你可以获得以下类型的数据:
- Data:原始数据或解码数据。
- DiscretionaryData:任意数据。
- EncryptedData:加密数据。
以下代码片段获取报告和跟踪数据,然后检查卡类型:
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
}
}
支持和反馈
查找问题的答案
有问题? 请在文档问答论坛上使用 UWP 标记或在 Stack Overflow 上使用 pointofservice 标记向我们提问。
帮助我们找到你的问题:
- 在 Stack Overflow 上,将 pointofservice 标记添加到你的问题中。
- 在问答论坛上,将“UWP”一词添加到你的帖子中