如何将reCAPTCHA与表单集成

时间:2015-10-28 11:30:25

标签: php recaptcha

我无法弄清楚如何将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;
}

?>

2 个答案:

答案 0 :(得分:1)

我们正在验证Google 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!';
}

答案 1 :(得分:0)

我实际上正在使用这个自制函数来检查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