This commit is contained in:
KANE LAZENI 2026-02-24 04:10:41 +00:00
parent c9791fffa0
commit e15a20d574
3 changed files with 108 additions and 146 deletions

View File

@ -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));
}
}
?>

View File

@ -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>");
}

View File

@ -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;