6

カードリーダーがシステムに接続されるアプリケーションを作成する必要があり、接続されたカードリーダーで誰かがカードを交換した場合、磁気カードリーダーのデータを読み取る必要があります。

磁気カードは、基本的に登録のためのユーザーの詳細を保持します。そのため、ユーザーは受付時にカードを渡します。受付係がカードを交換すると、システムがカードからデータを読み取り、そのユーザーをパーティー管理アプリケーションに登録します。

いいえ、これを行う方法がわかりませんか?Phpで可能ですか?

これを行う方法のアイデアを共有してください。

4

3 に答える 3

6

カードリーダーがシステムに接続されるアプリケーションを作成する必要があり、接続されたカードリーダーで誰かがカードを交換した場合、磁気カードリーダーのデータを読み取る必要があります。

これを 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 -ffopen()

カスタム 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) クライアントがフォームを表示し、処理を開始する
  • ...
于 2012-10-08T10:25:39.223 に答える
2

UNIX システムでは、名前付きパイプを使用し、Python のようなもので磁気カードを処理します。私が使用したものは、Pythonがうまく処理するRS232を使用しています。その後、PHP にパイプできます。PHP は、このパイプで情報を送り返すこともできます。たとえば、再読み取りを要求するなどです。

于 2012-10-08T10:24:31.830 に答える
2

バーコード リーダーを使用してモジュラー システムを構築した後、VB などの言語を使用するか、C# を使用して単純な Web ブラウザーを構築します (C# には、約 5 分でこれを行うためのコンポーネントがあります)。C# はブラウザとやり取りして、サイトにデータを送信できますか?

于 2012-10-08T10:23:01.460 に答える