Поделиться через


Получение и понимание данных магнитной полосы

В этом разделе объясняется, как получить и интерпретировать данные из считывателя магнитной полосы, используя универсальную платформу Windows (UWP) и API точки обслуживания (POS).

Подписаться на события *DataReceived

После того как вы настроите считыватель магнитной полосы в вашем приложении, используя шаги, описанные в Начало работы с Point of Service, вы готовы начать получать данные с устройства.

Каждый раз, когда считыватель распознает карту, он вызовет одно из трех событий.

  • событие AamvaCardDataReceived: происходит при считывании карты транспортного средства.
  • событие BankCardDataReceived: происходит при прокрутке банковских карт.
  • 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 и 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. Из этого класса можно получить следующие типы данных:

Следующий фрагмент кода получает отчет и данные отслеживания, а затем проверяет тип карточки:

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
    }
}

Поддержка и обратная связь

Поиск ответов на ваши вопросы

У вас есть вопросы? Обратитесь к нам на форуме "Docs Q&A" с тегом UWP или на Stack Overflow с тегом pointofservice.

Помогите нам найти свои вопросы:

  • Добавьте тег pointofservice к вопросу в Stack Overflow.
  • Включите термин UWP в свой пост на форуме Q&A

См. также