カードリーダーがシステムに接続されるアプリケーションを作成する必要があり、接続されたカードリーダーで誰かがカードを交換した場合、磁気カードリーダーのデータを読み取る必要があります。
これを PHP で実行したいので、これはWeb アプリケーションであり、ブラウザが実行されているクライアントマシンでカードをスワイプすると仮定します。
キーボード エミュレーション スワイパー(通常は ' 123456 'などのテキストを取得します)がある場合、キーボード/フォーカスをインターセプトし、データをフォーム フィールドまたは AJAX としてアップロードする必要があります。フィールドまたはブラウザーがフォーカスを失った場合、これは注意が必要であり、ブラウザーを「キオスク モード」で実行する必要があります。
または、シリアル (RS232[C])などの他のテクノロジを使用するスワイパーを使用することもできます。これはかなり時代遅れになっていると思いますが、カスタム インターフェイス(通常は USB スワイパーと API のセットを意味します)。この場合、すべては実装されている API に依存します。一部のデバイスには、Windows プラットフォームで Internet Explorer テクノロジを使用する必要がある ActiveX アプレットが付属しています。他の一部は Java アプレットを使用しており、それらを Web ページに統合する必要があります。
最後に、それらのいくつかは、いくつかの方法でシステムとやり取りする完全なカスタム アプリケーションを持っています (「カスタム LIBRARY」の場合も同じですが、カスタム アプリケーションも自分で開発する必要があります!):
- カスタム HTTP クエリをプログラム可能なサーバーに送信する。この場合はラッキーです。「http://yourserver/gotcard?terminal=LODGE&card=$$CODE$$」のように、端末ごとにクエリをプログラムできます。カスタム アプリケーションはバックグラウンドで潜伏し、スワイプされたコードを取得してサーバーに送信します。サーバーをポーリングして、各端末がいつコードを受信したかを知る必要があります。偽コードや重複コードを処理する必要があります。このようなアプリケーションには、$$CODE$$、$$TIMESTAMP$$、場合によっては $$SWIPEDIRECTION$$ など、いくつかの「プレースホルダー」が付属しています。これらは、人事のタイムトラッキングに使用されます (出勤するときは左から右にスワイプし、帰宅するときは右から左にスワイプします)。
- プログラム可能なプレースホルダーを使用して、コードを MySQL または SQL Server にアップロードします。ここではおそらく、VPN/SSH 接続を使用してクエリを傍受できるようにする必要があり、提供されている DB ドライバーによってアーキテクチャの選択が制限される可能性があります。
- 通常のプレースホルダーを使用してカスタム アプリケーションまたはスクリプトを実行する。この場合、最善の選択肢は、私見ですが、スクリプト呼び出し
lynx
(Linux または Windows) を記述し、ケース 1 の「カスタム HTTP クエリ」に適合させることです。
残念ながら、さまざまなサプライヤは「ハック」側 (つまり、ハードウェアと最小限のソフトウェア、ライブラリとサンプル MFC アプリまたはソース コードを提供し、自分で提供する) または「すべて含まれていて交渉の余地がない」側(つまり、完全に構成されたPOSまたは従業員のタイムロガーアプリをリーダーに提供し、それ以外に何かをする簡単な方法がない).
サーバー側を実行している場合、つまり PHP スクリプト (HTML/テキスト出力ではない) とバッジ リーダーが同じマシン上にある場合は、提供されたソフトウェアによって異なります。サーバーの場合、キーボード エミュレーションが最適 (キーボードを接続する理由のないヘッドレス サーバーを使用している場合) か、トラブルを要求する (磁気リーダーと実際のキーボードが競合している場合)。RS232[C] も非常に簡単に使用できます。Linux では、ログ ファイル上のデバイスでログ ファイルをポーリングすることttytail
もできます。それにはプライバシーの問題があるかもしれません(「すべての顧客のクレジットカード番号をプレーンテキストで記録する」と考えてください)。または、PHP でデバイスを接続することもできます。問題はありません。tail -f
fopen()
カスタム API ライブラリは扱いにくい場合があります。ソケットまたは名前付きパイプ「サーバー」を作成するというトリックに頼る必要がある場合があります。これにより、デバイスが開かれ、その結果が を介して PHP で利用できるようになりますfsockopen()
。Unix ソケットとクライアント/サーバー プログラミングの知識が必要です。
アップデート
バーコードリーダー用のライブラリがあることをコメントで見ました。私はまだ、あなたが Web アプリのシナリオにいると仮定しています (たとえば、3 つの POS とリーダー、1 つのサーバー)。
これを行う方法は次のとおりです。
// PHP "server" application running as CLI on POS #1
// (will read some data from an INI file)
* application initialization
for(;;)
{
/* Hypothesis 1: blocking library */
$code = read_barcode();
/* Hypothesis 2: nonblocking, but buffering library */
if (!barcode_available())
{
sleep(1);
continue;
}
/* Hypothesis 3 is left as an exercise ;-) - remember to reinit the buffer */
if (!checks_if_valid_barcode($code))
continue;
// Unless there's some reason of using cURL, we keep it simple
// We might want to use mcrypt() function to encrypt the code, though.
$response = file_get_contents(
$CONFIG['server_url'].'?terminal='.$CONFIG['terminal']
.'&code='.$code
);
// Do something with the response - maybe just an OK or an ERROR
// (e.g. play a sound, just for kicks).
// The server, which generates the error, knows all about the error itself
// and the webapp will poll details from the server, not from this app.
}
Web アプリケーションは一定間隔でサーバーにクエリを実行します。2 つの並列ワークフローがあります。
- (1) スワイプの AJAX チェック
- (2) CLI はスワイプをリッスンします
- (1) サーバーは「まだありません」と応答します
- (2) CLI アプリがスワイプを送信
- (1) スワイプの AJAX チェック
- (1) サーバーは「まだありません」と応答します
- (2) サーバーはスワイプを検証します
- (1) スワイプの AJAX チェック
- (1) サーバーが「I got it」と応答する
- (2)リスニングに戻る
- (1) クライアントがフォームを表示し、処理を開始する
- ...