Validacion de Captcha Google

2,233 views
Skip to first unread message

Nicolas Ezequiel Almonacid

unread,
Dec 8, 2015, 9:23:02 PM12/8/15
to Programando Ando
Hola amigos gusto de saludarlos, queria ver si alguien me hecha una ayudadita, necesito validar el reCAPTCHA de google (el de no soy robot y que hace seleccionar imagenes) con el codigo que tengo me llega bien al email, pero creo que no esta funcionando la validacion porque intente enviar el formulario sin seleccionar el captcha y lo envia igual, o sea no me muestra nada si envio el form sin seleccionar el captcha cuando lo logico es que si el captcha no es valido me muestre un mensaje o algo y no envie el formulario...

Mi codigo php que uso para procesar el form es este:

<?php

//reCAPTCHA GOOGLE
require_once '../script/ReCaptcha/ReCaptcha.php';
require_once
'../script/ReCaptcha/RequestMethod.php';
require_once
'../script/ReCaptcha/RequestParameters.php';
require_once
'../script/ReCaptcha/Response.php';
require_once
'../script/ReCaptcha/RequestMethod/Curl.php';
require_once
'../script/ReCaptcha/RequestMethod/CurlPost.php';
require_once
'../script/ReCaptcha/RequestMethod/Post.php';
require_once
'../script/ReCaptcha/RequestMethod/Socket.php';
require_once
'../script/ReCaptcha/RequestMethod/SocketPost.php';



if(
$_POST['Enviar']){
   
$nombre=$_POST["nombre"]; //Input Nombre
   
$apellido=$_POST["apellido"]; //input apellido
   
$telefono=$_POST["fono"]; // input fono
   
$direccion=$_POST["direccion"]; // input direccion
   
$correo=$_POST["email"]; // input direccion
   
$asunto=$_POST["asunto"]; // select asunto
   
$contenido=$_POST["comentario"]; //textarea mensaje
   
$recaptcha = new ReCaptchaReCaptcha("6Ld58P4SAAAAAC9pu3NFIKz9Lc8JVfqn0SfvEclq");
   
$respuesta = $recaptcha->verify($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']);
   
if(
$respuesta->isSuccess()){
       
//si esta ok post, Recogemos las variables desde el formulario
         
         
       
//Validamos que no hay campos vacios
       
if(empty($_POST["nombre"])){
            echo
"Debe Ingresar su Nombre";
       
} else if (empty(
$_POST["apellido"])){
            echo
"Debe Ingresar su Apellido";
       
} else if(empty(
$_POST["fono"])){
            echo
"Debe Ingresar Telefono";
       
} else if(empty(
$_POST["direccion"])){
            echo
"Debe Ingresar su Dirección";
       
} else if(empty(
$_POST["email"])){
            echo
"No ha ingresado email";
       
} else if (empty(
$_POST["asunto"])){
            echo
"Debe Seleccionar Asunto";
       
} else if (empty(
$_POST["mensaje"])){
            echo
"Debe Escribir su Mensaje/Consulta";
       
} else{
           
//Si pasó validaciones ejecutar la funcion enviar_correo
           
envia_correo();
       
}
       
exit;
   
}else{
       echo
'No ha seleccionado el Captcha de Seguridad';
       
foreach (
$respuesta->getErrorCodes() as $error_code) {
           echo
'<tt>' . $error_code . '</tt> ';
       
}
       
exit;
   
}
}

function
envia_correo(){
     
   
//Variables
   
$correo_destino='nimakinf...@gmail.com'; //Correo al que se enviara el formulario
   
$nombre=$_POST["nombre"]; //Input Nombre
   
$apellido=$_POST["apellido"]; //input apellido
   
$telefono=$_POST["fono"]; // input fono
   
$direccion=$_POST["direccion"]; // input direccion
   
$correo=$_POST["email"]; // input direccion
   
$asunto=$_POST["asunto"]; // select asunto
   
$contenido=$_POST["comentario"]; //textarea mensaje
     
   
//Creacion de Mensaje a enviar al Email
   
$mensaje="
        Mensaje enviado desde Formulario de Contacto Web Dekoplus:
         
        Asunto del Mensaje: $asunto  
         
        Enviado por: $nombre $apellido
         
        Telefono: $telefono
         
        Dirección: $correo
         
        Dirección: $direccion
         
        Mensaje: $contenido  
    "
;
     
   
//Confirmación de Envio
   
if(mail($correo_destino,"Formulario Contacto Dekoplus","$mensaje")){
               
//si se cumple
               
echo "<div class='alert alert-success alert-dismissable'>
                      <button type='button' class='close' data-dismiss='alert'>&times;</button>
                      <p class='principal'><strong>¡GRACIAS POR CONTACTARNOS!</strong>
                      Su mensaje ha sido enviado con exito..Le responderemos a la brevedad posible.</p>
                      </div>"
;
                     
//Redireccionamos al index            
           
}else{
               
//si falla el envio
               
echo "<div class='alert alert-danger alert-dismissable'>
                      <button type='button' class='close' data-dismiss='alert'>&times;</button>
                      <p class='principal'><strong>ERROR:</strong>
                      No hemos Podido Enviar Su Mensaje..Intente mas tarde.</p>
                      </div>"
;
           
}
     
}

?>

y el .js que uso para validar:

$("#formulario_contacto").validate({
       
/*Declaramos las reglas de validacion
                *Reglas:
                *required:true -> Campo Requerido
                *maxlength:2 -> Maximo de Caracteres (Se debe crear el mensaje en 'messages')
                *minlength:2 -> Minimo de Caracteres (Se debe crear el mensaje en 'messages')
                *
                */

        debug
: false,
        rules
:{
                        nombre
:{required:true},//validacion para el input nombre
            apellido
:{required:true},
                        fono
:{required:true},//validacion para el input telefono
            direccion
:{required:true},//validacion para el input direccion
                        email
:{required:true, email:true},//validacion para el input email
                        asunto
:{required:true},//validacion para el Select Asunto
                        comentario
:{required:true},//validacion para el input comentario
                       
               
},

        messages
:{
                        nombre
:{ required:"Debe Ingresar su Nombre"},//Mensaje para el input nombre
            apellido
:{required:"Debe ingresar su Apellido"},
                        fono
:{ required:"Debe Ingresar Numero Telefonico"},//Mensaje para el input Telefono
            direccion
: {required:"Debe ingresar su dirección"},
                        email
:{ required:"Debe Ingresar Email", email:"Email no Valido"},//Mensaje para el input email
                        asunto
:{ required:"Debe Seleccionar Asunto"},//Mensaje para el Select Asunto
                        comentario
:{ required:"Debe Ingresar Comentario o Consulta"},//Mensaje para el input comentario
                       
               
},

submitHandler
: function(form) {
// do other stuff for a valid form
$
.post('../script/formContacto.php', $("#formulario_contacto").serialize(),
function(data) {
       
$
('#resultado').html(data);
$
('#resultado').fadeOut(10000); /*CIERRE AUTOMATICO DE VENTANA*/

});
$
("#formulario_contacto")[0].reset(); //Resetea el Formulario
}
       
       
   
});


Gracias desde ya a todos por su colaboracion y su tiempo

Jonathan Morales Salazar

unread,
Dec 9, 2015, 7:52:51 AM12/9/15
to programa...@googlegroups.com
No he trabajado el recaptcha de esa forma pero me imagino que genera un campo con un nombre fijo, ¿ya probó agregar ese campo a las reglas de validación que tiene?

--
--
Publicar: programa...@googlegroups.com
Anular suscripción: programando-an...@googlegroups.com
Webs: http://www.blonder413.com/ - http://www.cesarcancino.com/ - http://www.oscar-gomez.net/ - http://www.keyphercom.com/blog/

---
Has recibido este mensaje porque estás suscrito al grupo "Programando Ando" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a programando-an...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--


Jonathan Morales Salazar
Ingeniero de Sistemas
www.blonder413.com

Undefined Or Null

unread,
Dec 9, 2015, 8:15:23 PM12/9/15
to programa...@googlegroups.com
Hola.

Dos cosas.

Primera Cosa
if
(
$_POST['Enviar']){  // valida que ese variable tenga el dato que requieres.

if(isset($_POST['Enviar']) && $_POST['Enviar'] == "ALGOO"){

Segunda cosa.

Aqui estas creando la recaptcha, deberias comprobar que tipo de respuesta trae el metodo "isSuccess"

$recaptcha = new ReCaptchaReCaptcha("6Ld58P4SAAAAAC9pu3NFIKz9Lc8JVfqn0SfvEclq");
   
$respuesta = $recaptcha->verify($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']);
   
if(
$respuesta->isSuccess()){
Yo en tu caso haria lo siguiente. solo por probar.


if(!$respuesta->isSuccess()){ echo "Error"; }else{ echo "Bien";}

Si aun asi sigue molestando. Te sugiero que mires la variables
$_POST['g-recaptcha-response'];
verifica que realmente este llegando.


var_dump($_POST); y pon en comentario todo el codigo que tengas, asi compruebas que este llegando realmente.


Saludos. Hazle siempre un seguimiento minusioso a tu codigo, siempre el problema esta en los nombres de las variables.  bueno casi siempre



Nicolas Ezequiel Almonacid

unread,
Dec 10, 2015, 8:11:30 PM12/10/15
to Programando Ando
muchas gracias amigos con incluir el mensaje en el js ahora si muestra la advertencia cuando no esta el captcha valido, ademas de enviar correctamente cuando el captcha es valido....gracias por sus consejos creo que esta funcionando ok el tema...
...
Reply all
Reply to author
Forward
Message has been deleted
Message has been deleted
0 new messages