共用方式為


取得並了解磁條資料

本主題介紹如何使用通用 Windows 平台 (UWP) 服務點 (POS) API 取得和解釋來自磁條讀取器的資料。

訂閱 *DataReceived 事件

使用開始使用服務點中所述的步驟,在應用程式中設定磁條讀取器之後,您就可以開始從中取得資料。

每當讀取器辨識撥動卡片時,它就會引發三個事件之一:

您的應用程式只需要訂閱磁條讀取器所支援的事件。 您可以看到 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;
        }
    }
}

事件處理常式會傳遞 ClaimedMagneticStripeReaderargs 物件,其類型會根據事件而有所不同:

取得資料

針對 AamvaCardDataReceivedBankCardDataReceived 事件,您可以直接從 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 屬性來找出已撥動的卡片類型,然後使用該屬性來告知您如何解譯 Track1Track2Track3Track4 中的資料。

來自每個曲目的資料會 以MagneticStripeReaderTrackData 物件表示。 從這個類別,您可以取得下列類型的資料:

下列代碼段會取得報表和追蹤資料,然後檢查卡片類型:

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 上詢問我們。

協助我們找出您的問題:

另請參閱