2017-06-15 66 views
4

我是新来这个谷歌Recaptcha的东西。关于我的代码谷歌Recaptcha

我想弄清楚它不起作用。我已经尝试了其他几个代码,但他们不工作,我不知道为什么。

这是我的表单代码

<form name="contact_form" method="post" action="functions.php"> 
<input type="text" id="fname" name="full_name" placeholder="Full Name" required /> 
<input type="number" id="pnumber" name="phone_number" placeholder="Phone Number" required /> 
<input type="email" id="emailid" name="email_address" placeholder="Email Address" required /> 
<textarea placeholder="Message" name="message" required></textarea> 
<span><input type="checkbox" id="disclaimerid" class="disclaimerclass" name="agreement" value="Agree" required>I have read and agreed with the <a class="dataPrivacyLink" href="#">(Data Protection and Privacy Policy)</a> of Hello World</span> 
<div class="g-recaptcha" data-sitekey="--PUBLIC KEY--"></div> 
<input type="submit" name="sendmessage" class="send-message" value="SUBMIT NOW" /> 
</form> 

,这是我的PHP代码

<?php 
    function post_captcha($user_response) { 
     $fields_string = ''; 
     $fields = array(
     'secret' => '_______________PRIVATE_KEY_______________', 
     'response' => $user_response 
    ); 
    foreach($fields as $key=>$value) 
    $fields_string .= $key . '=' . $value . '&'; 
    $fields_string = rtrim($fields_string, '&'); 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, 'https://www.google.com/recaptcha/api/siteverify'); 
    curl_setopt($ch, CURLOPT_POST, count($fields)); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, True); 

    $result = curl_exec($ch); 
    curl_close($ch); 

    return json_decode($result, true); 
} 
// Call the function post_captcha 
$res = post_captcha($_POST['g-recaptcha-response']); 
if (!$res['success']) { 
    // What happens when the CAPTCHA wasn't checked 
    echo '<p>Please go back and make sure you check the security CAPTCHA box.</p><br>'; 
} else { 
    // If CAPTCHA is successfully completed... 

    // Paste mail function or whatever else you want to happen here! 
    $send; 
if(isset($_POST['email_address'])) 
{ 
    $send="Your inquiry submitted successfully. we will contact you very soon. "; 
    send_message_to_agent($_POST['full_name'], $_POST['phone_number'], $_POST['email_address'], $_POST['message']); 
} 
else 
{ 
    $send="fail"; 
} 
function send_message_to_agent($full_name, $phone_number, $email_address, $visiter_message){ 

    $to  = '[email protected]'; 
    $subject = 'Hello World'; 

    $message = '<p>Name : '.$full_name.'</p>'; 
    $message .= '<p>Phone Number : '.$phone_number.'</p>'; 
    $message .= '<p>Email Address : '.$email_address.'</p>'; 
    $message .= '<p>Message : '.$visiter_message.'</p>'; 

    $headers = "MIME-Version: 1.0\r\n"; 
    $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; 

    mail($to, $subject, $message, $headers); 
} 
echo $send; 
//die; 
} 
// Your code here to handle a successful verification 
/> 
+0

你用自己的私钥替换了这行吗? “'secret'=>'_______________PRIVATE_KEY_______________',” –

+0

是的,我用自己的私钥取代了这一行,因为我在这里粘贴代码:) – HELLOHK

回答

0

你也必须通过你的ip地址

$fields = array('secret' => '_______________PRIVATE_KEY_______________', 'response' => $user_response, 'remoteip' => xxx.xxx.xxx.xxx //your ip );

+1

非常感谢!这项工作:D – HELLOHK

+0

@HELLOHK你可以请upvote我的答案,有人给负面评论 –

+0

它适用于一些尝试,然后它停止工作。我不知道为什么。 – HELLOHK

0

起初,你需要包括reCAPTCHA API JavaScript库。

<script src="https://www.google.com/recaptcha/api.js" async defer></script> 

在您的形式

<div class="g-recaptcha" data-sitekey="--PUBLIC KEY--"></div> 

在您的文章功能

 $secret = 'SCREAT_KEY'; 
       //get verify response data 
    $verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['g-recaptcha-response']); 
       $responseData = json_decode($verifyResponse); 
       if($responseData->success){ 
//perform action on success 
} 
else{ 
//redirect to login 
} 
+0

添加我的发送操作后,它仍然不起作用。 – HELLOHK

0

这是因为加入我的服务器的IP它工作一段时间,那么现在它并不想发后的怪异再次。