Referință API: arhitectură, câmpuri și coduri de stare

Elementele comune tuturor operațiunilor: fluxul cererilor, câmpurile JSON comune, tipurile de șabloane, codurile de stare, porturile și criptarea payload-ului.

Arhitectura API

ProprietateCallback APIRESTful API
InițiatorDispozitiv / Biometric GatewayServerul dumneavoastră
DirecțieDispozitiv → Serverul dumneavoastrăServerul dumneavoastră → Dispozitiv
LatențăÎn timp real (milisecunde)~15 secunde
DeclanșatorEveniment biometric pe dispozitivHTTP POST din codul dumneavoastră
Rolul dumneavoastrăPrimiți & confirmațiTrimiteți comanda & interogați/așteptați răspunsul
Corpul răspunsului{"status":"done"}{"Status":"done","OperationID":"…","StatusCode":0}
Comportament offlinePăstrat în cache de motor; livrat când serverul revine onlinePus în coadă de motor; livrat când dispozitivul se reconectează

Câmpuri comune

Toate cererile — atât Callback, cât și RESTful — au în comun aceste câmpuri de nivel superior.

AuthTokenString. Un token de 32 de caractere care identifică și autentifică cererile de la un anumit dispozitiv. Se configurează în portalul API Monitor. Validați-l la fiecare callback primit.
OperationIDString. Un identificator unic pentru această instanță a operațiunii (de ex. "j95xfejt3vr1"). Răspunsurile RESTful returnează același OperationID, astfel încât să puteți asocia cererile cu răspunsurile.
TimeString. Marcaj temporal UTC al momentului în care evenimentul a fost procesat, în formatul YYYY-MM-DD HH:mm:ss GMT +0000. Marcajele temporale locale ale dispozitivului din payload pot folosi un alt decalaj de fus orar.
stgid (parametru de interogare)String. Service Tag ID — identifică dispozitivul țintă pentru apelurile RESTful API. Transmiteți-l ca parametru de interogare URL către endpoint-ul din contul dumneavoastră API Monitor: POST https://<your-endpoint>?stgid=YOUR_TAG_ID.

Tipuri de șabloane

Datele biometrice și de identificare sunt transportate într-o matrice Template. Fiecare element are un câmp Type:

Comportamentul de îmbinare a șabloanelor — important pentru handler-ele de callback
Când datele utilizatorului sunt trimise de pe dispozitiv (operațiunile Callback #3–#9), șabloanele pot sosi pe rând sau în grupuri, prin mai multe callback-uri. Fiecare callback nu conține setul complet de șabloane al utilizatorului — transportă doar șabloanele adăugate sau modificate.

Serverul dumneavoastră trebuie să îmbine șabloanele primite cu șabloanele deja stocate pentru acel utilizator. Cheia unică a fiecărui șablon este Type + Index. De exemplu:
• Callback 1 sosește cu Fingerprint Index 0 → stocați-l
• Callback 2 sosește cu Face Index 0 + Card → îmbinați, nu suprascrieți amprenta
• Callback 3 sosește cu Fingerprint Index 0 (date noi) → actualizați amprenta existentă de la Index 0
Nu înlocuiți niciodată toate șabloanele la un callback — faceți întotdeauna upsert după Type + Index.
TipDescriereCâmpuri suplimentare cheie
CardNumăr de card RFID / de proximitateData (șir cu numărul cardului)
PasswordPIN numericData (șir cu PIN-ul)
FingerprintȘablon de amprentă — binar codificat Base64Index (indexul degetului 0–9), Size, Data
FaceȘablon facial — JPEG sau binar codificat Base64Index, Size, Data
PalmȘablon al venelor palmei — binar codificat Base64Index, Data
UserPhotoFotografia de profil a utilizatorului — JPEG codificat Base64Data

Coduri de stare ale răspunsului

Răspunsurile RESTful API includ un StatusCode numeric. Răspunsurile Callback API folosesc întotdeauna forma simplă {"status":"done"}, indiferent de rezultat.

CodStareDescriere
0SuccesOperațiunea s-a finalizat cu succes.
1Date de cerere nevalideCorpul JSON este malformat sau conține valori nevalide.
2Service Tag ID nevalidParametrul de interogare stgid nu corespunde niciunui dispozitiv înregistrat.
3Cerere nevalidăStructura cererii nu corespunde formatului așteptat al operațiunii.
4Criptare nevalidăPayload-ul criptat (AES-256) nu a putut fi decriptat. Verificați cheia de criptare.
5Dispozitiv offlineDispozitivul țintă nu este conectat în prezent la Biometric Gateway.
6Expirarea operațiuniiDispozitivul nu a confirmat comanda în intervalul de timp permis.
7Auth Token nevalidAuthToken din cerere nu corespunde token-ului configurat pentru dispozitiv.
8Utilizatorul există dejaA fost încercată o operațiune Add pentru un UserID care există deja pe dispozitiv.
9Utilizator negăsitUserID-ul specificat nu există pe dispozitiv.
10Eroare de șablonDatele șablonului biometric sunt corupte sau au un format neacceptat.
11Memoria dispozitivului este plinăDispozitivul a atins capacitatea maximă de utilizatori sau de șabloane.
13Cheie de securitate nevalidăCheia de securitate configurată în API Monitor nu corespunde.
15Funcție neacceptatăOperațiunea solicitată nu este acceptată de acest model de dispozitiv sau de acest mod de comunicare.
999Eroare necunoscutăA apărut o eroare neașteptată. Contactați suportul Cams, indicând OperationID.

Porturi acceptate

Pentru a primi informații de pontaj în timp real, serverul dumneavoastră trebuie să expună un endpoint HTTP(S) care poate fi accesat de Cams Protocol Engine.

PortProtocolUtilizare
80HTTPProducție. Asociați callback URL-ul dumneavoastră cu portul 80. Se configurează în API Monitor și este apelat automat la pontări.
443HTTPSProducție (securizat). HTTPS cu certificat SSL valid. Recomandat pentru producție.
8123HTTPDoar pentru testare. Port nestandard disponibil temporar în timpul dezvoltării.
HTTPS recomandat. Folosiți HTTPS cu un certificat SSL valid în producție. Asigurați reînnoirea automată fără repornirea serverului.

Date de exemplu

Exemple de payload-uri de cerere și răspuns pentru toate cele 38 de operațiuni sunt documentate mai sus, în secțiunea fiecărei operațiuni. Pentru o vedere consolidată:

Această paginăFiecare secțiune de operațiune de mai sus include JSON de cerere și răspuns gata de copiat, cu date de exemplu.
Pagină de exemple vechebiometric-web-api-sample-request-response.html — selector derulant pentru fiecare operațiune.

Criptare

Criptarea AES-256 opțională poate fi activată pentru toate datele schimbate între Cams Protocol Engine și serverul dumneavoastră.

AlgoritmAES-256 în modul ECB cu padding PKCS5 (AES/ECB/PKCS5PADDING).
Configurarea cheiiSetați cheia ca Security Key în API Monitor. Odată configurată, toate payload-urile JSON brute sunt criptate.
CodificarePayload-urile criptate sunt codificate Base64 pentru transport HTTP sigur.

Exemplu Java

Criptare / decriptare (Java)
// Encryption
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
SecretKeySpec keySpec = new SecretKeySpec(securityKey.getBytes("UTF-8"), "AES");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
String encrypted = Base64.getEncoder().encodeToString(cipher.doFinal(rawJson.getBytes("UTF-8")));

// Decryption
cipher.init(Cipher.DECRYPT_MODE, keySpec);
byte[] decoded = Base64.getDecoder().decode(encryptedPayload);
String decrypted = new String(cipher.doFinal(decoded), "UTF-8");
Important: Când criptarea este activată, decriptați payload-urile Callback primite și criptați corpurile cererilor RESTful trimise folosind aceeași cheie.