$lg, "lang" => $lang, ) ); */ $translations = [ 'fr_FR' => [ 'error' => 'Erreur', 'information' => 'Information', 'missing_language' => 'Paramètre langue absent de la requête !', 'unknown_language' => 'Langue inconnue !', 'missing_entity' => 'Paramètre entité absent de la requête !', 'missing_provider' => 'Paramètre prestataire absent de la requête !', 'missing_insured' => 'ID assuré absent de la requête !', 'missing_request' => 'ID demande absent de la requête !', 'entity_not_found' => 'Entité introuvable !', 'insured_not_found' => 'Assuré introuvable !', 'no_request_found' => 'Aucune demande trouvée !', 'token_used' => 'Token déjà utilisé !', // 'request_expired' => 'Demande expirée depuis %s !', 'request_expired' => 'Demande expirée depuis ', 'verification_done' => 'Vérification déjà effectuée !', 'too_many_attempts' => 'Trop de tentatives !', 'secure_identity_verification' => 'Vérification d\'identité sécurisée', 'provider' => 'Prestataire', 'patient' => 'Patient', 'counter' => 'Compteur', 'attempts_on' => 'tentative(s) sur', 'loading_request' => 'Vérification du lien...', 'verification_instructions' => 'Instructions pour la vérification', 'instruction_1' => 'Positionnez votre visage dans l\'ovale', 'instruction_2' => 'Assurez-vous d\'être dans un endroit bien éclairé', 'instruction_3' => 'Regardez directement la caméra', 'instruction_4' => 'Restez immobile lors de la capture', 'instruction_5' => 'Retirez lunettes de soleil, casquette ou masque', 'start_camera' => 'Démarrer la caméra', 'position_face' => 'Positionnez votre visage dans l\'ovale', 'take_photo' => 'Prendre la photo', 'confirm_photo' => 'Confirmez votre photo', 'confirm_verify' => 'Confirmer et vérifier', 'retake_photo' => 'Reprendre la photo', 'verification_processing' => 'Vérification de votre identité en cours...', 'please_wait' => 'Merci de patienter', 'identity_verified' => 'Identité vérifiée !', 'identity_confirmed' => 'Votre identité a été confirmée avec succès.', 'confidence' => 'Confiance', 'access_services' => 'Vous pouvez maintenant accéder à vos prestations.', 'verification_failed' => 'Vérification échouée', 'face_not_match' => 'Votre visage ne correspond pas à notre base de données.', 'contact_support' => 'Veuillez contacter notre service client.', 'remaining_attempts' => 'Tentatives restantes', 'redirection_in' => 'Redirection dans %s secondes...', 'invalid_link' => 'Lien de vérification invalide', 'expired_link' => 'Lien expiré ou invalide', 'server_error' => 'Erreur de connexion au serveur', 'camera_error' => 'Impossible d\'accéder à la caméra. Veuillez autoriser l\'accès.', ], 'en_US' => [ 'error' => 'Error', 'information' => 'Information', 'missing_language' => 'Language parameter missing from query!', 'unknown_language' => 'Unknown language!', 'missing_entity' => 'Entity parameter missing from query!', 'missing_provider' => 'Provider parameter missing from query!', 'missing_insured' => 'Insured ID missing from query!', 'missing_request' => 'Request ID missing from query!', 'entity_not_found' => 'Entity not found!', 'insured_not_found' => 'Insured not found!', 'no_request_found' => 'No requests found!', 'token_used' => 'Token already used!', // 'request_expired' => 'Request expired since %s!', 'request_expired' => 'Request expired since ', 'verification_done' => 'Verification already completed!', 'too_many_attempts' => 'Too many attempts!', 'secure_identity_verification' => 'Secure identity verification', 'provider' => 'Provider', 'patient' => 'Patient', 'counter' => 'Counter', 'attempts_on' => 'attempt(s) out of', 'loading_request' => 'Checking verification link...', 'verification_instructions' => 'Verification instructions', 'instruction_1' => 'Place your face inside the oval', 'instruction_2' => 'Ensure you are in a well-lit place', 'instruction_3' => 'Look directly at the camera', 'instruction_4' => 'Remain still during capture', 'instruction_5' => 'Remove sunglasses, cap, or mask', 'start_camera' => 'Start camera', 'position_face' => 'Position your face inside the oval', 'take_photo' => 'Take photo', 'confirm_photo' => 'Confirm your photo', 'confirm_verify' => 'Confirm and verify', 'retake_photo' => 'Retake photo', 'verification_processing' => 'Identity verification in progress...', 'please_wait' => 'Please wait', 'identity_verified' => 'Identity verified!', 'identity_confirmed' => 'Your identity has been successfully confirmed.', 'confidence' => 'Confidence', 'access_services' => 'You may now access your services.', 'verification_failed' => 'Verification failed', 'face_not_match' => 'Your face does not match our database.', 'contact_support' => 'Please contact customer support.', 'remaining_attempts' => 'Remaining attempts', 'redirection_in' => 'Redirecting in %s seconds...', 'invalid_link' => 'Invalid verification link', 'expired_link' => 'Expired or invalid link', 'server_error' => 'Server connection error', 'camera_error' => 'Unable to access the camera. Please allow access.', ] ]; function t($key, $lang, $translations, $params) { $text = $translations[$lang][$key] ?? $key; if (!empty($params)) { return vsprintf($text, $params); } return $text; } $tab_code_langue = ["fr_FR", "en_US"]; if (!in_array($codeLangue, $tab_code_langue)) { afficherMessage("Langue inconnue!/Unknown language!", "Erreur"); } if (!isset($_GET['codeEntite'])) { $message = t('missing_entity', $lang, $translations); afficherMessage($message, "Error"); } if (!isset($_GET['codePrestataire'])) { $message = t('missing_provider', $lang, $translations); afficherMessage($message, "Erreur"); } if (!isset($_GET['idBeneficiaire'])) { $message = t('missing_insured', $lang, $translations); afficherMessage($message, "Erreur"); } if (!isset($_GET['idDemande'])) { $message = t('missing_request', $lang, $translations); afficherMessage($message, "Erreur"); } $_SESSION['codeLangue'] = $lg; $_SESSION['codeEntite'] = base64_decode($_GET['codeEntite']); $_SESSION['codePrestataire'] = base64_decode($_GET['codePrestataire']); $_SESSION['idBeneficiaire'] = base64_decode($_GET['idBeneficiaire']); $_SESSION['idDemande'] = base64_decode($_GET['idDemande']); $codeSociete = $_SESSION['codeEntite']; $idBeneficiaire = $_SESSION['idBeneficiaire']; $idDemande = $_SESSION['idDemande']; $codePrestataire = $_SESSION['codePrestataire']; $codeBdd = $codeSociete; $_SESSION['idLogapiface'] = 0; require_once "Assure.php"; $assure = new Assure(); $_SESSION['assure'] = $assure; $_SESSION['codeBdd'] = $codeBdd; $bdd = $assure->geUneBd($codeBdd); if(!$bdd) { $message = t('entity_not_found', $lang, $translations); afficherMessage("$message", "Erreur"); } $_SESSION['BdName'] = $bdd['BdName']; $_SESSION['BdLogin'] = $bdd['BdLogin']; $_SESSION['BdMdp'] = $bdd['BdMdp']; if($assure->existeligne($codeSociete)) { $fassureExiste = $assure->assureExiste($codeSociete, $idBeneficiaire); if(!$fassureExiste) { $message = t('insured_not_found', $lang, $translations); afficherMessage("$message", "Erreur"); } $demande = $assure->checkdemandereconnaissancefaciale_id(); if(!$demande) { $message = $codeLangue == 'en_US' ? "No requests found!" : "Aucune demande trouvée!"; afficherMessage("$message", "Erreur"); } $idDemande = $demande["idDemande"]; $codeEtat = $demande["codeEtat"]; $demandeExpiree = $demande["demandeExpiree"]; $dateExpirationFr = $demande["dateExpirationFr"]; $dateExpirationEng = $demande["dateExpirationEng"]; $etatDemande = $demande["etatDemande"]; $etatDemandeEng = $demande["etatDemandeEng"]; $beneficiaire = $demande["beneficiaire"]; $prestataire = $demande["prestataire"]; $lienPhoto = $demande["lienPhoto"]; $attempts = $demande["attempts"]; $_SESSION['lienPhoto'] = $lienPhoto; $_SESSION['numeroBeneficiaire'] = $demande["numeroBeneficiaire"]; $_SESSION['login'] = $demande["numeroBeneficiaire"]; $_SESSION['attempts'] = $attempts; /* codeEtat libelle 6 Token déjà utilisé 3 Expiré 1 Vérifié 2 Echec 4 Erreur 5 Trop de tentatives 0 En attente */ if($codeEtat=="6") { $message = t('token_used', $lang, $translations); afficherMessage("$message", "Information"); } 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 !"; $message = t('request_expired', $lang, $translations) . $dateExpirationFr . "!"; afficherMessage("$message", "Erreur"); } if($codeEtat=="1") { $message = $codeLangue == 'en_US' ? "Verification already completed!" : "Vérification déjà effectuée!"; afficherMessage("$message", "Information"); } $param_societe = $assure->get_parametres_societe($codeSociete); $_SESSION['dureeToken'] = $param_societe["dureeTokenReconnaissanceFaciale"]; $_SESSION['dossierPhoto'] = $param_societe["dossierPhoto"]; $_SESSION['nbTentative'] = $param_societe["nbTentativeBiometrie"]; $_SESSION['lienPhotoFace'] = $param_societe["lienPhotoFace"]; $maxAttempts = $_SESSION['nbTentative']; if($attempts>=$maxAttempts) { // changer le status $assure->maj_demandereconnaissancefaciale("5"); // Trop de tentatives $message = $codeLangue == 'en_US' ? "Too many attempts!" : "Trop de tentatives!"; afficherMessage("$message", "Erreur"); } // vérifier que la photo du bénéficiaire existe if ($_SESSION['lienPhoto']>" ") { $photo = $_SESSION['lienPhotoFace'].$_SESSION['lienPhoto']; if(!file_exists($photo)) { $_SESSION['lienPhoto'] = ""; } else { $_SESSION['photoAssureCrypte'] = decryptImage($photo); } } } function afficherMessage($message, $titre) { echo " $titre

$titre

{$message}

"; exit(); } // Chiffrer l’image au moment de l’upload (PHP) function encryptImage($sourcePath, $destPath) { $key = base64_decode(trim(file_get_contents('/var/www/keys/inter-sante-photo.key'))); $plaintext = file_get_contents($sourcePath); $iv = openssl_random_pseudo_bytes(16); $cipher = openssl_encrypt($plaintext, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv); file_put_contents($destPath, $iv . $cipher); // concat IV + données } // Déchiffrer pour afficher la photo dans INTER-SANTE function decryptImage($path) { $key = base64_decode(trim(file_get_contents('/var/www/keys/inter-sante-photo.key'))); $data = file_get_contents($path); $iv = substr($data, 0, 16); $ciphertext = substr($data, 16); // return openssl_decrypt($ciphertext, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv); return base64_encode(openssl_decrypt($ciphertext, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv)); } ?> INTER-SANTÉ - Vérification d'identité

🏥 INTER-SANTÉ

Vérification d'identité sécurisée

Prestataire :

Patient :

Compteur :

Demande Vérification du lien...

Instructions pour la vérification

  • Positionnez votre visage dans l'ovale
  • Assurez-vous d'être dans un endroit bien éclairé
  • Regardez directement la caméra
  • Restez immobile lors de la capture
  • Retirez lunettes de soleil, casquette ou masque
Positionnez votre visage dans l'ovale

Confirmez votre photo

Votre photo

Vérification de votre identité en cours...
Merci de patienter

❌ Erreur