130 lines
4.6 KiB
PHP
130 lines
4.6 KiB
PHP
<?php
|
|
/**
|
|
* SkyFly Travel - Contact Form Backend (PHP mail() for Static Export)
|
|
*/
|
|
|
|
header("Access-Control-Allow-Origin: *");
|
|
header("Access-Control-Allow-Headers: Content-Type");
|
|
header("Content-Type: application/json");
|
|
|
|
// --- CONFIGURATION ---
|
|
$secretKey = "6LfqD1osAAAAAEbpEApPkiQUbyjdKYx2OvhY2XTk"; // reCAPTCHA v3 Secret Key
|
|
$toEmail = "info@skyflytravel.hu";
|
|
$minScore = 0.5;
|
|
$expectedAction = "contact_form";
|
|
// ---------------------
|
|
|
|
function json_error($message, $code = 400, $details = null) {
|
|
http_response_code($code);
|
|
$response = ["error" => $message];
|
|
if (!empty($_GET["debug"]) && $details) {
|
|
$response["details"] = $details;
|
|
}
|
|
echo json_encode($response);
|
|
exit;
|
|
}
|
|
|
|
if ($_SERVER["REQUEST_METHOD"] === "POST") {
|
|
$data = json_decode(file_get_contents("php://input"), true);
|
|
|
|
$name = strip_tags($data["name"] ?? "");
|
|
$email = filter_var($data["email"] ?? "", FILTER_SANITIZE_EMAIL);
|
|
$phone = strip_tags($data["phone"] ?? "");
|
|
$service = strip_tags($data["service"] ?? "");
|
|
$message = strip_tags($data["message"] ?? "");
|
|
$language = $data["language"] ?? "hu";
|
|
$recaptchaToken = $data["recaptchaToken"] ?? "";
|
|
$recaptchaAction = $data["recaptchaAction"] ?? "";
|
|
|
|
if (!$recaptchaToken) {
|
|
json_error("Missing reCaptcha token");
|
|
}
|
|
|
|
// 1. Verify reCaptcha v3
|
|
$verifyResponse = null;
|
|
if (function_exists("curl_init")) {
|
|
$ch = curl_init("https://www.google.com/recaptcha/api/siteverify");
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_POST, true);
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
|
|
"secret" => $secretKey,
|
|
"response" => $recaptchaToken,
|
|
]));
|
|
$verifyResponse = curl_exec($ch);
|
|
curl_close($ch);
|
|
} else {
|
|
$verifyResponse = file_get_contents(
|
|
"https://www.google.com/recaptcha/api/siteverify?secret=$secretKey&response=$recaptchaToken"
|
|
);
|
|
}
|
|
|
|
if ($verifyResponse === false || !$verifyResponse) {
|
|
$last = error_get_last();
|
|
json_error("reCaptcha verification failed", 400, $last ? $last["message"] : "No response");
|
|
}
|
|
|
|
$responseData = json_decode($verifyResponse);
|
|
if (!$responseData) {
|
|
json_error("reCaptcha verification failed", 400, "Invalid JSON response");
|
|
}
|
|
|
|
if (
|
|
!$responseData->success ||
|
|
$responseData->action !== $expectedAction ||
|
|
$responseData->score < $minScore
|
|
) {
|
|
json_error("reCaptcha verification failed", 400, json_encode($responseData));
|
|
}
|
|
|
|
$isEnglish = $language === "en";
|
|
$subject = $isEnglish
|
|
? "Website message: $name ($service)"
|
|
: "Weboldal üzenet: $name ($service)";
|
|
|
|
$title = $isEnglish ? "New message" : "Új üzenet";
|
|
$labelName = $isEnglish ? "Name" : "Név";
|
|
$labelEmail = $isEnglish ? "Email" : "Email";
|
|
$labelPhone = $isEnglish ? "Phone" : "Telefonszám";
|
|
$labelService = $isEnglish ? "Service type" : "Szolgaltatás tipusa";
|
|
$labelMessage = $isEnglish ? "Message" : "Üzenet";
|
|
|
|
$htmlEmail = "
|
|
<html>
|
|
<head>
|
|
<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
|
|
</head>
|
|
<body style='font-family: sans-serif; color: #333;'>
|
|
<div style='max-width: 600px; margin: 20px auto; border: 1px solid #ddd; border-radius: 15px; overflow: hidden;'>
|
|
<div style='background: #D9A321; color: #111827; padding: 20px 24px; font-weight: 700;'>
|
|
SkyFly Travel - $title
|
|
</div>
|
|
<div style='padding: 20px 24px; border-top: 1px solid #eee;'>
|
|
<p><strong>$labelName:</strong> $name</p>
|
|
<p><strong>$labelEmail:</strong> $email</p>
|
|
<p><strong>$labelPhone:</strong> $phone</p>
|
|
<p><strong>$labelService:</strong> $service</p>
|
|
<p><strong>$labelMessage:</strong></p>
|
|
<p style='white-space: pre-wrap; background: #f9f9f9; padding: 12px; border-radius: 8px;'>$message</p>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|
|
";
|
|
|
|
$headers = "MIME-Version: 1.0" . "\r\n";
|
|
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
|
|
$headers .= "From: <kapcsolat@skyflytravel.hu>" . "\r\n";
|
|
if ($email) {
|
|
$headers .= "Reply-To: $email" . "\r\n";
|
|
}
|
|
|
|
// 3. Send Email
|
|
if (mail($toEmail, $subject, $htmlEmail, $headers)) {
|
|
echo json_encode(["success" => true]);
|
|
} else {
|
|
$last = error_get_last();
|
|
json_error("Failed to send email", 500, $last ? $last["message"] : "mail() returned false");
|
|
}
|
|
}
|
|
?>
|