次の方法で共有


磁気ストライプ データの取得と理解

このトピックでは、ユニバーサル Windows プラットフォーム (UWP) のサービス ポイント (POS) API を使用して磁気ストライプ リーダーからデータを取得して解釈する方法について説明します。

*DataReceived イベントをサブスクライブする

Point of Service の使用開始に関するページで説明されている手順を使用して、アプリケーションに磁気ストライプ リーダーを設定すると、そこからデータを取得する準備が整います。

リーダーでは、スワイプされたカードを認識するたびに、次の 3 つのイベントのいずれかを発生させます。

アプリケーションでサブスクライブする必要があるのは、磁気ストライプ リーダーでサポートされているイベントに限られます。 MagneticStripeReader.SupportedCardTypes でサポートされているカードの種類を確認できます。

次のコードでは、3 つの *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 オブジェクトが渡されます。その型はイベントによって異なります。

データを取得する

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 イベントからのすべてのデータを含む) については、args パラメーターのプロパティである Report オブジェクトを介して取得する必要があります。 これは MagneticStripeReaderReport 型です。

CardType プロパティを使用すれば、スワイプされたカードの種類を確認し、それを使用して Track1Track2Track3、および 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 タグを使用して質問してください。

質問を見つけやすくするために、次のようにしてください。

  • Stack Overflow で質問に pointofservice タグを追加します。
  • Q&A フォーラムの投稿に "UWP" という用語を含める

関連項目