取得並了解磁條資料
本主題介紹如何使用通用 Windows 平台 (UWP) 服務點 (POS) API 取得和解釋來自磁條讀取器的資料。
訂閱 *DataReceived 事件
使用開始使用服務點中所述的步驟,在應用程式中設定磁條讀取器之後,您就可以開始從中取得資料。
每當讀取器辨識撥動卡片時,它就會引發三個事件之一:
- AamvaCardDataReceived 事件:在撥動機動車卡時發生。
- BankCardDataReceived 事件:在撥動銀行卡時發生。
- VendorSpecificDataReceived 事件:在撥動廠商特定卡片時發生。
您的應用程式只需要訂閱磁條讀取器所支援的事件。 您可以看到 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 類別
- AamvaCardDataReceived 事件: MagneticStripeReaderAamvaCardDataReceivedEventArgs 類別
- 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 物件表示。 從這個類別,您可以取得下列類型的資料:
- 資料:未經處理或譯碼的資料。
- 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標籤的 Docs Q&A 論壇上,或使用 pointofservice 標籤在 Stack Overflow 上詢問我們。
協助我們找出您的問題:
- 將 pointofservice 標籤新增至 Stack Overflow 的問題。
- 在 問&答論壇的貼文中包含 「UWP」 字詞