false, 'error'=>'Доступ запрещён.'], JSON_UNESCAPED_UNICODE); exit; } function jerr(string $msg, int $code = 400): void { http_response_code($code); echo json_encode(['ok'=>false, 'error'=>$msg], JSON_UNESCAPED_UNICODE); exit; } // CSRF $csrf = $_POST['csrf'] ?? ''; if (empty($_SESSION['csrf_token']) || !hash_equals($_SESSION['csrf_token'], $csrf)) { jerr('Ошибка CSRF. Обновите страницу.', 400); } $id = (int)($_POST['id'] ?? 0); if ($id <= 0) { jerr('Неверный идентификатор пользователя.', 400); } // Загружаем аккаунт $st = $pdo->prepare("SELECT id, email, role FROM compte WHERE id = ? AND role IN ('client','praticien','secretaire')"); $st->execute([$id]); $compte = $st->fetch(PDO::FETCH_ASSOC); if (!$compte) { jerr('Пользователь не найден или роль не поддерживается.', 404); } $email = trim($compte['email'] ?? ''); if ($email === '') { jerr('У пользователя не указан e-mail.', 400); } // Генерируем новый токен try { $token = bin2hex(random_bytes(32)); } catch (Exception $e) { jerr('Не удалось сгенерировать токен.', 500); } // Сохраняем токен и сбрасываем флаг подтверждения $upd = $pdo->prepare("UPDATE compte SET token_validation = ?, email_valide = 0, modifie_le = NOW() WHERE id = ?"); $upd->execute([$token, $compte['id']]); // Строим ссылку подтверждения $host = $_SERVER['HTTP_HOST'] ?? 'uslugi.fr'; $scheme = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http'; $validateUrl = $scheme . '://' . $host . '/auth/validate.php?token=' . urlencode($token); // Отправка письма (простой mail(), можно заменить на PHPMailer) $subject = 'Подтверждение регистрации на uslugi.fr'; // On prépare le contenu HTML (avec des sauts de ligne
) $htmlBody = nl2br( "Здравствуйте!\n\n" . "Вы (или кто-то другой) зарегистрировались на сайте uslugi.fr с этим адресом электронной почты.\n\n" . "Чтобы подтвердить регистрацию, перейдите по следующей ссылке:\n" . "$validateUrl\n\n" . "Если вы не регистрировались на сайте, просто проигнорируйте это письмо.\n\n" . "С уважением,\n" . "Команда uslugi.fr\n" ); // On garde une version texte pur sans HTML $textBody = strip_tags($htmlBody); // REMPLACEMENT DE mail() PAR uslugi_mail() list($sent, $err) = uslugi_mail( $email, $subject, // Plus besoin de base64_encode ici $htmlBody, $textBody, ['to_name' => "Пользователь"] // Optionnel : vous pouvez passer le nom si vous l'avez ); // On adapte le test de succès if (!$sent) { // On affiche l'erreur réelle retournée par Brevo/PHPMailer pour le debug jerr('Ошибка отправки (Brevo): ' . $err, 500); } echo json_encode([ 'ok' => true, 'message' => 'Ссылка для подтверждения регистрации успешно отправлена на ' . $email ], JSON_UNESCAPED_UNICODE);