将 reCAPTCHA v2 添加到我的 PHP 文件中

Posted

技术标签:

【中文标题】将 reCAPTCHA v2 添加到我的 PHP 文件中【英文标题】:Adding reCAPTCHA v2 into my PHP file 【发布时间】:2015-06-14 04:14:15 【问题描述】:

php 问题已解决。以下是我正在使用的 html 和 PHP 代码:

contact_form.html:

<html>
<head>
    <title>My Contact Form</title>
    <script src='https://www.google.com/recaptcha/api.js'></script>
</head>
<body>
    <div class="contact-form">
        <h3>Send me your message</h3>
        <form action="app/contact.php" method="POST">
            <div class="text-fields">
                <span>Full Name *:</span>
                <input name="full_name" type="text" class="text" value="Your Name">
            </div>
            <div class="text-fields">
                <span>E-mail *:</span>
                <input name="email" type="text" class="text" value="user@domain.com">
            </div>
            <div class="clearfix"> </div>
            </div>
                <div class="subject-field">
                <span>Subject *:</span>
                <input name="subject" type="text" class="text" value="Your Subject">
            </div>
            <div class="message-field">
                <span>Message *:</span>
                <textarea name="message"> </textarea>
            </div>
            <div class="g-recaptcha" data-sitekey="SITE-KEY-HERE"></div>
            <input type="submit" value="Send" />
        </form>
    </div>
</body>
</html>

这是更新后的 PHP。有了这个,我也得到了我想要的 From 字段,即“Sender Name”。

contact_form.php:

<?php
    $full_name;$email;$subject;$message;$captcha;
        if(isset($_POST['full_name']))
            $full_name=$_POST['full_name'];
        if(isset($_POST['email']))
            $email=$_POST['email'];
        if(isset($_POST['subject']))
            $subject=$_POST['subject'];
        if(isset($_POST['message']))
            $message=$_POST['message'];
        if(isset($_POST['g-recaptcha-response']))
            $captcha=$_POST['g-recaptcha-response'];
        
        if(!$captcha)
            echo 'Check the reCAPTCHA box.';
            exit;
        
        $response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=SECRET-KEY-HERE&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']);
        if($response.success==false)
        
            echo 'You are a robot!';
        else
        
            $to = "me@domain.com";
            $from = $full_name . ' <'.$email.'>';
            $headers = 'From: ' . $from . "\r\n";
            mail ($to, $subject, $message, $headers);

        echo 'Your message has been sent!';
        
?>

感谢大家的帮助。

【问题讨论】:

查看文档:github.com/google/recaptcha#usage 【参考方案1】:

试试这个!

<?php
     if(isset($_POST['full_name']) && isset($_POST['full_name']) )
        $full_name = $_POST['full_name']; 
         $email = $_POST['email'];
         $from_name_email = $full_name . '<'.$email.'>';
     
     if(isset($_POST['subject']))
        $subject = $_POST['subject'];
     
    if(isset($_POST['message']))
        $message = $_POST['message'];
    
     if(isset($_POST['g-recaptcha-response']))
        $captcha=$_POST['g-recaptcha-response'];
        $to = "my@email.com";
        $subject = "Contact Form";
        $headers .= 'From: ' . $from_name_email . "\r\n";
    
    if(!$captcha)
        echo 'Please check the the captcha form.';
        exit;
    
    $response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=YOUR SECRET KEY GOES HERE&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']);
            if($response.success==false)
            
              echo 'You are spammer!';
            else
            
        mail ($to, $subject, $message, $headers);

        echo "Your message has been sent! Thank you.";
              
    ?>

【讨论】:

这段代码仍然包含无意义的片段$response.success==false。这没有任何意义。 如果 captha 不能正常工作,你就是垃圾邮件发送者?? 不,实际上不会。 $response.success 将字符串“成功”附加到$response;该操作的结果永远不会是错误的。 它会如何正常工作?非常感谢,对我的错误深表歉意 $response['success'] 如果解析为 json 可能会起作用。为什么没有回答?【参考方案2】:

试试这个,它对我有用:

<?php
 if(isset($_POST['full_name']) && isset($_POST['full_name']) )
    $full_name = $_POST['full_name']; 
     $email = $_POST['email'];
     $from_name_email = $full_name . '<'.$email.'>';
 
 if(isset($_POST['subject']))
    $subject = $_POST['subject'];
 
if(isset($_POST['message']))
    $message = $_POST['message'];

 if(isset($_POST['g-recaptcha-response']))
    $captcha=$_POST['g-recaptcha-response'];
    $to = "my@email.com";
    $subject = "Contact Form";
    $headers .= 'From: ' . $from_name_email . "\r\n";

if(!$captcha)
    echo 'Please check the the captcha form.';
    exit;

//change is here
$response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=USE PRIVATE KEY HERE&response=".$_POST['g-recaptcha-response'."&remoteip=".$_SERVER['REMOTE_ADDR']);
        //change is here
        $response = json_decode($response);
        //change is here
        if($response->success==false)
        
          echo 'You are spammer!';
        else
        
    mail ($to, $subject, $message, $headers);

    echo "Your message has been sent! Thank you.";
          
?>

【讨论】:

【参考方案3】:

试试:

 if(!isset($_POST['g-recaptcha-response']) || empty($_POST['g-recaptcha-response'])) 
        echo 'reCAPTHCA verification failed, please try again.';
     else 
        $secret = 'google_secret_key';

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, 'https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['g-recaptcha-response']);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $response = curl_exec($ch);
        curl_close($ch);
        $response = json_decode($response);

        if($response->success) 
            // What happens when the CAPTCHA was entered incorrectly
            echo 'Successful .';
         else 
            // Your code here to handle a successful verification
            echo 'reCAPTHCA verification failed, please try again.';
        
    

【讨论】:

以上是关于将 reCAPTCHA v2 添加到我的 PHP 文件中的主要内容,如果未能解决你的问题,请参考以下文章

ReCaptcha v2 客户端事件

reCAPTCHA的CORS

css 将reCaptcha V2集成到网站中

用于 reCAPTCHA 的 CORS

如何将 Google Recaptcha v2 实施到限制访问 Google Recaptcha 的 Web 应用程序

php 使用AJAX将google recaptcha添加到我们的表单中