Hola gente.
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>
Mi JS
Código:
$(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');
}
} );
};
});
});
y mi email.php
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:
nombre=&mail=neo%40neo.com&telf=&asunto=&mensaje=&g-recaptcha-response=03AHJ_VuvodDwdjTroGPMSdUuySUTETzqfwyEUqKYpl_oXO0bz_6CFU8OPNk9tJGsovIZ
Pero el $_POST['g-recaptcha-response'] me sale vacio, asique no consulta y da el error de "Introduzca el captcha".
Alguna idea.
Gracias.