イントロ
独自のカスタマイズやその他の目的でRESTfulAPIとしてBioStar2 New Local APIを使用する場合は、この記事を参照してください。この記事では、C#コンソールアプリケーションによるBioStar 2 New Local APIの基本的な使用法について説明します。
機能
この記事では、API関数を呼び出してBioStar 2サーバーのユーザーに指紋を登録する方法を確認します。ユーザーの情報を更新する[PUT] /api/users/{id}機能を使用します。
ほとんどの画像にする入力は、画像をBase64形式に変換する必要があります。template0とtemplate1の入力にBase64:を含めないようにご注意ください。
「fingerprint_templates」値が空の場合、現在のユーザーの指紋テンプレートの登録が解除されます。
*指紋スキャンデバイスを使用して指紋をスキャンすることをお勧めします。指紋テンプレートデータ(画像ではない)をBase64形式に自動的に変換します。
"template0": "/9j/4AAQSkZJRgABAQEASABI…” | 正常 |
"template0": "Base64: /9j/4AAQSkZJRgABAQEASABI…” | NG |
“fingerprint_templates”: [] | 指紋データを削除 |
API呼び出し用に作成されたC#プログラムのサンプルコードをご覧ください。ソースコードをコピーして貼り付けて同じ機能を使用できます。
また、RESTfulAPI呼び出しに使用するプログラムであるPostmanを介してAPI関数を呼び出す方法も確認します。
Part 1. API呼び出しとパラメーター
[PUT]: /users/{id}
[パラメーター]
グループ | 名称 | タイプ | *M/O | 説明 | バリュー |
User | Fingerprint_templates | Array | O | 指紋関連のデータが含まれています。 | Template0, template1, finger_mask, isnew |
Fingerprint_templates | template0 | string | O | 1番目テンプレート | Base64 |
Fingerprint_templates | template1 | string | O | 2番目テンプレート | Base64 |
Fingerprint_templates | finger_mask | string | O | ホールドアップ指紋かどうかを確認します | True & False |
Fingerprint_templates | isNew | string | O | 新規か既存かを確認します | True & False |
* M – 必須, O – オプション
Part 2. リクエストボディとレスポンスモデル
[値/パラメータモデルの例 ]
{ "User": { "fingerprint_templates": [ { "template0": "RR4QFK8AVUYpAzGahhLFEKO…”, "template1": "RCwQFLIAVUZCCeWHNBH0jlw…” "finger_mask": false, "isNew": true } ] } } |
[レスポンスモデル]
{ "DeviceResponse": { "rows": [ { "id": "541530887", "code": "65230" } ], "result": "false" }, "Response": { "code": "0", "link": "https://support.supremainc.com/en/support/home", "message": "Success" } } |
[レスポンス: 失敗]
{ "Response": { "code": "65675", "link": "https://support.supremainc.com/en/support/home", "message": "not defined" } } |
[レスポンス: 成功]
{ "Response": { "code": "0", "link": "https://support.supremainc.com/en/support/home", "message": "Success" } } |
Part 3. コンソール指紋登録の例
指紋をユーザーに登録するには、2つの手順があります。このコンソールは、指紋登録を受け取るユーザーを選択するための追加の手順があります。
- RegisterFingerPrint: 指紋登録のユーザーを選択します。
- ScanFingerprint: 選択したデバイスを介して指紋をスキャンします(biostar 2上では2回実行されます)
- RegisterFingerPrintToUser: スキャンした指紋を選択したユーザーに登録します。
[RegisterFingerPrint]
static async void RegisterFingerPrint() { Console.WriteLine("*****RegisterFingerPrint Task Started******"); if (sessionID == null) { Console.WriteLine("You must log in first!"); return; }
CookieContainer cookieContainer = new CookieContainer();
HttpClientHandler handler = new HttpClientHandler(); handler.CookieContainer = cookieContainer;
HttpClient client = new HttpClient(handler);
client.DefaultRequestHeaders.Add("bs-session-id", sessionID); cookieContainer.Add(new Uri("https://127.0.0.1"), new Cookie("bs-session-id", sessionID)); ListUsers(); Console.WriteLine("Select User ID for Fingerprint Registration..."); string userID = Console.ReadLine(); //HttpResponseMessage httpResponse = await client.GetAsync("https://127.0.0.1/api/users"); HttpResponseMessage httpResponse = client.GetAsync("https://127.0.0.1/api/users").Result;
if (httpResponse.IsSuccessStatusCode == true) { string httpResponseBody = await httpResponse.Content.ReadAsStringAsync(); //Console.WriteLine(httpResponseBody); Console.WriteLine("Registering FINGERPRINTS to the USER(" + userID + ")"); ScanFingerprint(userID);
} else { Console.WriteLine("Retrieving User List Failed"); Console.WriteLine(httpResponse.ToString()); } } |
[ScanFingerprint]
- このステップはBioStar2で2回実行されます。2つの異なるテンプレートを作成するには、このメソッドを2回実行する必要があります。 このコンソールアプリケーションのメソッドでは、1回だけ実行されます。同じテンプレート値がtemplate0とtemplate1に入ります。
static async void ScanFingerprint(string UserID) { Console.WriteLine("*****ScanFingerprint Task Started*****"); CookieContainer cookieContainer = new CookieContainer();
HttpClientHandler handler = new HttpClientHandler(); handler.CookieContainer = cookieContainer;
HttpClient httpClient = new HttpClient(handler);
HttpClient client = new HttpClient(handler); httpClient.DefaultRequestHeaders.Add("bs-session-id", sessionID); cookieContainer.Add(new Uri("https://127.0.0.1"), new Cookie("bs-session-id", sessionID)); string deviceID = "538747164"; string resourceAddress = "https://127.0.0.1/api/devices/" + 538747164 + "/scan_fingerprint";
JavaScriptSerializer serializer = new JavaScriptSerializer();
string payload = "{ \"ScanFingerprintOption\": { \"enroll_quality\": \"80\", \"raw_image\": false}, \"noblockui\": true}"; Console.WriteLine(payload); StringContent sc = new StringContent(payload, Encoding.UTF8, "application/json"); //HttpResponseMessage httpResponse = await httpClient.PostAsync(resourceAddress, sc); HttpResponseMessage httpResponse = httpClient.PostAsync(resourceAddress, sc).Result;
Console.WriteLine("SCAN YOUR FINGERPRINT with the DEVICE(ID: " + deviceID + ")");
if (httpResponse.IsSuccessStatusCode == true) { Console.WriteLine("Scan Fingerprint Successful."); string httpResponseBody = await httpResponse.Content.ReadAsStringAsync(); Console.WriteLine(httpResponseBody); dynamic obj = JsonConvert.DeserializeObject(httpResponseBody); string template0 = obj.FingerprintTemplate.template0; string template_image0 = obj.FingerprintTemplate.template_image0; //Console.WriteLine("Scanned Fingerprint's template0: " + template0); RegisterFingerPrintToUser(UserID, template0); } else { Console.WriteLine("Scan Fingerprint Failed."); Console.WriteLine(httpResponse.ToString()); } } |
[RegisterFingerPrintToUser]
- このメソッドは、「ScanFingerprint」メソッドからテンプレート値を受け取り、それを「template0」と「template1」の両方の値に入力します。
static async void RegisterFingerPrintToUser(string UserID, string template0) { Console.WriteLine("*****RegisterFingerPrintToUser Task Started******"); if (sessionID == null) { Console.WriteLine("You must log in first!"); return; } CookieContainer cookieContainer = new CookieContainer();
HttpClientHandler handler = new HttpClientHandler(); handler.CookieContainer = cookieContainer;
HttpClient httpClient = new HttpClient(handler);
HttpClient client = new HttpClient(handler); httpClient.DefaultRequestHeaders.Add("bs-session-id", sessionID); cookieContainer.Add(new Uri("https://127.0.0.1"), new Cookie("bs-session-id", sessionID)); Console.WriteLine("Registering Fingerprint to USER(" + UserID + ") ...");
string resourceAddress = "https://127.0.0.1/api/users/" + UserID + ""; string payload = "{ \"User\": { \"fingerprint_templates\": [ { \"template0\": \"" + template0 + "\", \"template1\": \"" + template0 + "\", \"finger_mask\": false,\"isNew\": true} ] }}"; //*You actually have to scan Fingerprint twice to have template0 & template1 but I skipped this procedure. I only receive template0 and use it twice in above payload(requestbody(JSON)) StringContent sc = new StringContent(payload, Encoding.UTF8, "application/json"); //HttpResponseMessage httpResponse = await httpClient.PutAsync(resourceAddress, sc); HttpResponseMessage httpResponse = httpClient.PutAsync(resourceAddress, sc).Result;
if (httpResponse.IsSuccessStatusCode == true) { Console.WriteLine(httpResponse.ToString()); string httpResponseBody = await httpResponse.Content.ReadAsStringAsync(); Console.WriteLine("***** FINGERPRINT is now registered to " + " User " + UserID + " *****"); } else { Console.WriteLine("Failed to Register FINGERPRINT to User(" + UserID + ")"); Console.WriteLine(httpResponse.ToString()); }
} |
[ユーザー選択]
Input: User ID
[指紋をスキャン]
[登録成功]
Part 4. Postmanで指紋登録
[1. 選択したデバイスから(device_IDにて)指紋をスキャンします。]
[2. 指紋スキャン結果]
- 結果から「template0」値を取得します。
[3. 指紋再スキャン]
- 結果から「template0」値を取得します。
[指紋をユーザーに登録]
- 2番の結果を「template0」に、3番の再スキャン結果を「template1」ににゅうします。
[成功]