ID TECH
すべての技術記事

技術記事

EMV向け開発、第3回

過去の 本シリーズ第1回では、ICカード取引と磁気ストライプ取引の違いについて解説しました。リーダーとカードの間で、かなりの量の双方向通信が行われることをご紹介しました。しかし(朗報です!)、その通信の多くは自動的に処理される、つまり決済アプリ開発者の制御外で、リーダーの EMVカーネルによって処理されることもお伝えしました。

過去の 第2回では、EMV取引中に返される可能性のあるさまざまなタグ(つまりTLVデータ)と、その一部の意味について少し解説しました。また、EMV取引はフェーズ(Start、Authenticate、Completeといった名称)に分かれて行われることにも触れました。そして、 異なる TLVが、異なるフェーズで返されることをご紹介しました。

また、これまで(実際、何度も)申し上げてきたように、生のファームウェアコマンドを(USBやRS-232経由で)カードリーダーに直接送信することでEMV取引を実行することも確かに可能ですが、一般的にはID TECHのUniversal SDKを使用してリーダーとやり取りする方が容易です。(ダウンロードは こちら こちらをご覧ください。プラットフォーム(Windows、Linux、MacOS、iOS、Android)を指定する必要があります。)

SDKを使うとなぜ簡単になるのでしょうか?まず、リーダーとのシリアル通信(USB、RS-232、またはBluetooth)のセットアップを代行してくれます。また、

デバイスレベルのファームウェアコマンドや関連する低レベルプロトコルについて知る必要から開発者を解放してくれます。さらに、エラーコードの解釈やデータ解析に役立つ既製のコードライブラリも利用できます。

Universal SDKのもう一つの優れた点は、 サンプルコード が付属しており、これらの作業を容易にする各種ライブラリの使い方を示してくれることです。(続きをお読みください。)

SDKをどのように使い始めるか?主な手順を見ていきましょう。

ステップ1:SDKをインストールする

開発対象のオペレーティングシステムが決まっている場合は、 開発 — ホーム (ナレッジベース内) にアクセスし、該当するダウンロードに進んでください。Windows、Linux、MacOS、iOS、Android用にそれぞれ別のビルドが用意されています。

アーカイブを展開し、お好みのIDEでサンプルプロジェクト(Source Codeフォルダ内)を読み込んでみてください。ID TECHリーダーを接続した状態で、サンプルアプリをコンパイル・実行します。アプリがリーダーと通信できることを確認してください。

ステップ2:リーダーを設定する

箱から出してすぐにEMV取引を実行できるとは思わないでください! リーダーの設定に時間をかけていない場合、最初の取引は失敗します。 最低限、リーダーに以下を読み込ませる必要があります:

  • ターミナル設定
  • AID
  • CAPK(認証局公開鍵)

ID TECHはこれらのサンプル値を(テスト目的でのみ)提供していますが、 それでもサンプル値を読み込むコマンドを実行する必要があります。コマンドを実行するまで、値は読み込まれません!(幸い、リーダーにこれらの項目が一度読み込まれれば、起動のたびに再読み込みする必要はありません。値は保持されます。設定は一度きりの作業です。)この手順については、SDKのサンプルコードをご覧ください。

EMV設定はかなり大きなテーマです。本投稿でその全貌を網羅することは試みません。このテーマの入門としては、当社の ターミナル設定に関する以前の投稿を必ずご覧いただき、また当社の EMVホワイトペーパー (PDF:無料ダウンロード)の設定セクションもお読みください。

ステップ3:取引を実行する

サンプルアプリには、これを行うためのコードが含まれています。アプリをステップ実行して、その動作を確認してください。それ以外の方法では、少なくともカスタムコールバック(適切なタイミングでSDKによって自動的に呼び出される関数)を設定し、その上で emv_startTransaction() ご自身で行ってください。

カードリーダーとの通信は非同期で行われます。つまり、次のようなメソッドを呼び出した場合、 emv_startTransaction()SDKがリーダーと通信し、一連のイベントを開始しますが、その間プログラムはブロックされません。代わりに、制御はすぐにアプリへ戻され(成功/エラーコードと共に)、SDKのコードがリーダーの状態更新を監視します。たとえば、リーダーがEMVトランザクションのStartフェーズを完了すると、TLVデータをホストコンピューターへ(通常はUSB経由で)送信します。SDKはそのデータを受け取り、お客様のカスタムコールバックを呼び出して、データをそのコールバックへ渡します。

つまり、リーダーからの応答を受け取りたい場合は、カスタムコールバックを設定する必要があります!

コールバックはどのような形になるのか?

Universal SDKのWindows版では、カスタムコールバックのC#シグネチャは次のようになります。

コールバックが実際に 使用されるようにするには、次のように実行時にSDKへ登録する必要があります。

この例ではカードリーダーとしてVP3300を使用していることを前提としていますが、もちろんSDKはお使いのID TECH決済リーダーであれば何でもサポートします。これはまさに ユニバーサル SDKだからです。

トランザクションのコードはどのような形になるのか?

トランザクションを開始する際には、次のようなコードを実行する必要があります。

次の呼び出しにより、 emv_startTransaction() リーダーへ(USBまたはシリアル経由で)リクエストが送信されます。リーダーはATRを実行(つまりカード上のチップと通信)し、EMVカーネルを起動させます。

Start Transactionが成功し(タイムアウトやエラーが発生せず)、前述のとおりコールバックを登録していれば、1〜2秒後にそのコールバックが実行されます。コールバックのコードには、さまざまな種類の結果を処理するための多数のケースを含む、かなり大規模な「switch」文を記述することになります。もちろん期待する結果は、TLVデータを伴うEMVトランザクションの成功です。したがって、Startフェーズの終了時に(コールバック内で)実行される、おおむね次のようなコードを書くことになるでしょう。

このコードでは、Authenticate Transactionフェーズが自動的に実行されるように設定済みであることを前提としており、そのためStartからCompleteへ直接進めます。(もちろん、必ずこの方法で行う必要はありません。要件次第です。)実際の決済アプリでは、この「case」の途中で処理を一時停止し、ゲートウェイやアクワイアラーへオンライン接続することになります。その後、タグ8A(および場合によっては他のタグ)を以下に渡します。 emv_completeTransaction().

トランザクションの各フェーズ後に返されるトランザクションデータ(TLV)を解析する方法を確認するには、サンプルコード内で「displayCardData(IDTTransactionData cardData)」を検索してください。データを解析する複数の例を確認できます。

ご質問はありますか?

SDKを使い始める際に、ご質問が生じるかもしれません。SDKには(HTMLおよびPDF形式で)豊富なドキュメントが付属していますが、さらにお答えが必要なご質問があれば、私たちにお任せください!専門スタッフまでお問い合わせください。

フリーダイヤル番号
1-800-984-1010