Publicidad

Instalar recaptcha en un formulario en PHP


Por Alex el 05/09/2023, Comentar el artículo

Comparte este artículo:      




Recaptcha es una opción muy útil para integrar en los formularios para que no envíen spam y así poder tener nuestros formularios de contacto o comentarios limpios. Instalarlo es muy sencillo ...


Para poder instalar recaptcha en el formulario necesitas tener una cuenta de google (gmail) y acceder a la url https://www.google.com/recaptcha, una vez en esta url ir arriba al derecha donde pone v3 Admin Console

Link a Admin Console V3

Una vez dentro, en la parte derecha otra vez pulsamos el botón +

Admin Console V3 añadir dominio

Y aparece un panel donde rellenar los datos del dominio a proteger con recaptcha

Admin Console V3 añadir dominio - arenols.com

En mi caso el dominio es arenols.com, mi dominio personal con información sobre mis servicios como freelance. Y elijo la segunda opción “Prueba (v2)” con la casilla de verificación “No soy un robot” y saldrá en el formulario algo similar a esto:

Admin Console V3 añadir dominio - recaptcha no soy robot

Si necesitas mas ayuda sobre recaptcha puedes revisar la ayuda https://developers.google.com/recaptcha/intro?hl=es-419

Una vez puestos los datos pulsar enviar y aparecerá una ventana con las claves a utilizar en tu código.

Admin Console V3 añadir dominio - obtención de claves

El primer código es para poner en el HTML y el segundo en el PHP, puedes obtener mas información en la ayuda:


Y una vez hecho esto podemos ir a la configuración o a las estadísticas, que aunque ponga Analitics no es el portal de analitics de google sino estadísticas de uso de recaptcha.

Ahora toca programarlo en el formulario utilizando las claves que hemos generado.

En el formulario hay que poner al principio el siguiente código, yo lo pongo antes de la etiqueta form

<script src='https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer'><</script>


Y al final del formulario, antes de la etiqueta input type=submit este otro código.

<div id=recap class="g-recaptcha" data-sitekey="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"></div>


El código del campo data-sitekey es el que antes hemos obtenido en el proceso anterior y es el que pone clave de sitio web

Ahora vamos al código PHP y lo primero que tenemos que hacer es comprobar si el pros

if ( isset( $_POST['g-recaptcha-response']) && !empty( $_POST['g-recaptcha-response']))
{

      $curl = new \APP\Libraries\CurlClass();

      $recaptcha = $data_post['g-recaptcha-response'];

      $google_url = "https://www.google.com/recaptcha/api/siteverify";
      $secret = 'SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSs';
      $ip = $_SERVER['REMOTE_ADDR'];
      $data_curl['url'] = $google_url."?secret=".$secret."&response=".$recaptcha."&remoteip=".$ip;

      # Con una clase para enviar peticiones CURL podemos comprobar si captcha funciona
      $res = $curl->Curl( $data_curl);

      $res_data =  json_decode( $res['data']);


      if ( $res_data->success)
      {
					# Cosas a hacer porque todo ha ido bien. Enviar mail, guardar en base de datos
      }
      else
      {
          # Cosas a hacer si ha ido mal
      }

}


Si no tenéis una función que envié peticiones Curl puedes copiar esta:

public static function Curl( $data)
  {

    $curl = curl_init();

    curl_setopt($curl, CURLOPT_URL, $data['url']);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_TIMEOUT, 10);
    curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16");

    if ( isset( $data['username']))
    {
      curl_setopt($curl, CURLOPT_USERPWD, $data['username'] . ":" . $data['password']);
    }

    if ( isset(  $data['post']))
    {
      curl_setopt($curl, CURLOPT_POSTFIELDS, $data['post']);
    }
    

    $curlData = curl_exec($curl);
    $info = curl_getinfo($curl);
    $error = curl_error($curl);

    curl_close($curl);

    return ( [ 
        'data' => $curlData,
        'info' => $info,
        'error' => $error,
      ]
    );

  }


Esta función recibe un array con los datos para enviar peticiones Curl pero solo es necesaria la URL donde conectarse.

Y esto es todo, feliz programming
Saludos
Alex
/

Si te ha gustado el artículo compartelo en:      




Añadir un comentarios:

Nombre:
Email: (no se publica el email)




SIGUENOS EN

ARCHIVO

Publicidad

.