a
This commit is contained in:
parent
c9791fffa0
commit
e15a20d574
|
|
@ -130,6 +130,74 @@ class Assure extends Modelecontestation {
|
|||
return $ligne;
|
||||
}
|
||||
|
||||
public function init_confirmerlaface($del)
|
||||
{
|
||||
$codePrestataire = $_SESSION['codePrestataire'];
|
||||
$user = $_SESSION['login'];
|
||||
$username = $_SESSION['numeroBeneficiaire'];
|
||||
|
||||
$sql = 'call sp_init_confirmerlaface(?, ?, ?, ?);';
|
||||
$resultat = $this->executerRequete($sql, array($codePrestataire, $user, $username, $del));
|
||||
$ligne = $resultat->fetch(PDO::FETCH_ASSOC);
|
||||
$_SESSION['idLogapiface'] = $ligne['idLogapiface'];
|
||||
}
|
||||
|
||||
public function init_reconnaitrelaface()
|
||||
{
|
||||
$codePrestataire = $_SESSION['codePrestataire'];
|
||||
$user = $_SESSION['login'];
|
||||
|
||||
$sql = 'call sp_init_reconnaitrelaface(?, ?);';
|
||||
$resultat = $this->executerRequete($sql, array($codePrestataire, $user));
|
||||
$ligne = $resultat->fetch(PDO::FETCH_ASSOC);
|
||||
$_SESSION['idLogapiface'] = $ligne['idLogapiface'];
|
||||
}
|
||||
|
||||
public function succes_reconnaitrelaface($username, $resultat)
|
||||
{
|
||||
$idLogapiface = $_SESSION['idLogapiface'];
|
||||
|
||||
$sql = 'call sp_succes_reconnaitrelaface(?, ?, ?);';
|
||||
$this->executerRequete($sql, array($idLogapiface, $username, $resultat));
|
||||
}
|
||||
|
||||
public function echec_reconnaitrelaface($resultat)
|
||||
{
|
||||
$idLogapiface = $_SESSION['idLogapiface'];
|
||||
|
||||
$sql = 'call sp_echec_reconnaitrelaface(?, ?);';
|
||||
$this->executerRequete($sql, array($idLogapiface, $resultat));
|
||||
}
|
||||
|
||||
public function init_traiterlaface($codeActionFace)
|
||||
{
|
||||
$codePrestataire = $_SESSION['codePrestataire'];
|
||||
$user = $_SESSION['login'];
|
||||
$username = $_SESSION['numeroBeneficiaire'];
|
||||
|
||||
$sql = 'call sp_init_traiterlaface(?, ?, ?, ?);';
|
||||
$resultat = $this->executerRequete($sql, array($codePrestataire, $user, $username, $codeActionFace));
|
||||
$ligne = $resultat->fetch(PDO::FETCH_ASSOC);
|
||||
$_SESSION['idLogapiface'] = $ligne['idLogapiface'];
|
||||
}
|
||||
|
||||
public function resultat_traitement_face($username, $success, $message)
|
||||
{
|
||||
$idLogapiface = $_SESSION['idLogapiface'];
|
||||
|
||||
$sql = 'CALL sp_resultat_traitement_face(?, ?, ?, ?);';
|
||||
|
||||
$this->executerRequete($sql, array($idLogapiface, $username, $success, $message));
|
||||
}
|
||||
|
||||
public function maj_demandereconnaissancefaciale($codeEtat)
|
||||
{
|
||||
$idDemande = $_SESSION['idDemande'];
|
||||
|
||||
$sql = 'call sp_p_maj_demandereconnaissancefaciale(?, ?, ?);';
|
||||
$this->executerRequete($sql, array($codeEtat, $_SERVER['REMOTE_ADDR'], $idDemande));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
@ -47,6 +47,8 @@
|
|||
|
||||
$codeBdd = $codeSociete;
|
||||
|
||||
$_SESSION['idLogapiface'] = 0;
|
||||
|
||||
require_once "Assure.php";
|
||||
|
||||
$assure = new Assure();
|
||||
|
|
@ -106,38 +108,15 @@
|
|||
|
||||
$_SESSION['lienPhoto'] = $lienPhoto;
|
||||
|
||||
// var_dump($demande);
|
||||
/*
|
||||
idDemande
|
||||
codePrestataire
|
||||
idBeneficiaire
|
||||
codeEtat
|
||||
nbTentative
|
||||
lienPhotoWebcam
|
||||
dateExpiration
|
||||
dateExpirationFr
|
||||
dateExpirationEng
|
||||
demandeExpiree
|
||||
beneficiaire
|
||||
prestataire
|
||||
*/
|
||||
$_SESSION['numeroBeneficiaire'] = $demande["numeroBeneficiaire"];
|
||||
$_SESSION['login'] = $demande["numeroBeneficiaire"];
|
||||
|
||||
/*
|
||||
var_dump(
|
||||
array(
|
||||
// "bdd" => $bdd,
|
||||
"idDemande" => $idDemande,
|
||||
"codeEtat" => $codeEtat,
|
||||
"demandeExpiree" => $demandeExpiree,
|
||||
"etatDemande" => $etatDemande,
|
||||
"etatDemandeEng" => $etatDemandeEng,
|
||||
|
||||
"beneficiaire" => $beneficiaire,
|
||||
"prestataire" => $prestataire,
|
||||
"session_numeroBeneficiaire" => $_SESSION['numeroBeneficiaire'],
|
||||
"session_numeroBeneficiaire" => $_SESSION['login'],
|
||||
)
|
||||
|
||||
);
|
||||
*/
|
||||
|
||||
/*
|
||||
codeEtat libelle
|
||||
|
|
@ -149,6 +128,9 @@
|
|||
*/
|
||||
|
||||
if($codeEtat=="3" || $demandeExpiree=="1") {
|
||||
// changer le status
|
||||
$assure->maj_demandereconnaissancefaciale("3"); // Expirée
|
||||
|
||||
$message = $codeLangue == 'en_US' ? "Request expired since $dateExpirationEng !" : "Demande expirée depuis $dateExpirationFr !";
|
||||
afficherMessage("<strong>$message</strong>");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,19 +61,7 @@ class FacialVerificationAPI {
|
|||
* Utilisez Azure Face API, AWS Rekognition, ou une solution locale
|
||||
*/
|
||||
private function compareFaces($referenceImagePath, $capturedImageBase64) {
|
||||
/*
|
||||
var_dump(
|
||||
array(
|
||||
"referenceImagePath" => $referenceImagePath,
|
||||
"capturedImageBase64" => $capturedImageBase64,
|
||||
// "photoAssureCrypte" => $_SESSION['photoAssureCrypte'],
|
||||
// "lienPhoto" => $_SESSION['lienPhoto'],
|
||||
)
|
||||
);
|
||||
exit;
|
||||
*/
|
||||
|
||||
// Option 2: AWS Rekognition
|
||||
//AWS Rekognition
|
||||
return $this->compareWithAWSRekognition($referenceImagePath, $capturedImageBase64);
|
||||
}
|
||||
|
||||
|
|
@ -94,29 +82,10 @@ class FacialVerificationAPI {
|
|||
]);
|
||||
|
||||
|
||||
// $referenceImageData = file_get_contents($referenceImagePath);
|
||||
$referenceImageData = $referenceImagePath;
|
||||
// $capturedImageData = base64_decode(explode(',', $capturedImageBase64)[1]);
|
||||
// $capturedImageData = base64_decode($capturedImageBase64);
|
||||
$capturedImageData = $capturedImageBase64;
|
||||
$capturedImageData = $capturedImageBase64;
|
||||
|
||||
/*
|
||||
var_dump(
|
||||
array(
|
||||
"referenceImageData" => $referenceImageData,
|
||||
"capturedImageData" => $capturedImageData,
|
||||
)
|
||||
);
|
||||
exit;
|
||||
*/
|
||||
|
||||
/*
|
||||
$result = $rekognitionClient->compareFaces([
|
||||
'SourceImage' => ['Bytes' => $capturedImageData],
|
||||
'TargetImage' => ['Bytes' => $referenceImageData],
|
||||
'SimilarityThreshold' => 80
|
||||
]);
|
||||
*/
|
||||
$this->assure_api->init_traiterlaface('2');
|
||||
|
||||
$result = $rekognitionClient->compareFaces([
|
||||
'SourceImage' => ['Bytes' => base64_decode($capturedImageData)],
|
||||
|
|
@ -124,10 +93,10 @@ class FacialVerificationAPI {
|
|||
'SimilarityThreshold' => 80
|
||||
]);
|
||||
|
||||
// var_dump($result);
|
||||
// exit;
|
||||
|
||||
if (empty($result['FaceMatches'])) {
|
||||
|
||||
$this->assure_api->resultat_traitement_face($_SESSION['numeroBeneficiaire'], '0', "Les faces ne correspondent pas! / The faces do not match!");
|
||||
|
||||
return [
|
||||
'match' => false,
|
||||
'confidence' => 0,
|
||||
|
|
@ -137,6 +106,9 @@ class FacialVerificationAPI {
|
|||
|
||||
$similarity = $result['FaceMatches'][0]['Similarity'];
|
||||
|
||||
// Face confirmée! / Face confirmed!
|
||||
$this->assure_api->resultat_traitement_face($_SESSION['numeroBeneficiaire'], '1', '');
|
||||
|
||||
return [
|
||||
'match' => $similarity >= 80,
|
||||
'confidence' => round($similarity, 2),
|
||||
|
|
@ -144,7 +116,9 @@ class FacialVerificationAPI {
|
|||
];
|
||||
|
||||
} catch (Exception $e) {
|
||||
error_log("Erreur AWS Rekognition: " . $e->getMessage());
|
||||
|
||||
$this->assure_api->resultat_traitement_face($_SESSION['numeroBeneficiaire'], '9', $msgErreur);
|
||||
|
||||
return [
|
||||
'match' => false,
|
||||
'confidence' => 0,
|
||||
|
|
@ -164,11 +138,6 @@ class FacialVerificationAPI {
|
|||
mkdir($uploadDir, 0755, true);
|
||||
}
|
||||
|
||||
/*
|
||||
$imageData = explode(',', $imageBase64)[1];
|
||||
$imageData = base64_decode($imageData);
|
||||
*/
|
||||
|
||||
$imageData = base64_decode($imageBase64);
|
||||
|
||||
$filename = $uploadDir . $assureId . '_' . time() . '.jpg';
|
||||
|
|
@ -177,50 +146,6 @@ class FacialVerificationAPI {
|
|||
return $filename;
|
||||
}
|
||||
|
||||
/**
|
||||
* Met à jour le statut de la vérification
|
||||
*/
|
||||
private function updateVerificationStatus($token, $status, $matchResult = null, $capturedPhotoPath = null) {
|
||||
/*
|
||||
$sql = "UPDATE facial_verification_requests
|
||||
SET status = ?,
|
||||
verified_at = NOW(),
|
||||
match_confidence = ?,
|
||||
captured_photo_path = ?,
|
||||
attempts = attempts + 1
|
||||
WHERE verification_token = ?";
|
||||
|
||||
$stmt = $this->db->prepare($sql);
|
||||
$stmt->execute([
|
||||
$status,
|
||||
$matchResult ? $matchResult['confidence'] : null,
|
||||
$capturedPhotoPath,
|
||||
$token
|
||||
]);
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* Crée une session d'autorisation pour l'accès aux prestations
|
||||
*/
|
||||
private function createAuthorizationSession($assureId, $verificationRequestId) {
|
||||
$sessionToken = bin2hex(random_bytes(32));
|
||||
|
||||
/*
|
||||
$expiresAt = date('Y-m-d H:i:s', time() + 3600);
|
||||
|
||||
$sql = "INSERT INTO prestation_authorization_sessions
|
||||
(idBeneficiaire, verification_request_id, session_token, expires_at, status)
|
||||
VALUES (?, ?, ?, ?, 'active')";
|
||||
|
||||
$stmt = $this->db->prepare($sql);
|
||||
$stmt->execute([$assureId, $verificationRequestId, $sessionToken, $expiresAt]);
|
||||
*/
|
||||
|
||||
return $sessionToken;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Vérifie le visage capturé
|
||||
*/
|
||||
|
|
@ -229,8 +154,6 @@ class FacialVerificationAPI {
|
|||
// 1. Récupérer les infos de la demande
|
||||
$request = $this->assure_api->valider_token();
|
||||
|
||||
// var_dump($request);
|
||||
|
||||
if (!$request) {
|
||||
return [
|
||||
'success' => false,
|
||||
|
|
@ -241,7 +164,9 @@ class FacialVerificationAPI {
|
|||
|
||||
// 2. Vérifier le nombre de tentatives
|
||||
if ($request['attempts'] >= $this->maxAttempts) {
|
||||
$this->updateVerificationStatus($token, 'failed');
|
||||
|
||||
$this->assure_api->maj_demandereconnaissancefaciale("2"); // Echec
|
||||
|
||||
return [
|
||||
'success' => false,
|
||||
'match' => false,
|
||||
|
|
@ -258,20 +183,10 @@ class FacialVerificationAPI {
|
|||
$capturedImageBase64
|
||||
);
|
||||
|
||||
// On supprime le fichier de capture caméra
|
||||
@unlink($capturedPhotoPath);
|
||||
|
||||
/*
|
||||
var_dump(
|
||||
array(
|
||||
"comparisonResult" => $comparisonResult,
|
||||
)
|
||||
);
|
||||
exit;
|
||||
*/
|
||||
|
||||
if ($comparisonResult['error']) {
|
||||
$this->updateVerificationStatus($token, 'error', $comparisonResult, $capturedPhotoPath);
|
||||
|
||||
$this->assure_api->maj_demandereconnaissancefaciale("2"); // Echec
|
||||
|
||||
return [
|
||||
'success' => false,
|
||||
'match' => false,
|
||||
|
|
@ -285,22 +200,22 @@ class FacialVerificationAPI {
|
|||
$isMatch = $comparisonResult['match'] && $comparisonResult['confidence'] >= $confidenceThreshold;
|
||||
|
||||
if ($isMatch) {
|
||||
$this->updateVerificationStatus($token, 'verified', $comparisonResult, $capturedPhotoPath);
|
||||
$sessionToken = $this->createAuthorizationSession($request['idBeneficiaire'], $request['id']);
|
||||
|
||||
$this->assure_api->maj_demandereconnaissancefaciale("1"); // Vérifié
|
||||
|
||||
return [
|
||||
'success' => true,
|
||||
'match' => true,
|
||||
'confidence' => $comparisonResult['confidence'],
|
||||
'message' => 'Identité vérifiée avec succès',
|
||||
// 'session_token' => $sessionToken,
|
||||
// 'redirect_url' => 'saisie_prestations.php?token=' . $sessionToken
|
||||
];
|
||||
} else {
|
||||
$attemptsRemaining = $this->maxAttempts - ($request['attempts'] + 1);
|
||||
|
||||
if ($attemptsRemaining > 0) {
|
||||
$this->updateVerificationStatus($token, 'pending', $comparisonResult, $capturedPhotoPath);
|
||||
|
||||
$this->assure_api->maj_demandereconnaissancefaciale("1"); // En attente
|
||||
|
||||
return [
|
||||
'success' => false,
|
||||
'match' => false,
|
||||
|
|
@ -309,7 +224,9 @@ class FacialVerificationAPI {
|
|||
'attempts_remaining' => $attemptsRemaining
|
||||
];
|
||||
} else {
|
||||
$this->updateVerificationStatus($token, 'failed', $comparisonResult, $capturedPhotoPath);
|
||||
|
||||
$this->assure_api->maj_demandereconnaissancefaciale("2"); // Echec
|
||||
|
||||
return [
|
||||
'success' => false,
|
||||
'match' => false,
|
||||
|
|
@ -328,6 +245,11 @@ class FacialVerificationAPI {
|
|||
'message' => 'Erreur lors de la vérification: ' . $e->getMessage()
|
||||
];
|
||||
}
|
||||
|
||||
// On supprime le fichier de capture caméra
|
||||
if($capturedPhotoPath){
|
||||
@unlink($capturedPhotoPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -352,16 +274,6 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|||
$token = $input['token'] ?? null;
|
||||
$image = $input['image'] ?? null;
|
||||
|
||||
/*
|
||||
var_dump(
|
||||
array(
|
||||
"token" => $token,
|
||||
"image" => $image,
|
||||
)
|
||||
);
|
||||
exit;
|
||||
*/
|
||||
|
||||
if (!$token || !$image) {
|
||||
echo json_encode(['success' => false, 'message' => 'Token et image requis']);
|
||||
exit;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user