Formulario PHP + Google reCAPTCHA

Es un poco extraño que la documentación de Google para recaptcha no sea tan útil como pensé que iba a ser. Me pidieron que tomara un formulario existente actual (que se está recibiendo correo no deseado varias veces al día) y lo actualicé con la nueva recaptcha de Google. Hay muchos tutoriales para el antiguo captcha, pero no tantos para el nuevo. Básicamente, solo quiero un formulario simple para capturar el nombre, el correo electrónico, el mensaje y luego reemplazar mi actual campo “anti-bot” por el recaptcha (utilicé un campo que básicamente le preguntaba qué era 2 + 2 y si ingresaba algo, pero 4, no enviaría). Si los campos obligatorios son válidos y la recaptcha es válida, entonces quiero que me envíe un correo electrónico con los contenidos de los campos del formulario.

Pasé por los sencillos pasos:

  1. registrado mi sitio para obtener las llaves

  2. agregué este fragmento dentro de mi etiqueta principal:

     
  3. agregué este fragmento al final de mi formulario:

     

En este punto, la recaptcha se muestra bien. Pero la parte del lado del servidor es un poco confusa.

Este es mi formulario de contacto actualizado con la recaptcha que muestra:

 

Y aquí está mi página POST actual (no estoy seguro de dónde agregar el código recaptcha):

 <?php $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['message']; $human = $_POST['human']; $from = 'From: My Website'; $to = 'myemail@gmail.com'; $subject = 'Request Form'; $body = "Name: $name \n E-Mail: $email \nMessage:\n$message"; if ($_POST['submit']) { if ($email != '') { if ($human == '4') { if (mail ($to, $subject, $body, $from)) { echo '

You have successfully submitted your information to PS4RS. Subscribers to our mailing list will begin to periodically receive updates.

'; } else { echo '

Something went wrong, go back and try again!

'; } } else if ($_POST['submit'] && $human != '4') { echo '

You answered the anti-spam question incorrectly!

'; } } else { echo '

You need to fill in all required fields!!

'; } } ?>

Cualquier ayuda es bienvenida. Siento que esta podría ser una gente muy común con personas que intentan implementarlo en sus formas de trabajo actuales.

Consulte este enlace: https://developers.google.com/recaptcha/docs/verify

En pocas palabras, debe hacer una solicitud a

 https://www.google.com/recaptcha/api/siteverify?secret=YOUR_SECRET&response=RESPONSE_CAME_FROM_YOUR_FORM&remoteip=USER_IP_ADDRESS 

Donde YOUR_SECRET es la clave secreta que recibió en el sitio de ReCAPTCHA, USER_IP_ADDRESS puede recibirse a través $_SERVER matriz $_SERVER y RESPONSE_CAME_FROM_YOUR_FORM es una cadena enviada con su formulario. Se almacena en $_POST['g-recaptcha-response'] .

Puedes hacerlo a través de file_get_contents($url) como

 $data = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=YOUR_SECRET&response=RESPONSE_CAME_FROM_YOUR_FORM&remoteip=USER_IP_ADDRESS"); 

En $data , recibirá el objeto JSON que contiene el campo de success , que está buscando. Si el éxito es falso, entonces no es humano y debes exit() . Te sugiero que verifiques esto al principio de tu progtwig.

Actualización :

La deencoding del objeto JSON se ve así:

 $data = json_decode($data); // This will decode JSON to object if(!$data->success) exit(); 

Actualización :

A veces, file_get_contents($url) no podrá configurar una conexión https segura. En su lugar, puede usar open_https_url($url) Haga que su código se vea así:

 "; $client_captcha_response = $_POST['g-recaptcha-response']; $user_ip = $_SERVER['REMOTE_ADDR']; $captcha_verify = open_https_url("https://www.google.com/recaptcha/api/siteverify?secret=$your_secret&response=$client_captcha_response&remoteip=$user_ip"); $captcha_verify_decoded = json_decode($captcha_verify); if(!$captcha_verify_decoded->success) die('DIRTY ROBOT'); $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['message']; $human = $_POST['human']; $from = 'From: My Website'; $to = 'myemail@gmail.com'; $subject = 'Request Form'; $body = "Name: $name \n E-Mail: $email \nMessage:\n$message"; if ($_POST['submit']) { if ($email != '') { if ($human == '4') { if (mail ($to, $subject, $body, $from)) { echo '

You have successfully submitted your information to PS4RS. Subscribers to our mailing list will begin to periodically receive updates.

'; } else { echo '

Something went wrong, go back and try again!

'; } } else if ($_POST['submit'] && $human != '4') { echo '

You answered the anti-spam question incorrectly!

'; } } else { echo '

You need to fill in all required fields!!

'; } } ?>

Tal vez la respuesta anterior esté un poco desactualizada, ya que Google ahora usa reCaptcha nocaptcha. Aquí encontré una respuesta más simple y completa para usar con su archivo de correo electrónico de php separado.

La solución tiene un formulario de correo electrónico simple con nombre y correo electrónico y un archivo php separado para enviar el formulario. Deberías poder continuar desde allí y modificar tu formulario en consecuencia. La solución funcionó para mi.

https://stackoverflow.com/a/27439796/3934886

y enlace al tutorial:

http://codeforgeek.com/2014/12/google-recaptcha-tutorial/