磁気ストライプ データの取得と理解
このトピックでは、ユニバーサル Windows プラットフォーム (UWP) のサービス ポイント (POS) API を使用して磁気ストライプ リーダーからデータを取得して解釈する方法について説明します。
*DataReceived イベントをサブスクライブする
Point of Service の使用開始に関するページで説明されている手順を使用して、アプリケーションに磁気ストライプ リーダーを設定すると、そこからデータを取得する準備が整います。
リーダーでは、スワイプされたカードを認識するたびに、次の 3 つのイベントのいずれかを発生させます。
- AamvaCardDataReceived イベント: 自動車カードがスワイプされた場合に発生します。
- BankCardDataReceived イベント: 銀行カードをスワイプすると発生します。
- VendorSpecificDataReceived イベント: ベンダー固有のカードがスワイプされた場合に発生します。
アプリケーションでサブスクライブする必要があるのは、磁気ストライプ リーダーでサポートされているイベントに限られます。 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;
}
}
}
イベント ハンドラーには 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 イベントからのすべてのデータを含む) については、args パラメーターのプロパティである Report オブジェクトを介して取得する必要があります。 これは 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
}
}
サポートとフィードバック
質問に対する回答を見つける
ご質問があるでしょうか。 Docs Q&A フォーラムで UWP タグを使用するか、Stack Overflow で pointofservice タグを使用して質問してください。
質問を見つけやすくするために、次のようにしてください。
- Stack Overflow で質問に pointofservice タグを追加します。
- Q&A フォーラムの投稿に "UWP" という用語を含める