Foros del Web » Creando para Internet » Sistemas de gestión de contenidos » WordPress »

[SOLUCIONADO] como validar reCaptcha en custom un form?

Estas en el tema de como validar reCaptcha en custom un form? en el foro de WordPress en Foros del Web. Muy buenas a todos. Pues llevo todo el día intentando validar el recaptcha de google en wordpress. Estoy creando un formulario de registro nuevo, para ...
  #1 (permalink)  
Antiguo 05/11/2016, 15:08
 
Fecha de Ingreso: enero-2016
Mensajes: 19
Antigüedad: 8 años, 10 meses
Puntos: 0
como validar reCaptcha en custom un form?

Muy buenas a todos.

Pues llevo todo el día intentando validar el recaptcha de google en wordpress.

Estoy creando un formulario de registro nuevo, para que los usuarios puedan registrase desde el frontend a través de ajax, y hasta aqui parece que todo bien.El Problema viene cuando le e metido el reCatchap, el cual funciona perfectamente pero, me falta validarlo a traves del servidor para que no se pueda enviar el formulario hasta que se maruqe el recaptcha.

esto es lo que tengo.

En el function:

Código PHP:
<?php 
    
function st_handle_registration(){
 
if( 
$_POST['action'] == 'register_action' ) {
 
$error '';
 
 
$uname trim$_POST['username'] );
 
$email trim$_POST['mail_id'] );
 
$pswrd $_POST['passwrd'];
 
$cptcha trim($_POST['captcha'] );
 
 
if( empty( 
$_POST['username'] ) )
 
$error .= '<p class="error">Introduce un nombre de usuario</p>';
  
 
 
if( empty( 
$_POST['mail_id'] ) )
 
$error .= '<p class="error">Introduce un email</p>';
 elseif( !
filter_var($emailFILTER_VALIDATE_EMAIL) )
 
$error .= '<p class="error">El email es incorrecto</p>';
 
if( empty( 
$_POST['passwrd'] ) )
 
$error .= '<p class="error">La contraseña no puede estar en blanco</p>';
  elseif (!
preg_match('/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/'$_POST['passwrd'])) 
  
$error .= '<p class="error">La contraseña requiere al menos una mayúscula, una minúscula, un número o carácter especial y mínimo 8 caracteres</p>';
 
   if( empty( 
$_POST['captcha'] ) )

 
$error .= '<p class="error">Introduce captcha</p>';
 
if( empty( 
$error ) ){
 
$status wp_create_user$uname$pswrd ,$email$cptcha );
 
if( 
is_wp_error($status) ){
 
$msg '';
 
 foreach( 
$status->errors as $key=>$val ){
 
 foreach( 
$val as $k=>$v ){
 
 
$msg '<p class="error">'.$v.'</p>';
 }
 }
 
echo 
$msg;
 
 }else{
 
$msg '<p class="success">Registro completado</p>';
 
 echo 
$msg;
 }
 
}
 else{
 
echo 
$error;
 }
 die(
1);
 }
}
add_action'wp_ajax_register_action''st_handle_registration' );
add_action'wp_ajax_nopriv_register_action''st_handle_registration' );


 
    
?>
    
    
<?php     
    
function st_ajaxurl(){ ?>
 
<script>
 
var ajaxurl = '<?php echo admin_url('admin-ajax.php'?>';
 
</script>
 <?php 
}
add_action('wp_head','st_ajaxurl');

?>
como veis, estoy intentando validarlo de la misma forma que ls otros campo, (usuario,contraseña, email) pero lógicamente no me funciona, pues el recaptcha seria mas como un checkbox no un input tipo text.
Entonces mi pregunta es, como seria la forma de hacerlo?

Esto donde quiero que aparezca:
Código HTML:
<form method="post" name="st-register-form">
 
 <div class="form-label"><label for="st-username"></label></div>
 <div class="field"><input type="text" placeholder="Usuario" autocomplete="off" name="username" id="st-username" /></div>
 

 
<div class="form-label"><label for="st-psw"></label></div>
 <div class="field"><input type="password" placeholder="Contraseña"  name="password" id="st-psw" /></div>
 
 <div class="form-label"><label for="st-email"></label></div>
 <div class="field"><input type="text" placeholder="E-mail"  autocomplete="off" name="mail" id="st-email" /></div>

<div for="st-captcha" class="g-recaptcha" name="captcha" data-sitekey="CLAVE"></div>
 


<div class="frm-button"><input type="button" id="register-me" value="Register" /></div>
 <div id="error-message"></div>
  <div class="indicator">loading...</div>
</form> 
  #2 (permalink)  
Antiguo 06/11/2016, 01:54
Avatar de franciscomarin  
Fecha de Ingreso: junio-2009
Ubicación: Terrassa, BCN, CAT
Mensajes: 2.414
Antigüedad: 15 años, 4 meses
Puntos: 327
Respuesta: como validar reCaptcha en custom un form?

Cita:
2.7 Los usuarios no pueden revivir o reactivar temas publicando información inútil o sin sentido, o llevando a cabo cualquier otra acción para deliberadamente mantener arriba en el índice del foro dicho tema o aumentar el contador de mensajes.
  #3 (permalink)  
Antiguo 06/11/2016, 03:21
 
Fecha de Ingreso: enero-2016
Mensajes: 19
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: como validar reCaptcha en custom un form?

Código PHP:
<form id="contact-form" name="contact-form" action="<?php echo get_permalink();?>#contact-form" method="post">
  <?php //Comprobamos si el formulario ha sido enviado
  
if (isset( $_POST['btn-submit'] )) {
    
//Creamos una variable para almacenar los errores
    
global $reg_errors;
    
$reg_errors = new WP_Error;
 
    
//Recogemos en variables los datos enviados en el formulario y los sanitizamos.
    //Si detectamos algún error, podremos más abajo rellenar los campos del formulario con los datos enviados para no tener que empezar el formulario de cero
    
$f_name sanitize_text_field($_POST['f_name']);
 
    
//El campo Nombre es obligatorio, comprobamos que no esté vacío y en caso contrario creamos un registro de error
    
if ( empty( $f_name ) ) {
      
$reg_errors->add("empty-name""El campo nombre es obligatorio");
    }
    
//Comprobamos el recaptcha
    
$response wp_remote_post"https://www.google.com/recaptcha/api/siteverify", array(
      
'method' => 'POST',
      
'timeout' => 45,
      
'redirection' => 5,
      
'httpversion' => '1.0',
      
'blocking' => true,
      
'headers' => array(),
      
'body' => array(
        
'secret' => "tu-clave-secreta",
        
'response' => esc_attr($_POST['g-recaptcha-response'])),
      
'cookies' => array()
      )
    );
 
    
//Comprobamos si tenemos algún tipo de error en la conexión con google
    
if ( is_wp_error$response ) ) {
      
$reg_errors->add"invalid-captcha""Se ha producido un error comprobando el captcha" );
    } else {
      
//Si hemos conectado correctamente con google, comprobamos si la respuesta es true o false
      
$g_response json_decode($response["body"]);
      if (
$g_response->success == false) {
        
$reg_errors->add"invalid-captcha""Se ha producido un error comprobando el captcha" );
      }
    }
  }
?>
 
  <div class="form-group">
    <label for="f_name">Nombre <span class="asterisk">*</span></label>
    <input type="text" id="f_name" name="f_name" class="form-control" value="<?php echo $f_name;?>" placeholder="Introduce tu nombre" required aria-required="true">
 
    <?php //Comprobamos si hay errores en la validación del campo Nombre
    
if ( is_wp_error$reg_errors ) ) {
      if (
$reg_errors->get_error_message("empty-name")) {?>
      <br class="clearfix" />
      <div class="alert alert-danger alert-dismissable">
        <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
        <p><?php echo $reg_errors->get_error_message("empty-name");?></p>
      </div>
      <?php }
    }
?>
  </div>
 
  <div class="form-group">
    <div class="g-recaptcha" data-sitekey="tu-clave-del-stio"></div>
  </div>
 
  <button type="submit" id="btn-submit" name="btn-submit" class="btn btn-default">Enviar consulta</button>
</form>
De esta forma se puede validar, según he leído, pero no se como adaptarlo a mi código, me ayuda alguien?
  #4 (permalink)  
Antiguo 06/11/2016, 05:30
 
Fecha de Ingreso: enero-2016
Mensajes: 19
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: como validar reCaptcha en custom un form?

esta es otra forma pero tampoco consigo adaptarlo, por favor llevo días con esto.

Código PHP:
if ($_POST["g-recaptcha-response"]) {
$resp $reCaptcha->verifyResponse(
                
$_SERVER["REMOTE_ADDR"],
                
$_POST["g-recaptcha-response"]
            );
} else {
            
$validated false;
            
$errors['recaptcha'] = __("The reCAPTCHA code is incorrect. Please try again."'theme_domain');       

  #5 (permalink)  
Antiguo 06/11/2016, 18:08
 
Fecha de Ingreso: enero-2014
Mensajes: 101
Antigüedad: 10 años, 10 meses
Puntos: 7
Respuesta: como validar reCaptcha en custom un form?

Saludos.

https://developers.google.com/recaptcha/intro

Etiquetas: custom, php, recaptcha, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:05.