Estoy intentando implementar el reCaptcha v2 mediante un ajax. Parece que todo va bien pero luego no funciona correctamente.
Mi form
Código HTML:
<form id="form" method="post" action="<?=RUTA;?>inc/email.php" enctype="multipart/form-data"> <div class="flt"> <label>Nombre:</label><input type="text" name="nombre"> </div> <div class="flt"> <label>E-Mail:</label><input class="email" type="text" name="mail"> </div> <div class="flt"> <label>Telefono:</label><input type="text" name="telf"> </div> <div class="flt"> <label>Asunto:</label><input type="text" name="asunto"><br> </div> <div class="flt"> <label>Mensaje:</label><br><textarea name="mensaje"></textarea> </div> <div class="flt"> <label>Captcha:</label><br> <div class="g-recaptcha" data-sitekey="CLAVE DE SITIO"></div> </div> <input type="submit" class="c_submit" value="Enviar"> </form>
Código:
y mi email.php$(function() { $('.c_submit').click( function(e){ e.preventDefault(); var formimg = $('#form'); var formimg_array = $(formimg).serialize(); var formimg_url = $(formimg).attr('action'); var formmail = $('.email').val(); console.log(formimg_array); if ( !(/\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test(formmail)) ) { alert("Por favor, introduzca un e-mail válido."); } else { $.ajax( { url: formimg_url, type: 'POST', data: formimg_array, processData: false, contentType: false, success: function(data) { console.log(data); $('.mensaje').show(); setTimeout(function(){ $('.mensaje').hide(); },5000); $(':input', formimg).each(function() { var type = this.type; var tag = this.tagName.toLowerCase(); if (type == 'text' || tag == 'textarea') this.value = ""; }); }, error: function (xhr, ajaxOptions, thrownError) { console.log('MAL'); } } ); }; }); });
Código PHP:
<?
if(isset($_POST['nombre'])){ $nombre=$_POST['nombre'];}
if(isset($_POST['mail'])){ $email=$_POST['mail'];}
if(isset($_POST['telf'])){ $tel=$_POST['telf'];}
if(isset($_POST['asunto'])){ $asunto2=$_POST['asunto'];}
if(isset($_POST['mensaje'])){ $consulta=$_POST['mensaje'];}
if(isset($_POST['g-recaptcha-response'])){ $captcha=$_POST['g-recaptcha-response'];}
if(!$captcha){ echo '<script>alert("Indica el captcha '.$_POST['g-recaptcha-response'].'")</script>'; exit;}
$response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=SECURE(eliminada para internet)&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']);
$para = '[email protected]';
$mio = '[email protected]';
$asunto = "Contacto - ".$nombre;
$cabeceras = "MIME-Version: 1.0" . "\r\n";
$cabeceras .= "Content-type: text/html; charset=utf-8" . "\r\n";
$cabeceras .= "From: Mi Web <".$mio.">" . "\r\n" . "Reply-To: ".$email."" . "\r\n";
$mensaje = "
<html>
<head>
<title>Contacto Web</title>
</head>
<body>
<div>
<strong>Nombre:<br /></strong>".$nombre."<br /><br />
<strong>E-Mail:<br /></strong>".$mail."<br /><br />
<strong>Teléfono:<br /></strong>".$tel."<br /><br />
<strong>Asunto:<br /></strong>".$asunto2."<br /><br />
<strong>Consulta:<br /></strong>".$consulta."<br /><br />
</div>
</body>
</html>";
if($response.success) {
mail($para,utf8_decode($asunto),$mensaje,$cabeceras);
} else {
echo '<script>alert("No eres un humano!!");</script>';
}
El problema es que el console.log del serialize me muestra esto.
Código:
Pero el $_POST['g-recaptcha-response'] me sale vacio, asique no consulta y da el error de "Introduzca el captcha".nombre=&mail=neo%40neo.com&telf=&asunto=&mensaje=&g-recaptcha-response=03AHJ_VuvodDwdjTroGPMSdUuySUTETzqfwyEUqKYpl_oXO0bz_6CFU8OPNk9tJGsovIZ
Alguna idea.
Gracias.