diff --git a/Contestation/Assure.php b/Contestation/Assure.php index 3f0beb4..f74520e 100755 --- a/Contestation/Assure.php +++ b/Contestation/Assure.php @@ -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)); + } + } ?> \ No newline at end of file diff --git a/Contestation/Demandereconnaissancefaciale.php b/Contestation/Demandereconnaissancefaciale.php index e9e32ca..f5be9ca 100755 --- a/Contestation/Demandereconnaissancefaciale.php +++ b/Contestation/Demandereconnaissancefaciale.php @@ -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("$message"); } diff --git a/Contestation/verify_facial_api.php b/Contestation/verify_facial_api.php index 0a16100..b67e902 100644 --- a/Contestation/verify_facial_api.php +++ b/Contestation/verify_facial_api.php @@ -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;