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