如何将reCAPTCHA与表单集成


How to integrate reCAPTCHA with a form

我不知道如何将Google reCAPTCHA添加到此联系人表单中。我在前端添加没有问题,但似乎无法应用于服务器端。

<!-- Form -->
    <div id="contact-form">
        <form method="post" action="contact.php">
            <div class="field">
                <label>Name:</label>
                <input type="text" name="name" class="text" />
            </div>
            <div class="field">
                <label>Email: <span>*</span></label>
                <input type="text" name="email" class="text" />
            </div>
            <div class="field">
                <label>Message: <span>*</span></label>
                <textarea name="message" class="text textarea" ></textarea>
            </div>
            <div class="field">
                <input type="button" class="button light medium" id="send" value="Send Message"/>
            </div>
            <div class="field">
            <input type="button" class="button gray medium" value="Reset!"/>
            </div>      
            <div class="loading"></div>
        </form>
    </div>

PHP服务器端

<?php
//Retrieve form data. 
//GET - user submitted data using AJAX
//POST - in case user does not support javascript, we'll use POST instead
$name = ($_GET['name']) ? $_GET['name'] : $_POST['name'];
$email = ($_GET['email']) ?$_GET['email'] : $_POST['email'];
$message = ($_GET['message']) ?$_GET['message'] : $_POST['message'];
//flag to indicate which method it uses. If POST set it to 1
if ($_POST) $post=1;
//Simple server side validation for POST data, of course, you should    validate the email
if (!$name) $errors[count($errors)] = 'Please enter your name.';
if (!$email) $errors[count($errors)] = 'Please enter your email.'; 
if (!$message) $errors[count($errors)] = 'Please enter your message.'; 
//If the errors array is empty, send the mail
if (!$errors) {
// ====== Your mail here  ====== //
$to = 'admin@mysite.com <admin@mysite.com>';
// Sender
$from = $name . ' <' . $email . '>';
//subject and the html message
$subject = 'Contact Message from the Byblos Group Website'; 
$message = '
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head></head>
<body>
<table>
    <tr><td>Name:</td><td>' . $name . '</td></tr>
    <tr><td>Email:</td><td>' . $email . '</td></tr>
    <tr><td>Message:</td><td>' . nl2br($message) . '</td></tr>
</table>
</body>
</html>';
// Send the mail
$result = sendmail($to, $subject, $message, $from);
//if POST was used, display the message straight away
if ($_POST) {
    if ($result) echo 'Thank you! We have received your message.';
    else echo 'Sorry, unexpected error. Please try again later';
//else if GET was used, return the boolean value so that 
//ajax script can react accordingly
//1 means success, 0 means failed
} else {
    echo $result;   
}
// If the errors array has values
} else {}

// Simple mail function with HTML header
function sendmail($to, $subject, $message, $from) {
$headers = "MIME-Version: 1.0" . "'r'n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "'r'n";
$headers .= 'From: ' . $from . "'r'n";
$result = mail($to,$subject,$message,$headers);
if ($result) return 1;
else return 0;
}
?>

我们正在像这个一样验证谷歌reCAPTCHA

$fileContent = '';
if (isset($_REQUEST['g-recaptcha-response']) && !empty($_REQUEST['g-recaptcha-response'])) {
    $fileContent = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=your_recaptcha_secret_key&response=". $_REQUEST['g-recaptcha-response']);
}
$jsonArray = json_decode($fileContent, true);
if (isset($jsonArray['success']) && $jsonArray['success']==true) {
    // process your logic here
} else {
    echo 'Invalid verification code, please try again!';
}

我实际上正在使用这个自制的函数来检查reCAPTCHA在我的网站上是否有效

function checkCaptcha($cResp) {
    $captchaSecret = "yourSecret";
    $captchaRequestUrl = 'https://www.google.com/recaptcha/api/siteverify?secret='.$captchaSecret.'&response='.$cResp;
    $captchaResponse = @file_get_contents($captchaRequestUrl);
    if (!$captchaResponse) {
        return 2;
    }
    $captchaResponse = json_decode($captchaResponse);
    $captchaSuccess = $captchaResponse->{'success'};
    if (!$captchaSuccess) {
        return 3;
    }
    return 1;
}

然后你可以像下面的一样检查

if (checkCaptcha($_POST['g-recaptcha-response']) === 1) // success
if (checkCaptcha($_POST['g-recaptcha-response']) === 2) // no resp
if (checkCaptcha($_POST['g-recaptcha-response']) === 3) // fail