> Faqs > Cómo instalo recaptcha v2 en PHP

Cómo instalo recaptcha v2 en PHP

Estoy intentando integrar recaptcha a mi sitio web ya obtuve las key´s publica y secreta, he consultado en la web y he encontrado varias paginas pero no me queda claro y no he podido integrarlas.

Adjunto codigo del formulario:

<html>
    <head>
        <title>Formulario de envío con reCaptcha</title>
        <script src='https://www.google.com/recaptcha/api.js' async></script>
    </head>
    <body>
        <form action="formulario.php" method="post">
            <input name="name" placeholder="Nombre"/>
            <input name="email" placeholder="Email"/>
            <textarea placeholder="Tu mensaje" name="message"></textarea>
            <div class="g-recaptcha" data-sitekey="**********************************"></div>
            <button type="submit" name="submit">Enviar</button>
        </form>
        
    </body>
</html>

Para la verificación del captcha de Google (reCaptcha) estoy basándome en una librería que el propio Google ofrece desde GitHub. Es una clase llamada ReCaptcha, cuyo código se encuentra en esta ruta:

https://github.com/google/recaptcha/blob/1.0.0/php/recaptchalib.php

Este es el código de PHP que uso para verificar la captcha:

$secret = "*****************************************";
$resp = null;

$reCaptcha = new $reCaptcha($secret);

$resp = $reCaptcha->verfyResponse(
	$_SERVER["REMOTE_ADDR"],
	$_POST["g-recaptcha-response"]
);

if ($response->success && $resp !=NULL) {	
	echo "soy humano";
}else{
	echo "soy robot";
}

El error que estoy recibiendo es el siguiente:

Fatal error: Uncaught Error: Class name must be a valid object or a string in ...................../formulario.php:7 Stack trace: #0 {main}thrown in ..................formulario.php on line 7 

GRACIAS

Respuestas

Antes que nada, para cualquier interesado en Reaptcha dejo el enlace del artículo de Integrar reCaptcha en páginas PHP... y también para el framework Laravel.

En todo caso, ya para responder tu pregunta, creo que el único problema en tu código es que has colocado el nombre de la clase con un "$" delante.

Cambia esto:

$reCaptcha = new $reCaptcha($secret);

Por esto otro:

$reCaptcha = new reCaptcha($secret);

Estos códigos que pongo a continuación funcionan bien.

  1. Para la parte del HTML
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <script src='https://www.google.com/recaptcha/api.js' async></script>
  <title>Document</title>
</head>
<body>

  <form action="recaptcha-test.php" method="post">
      <input name="name" placeholder="Nombre"/>
      <input name="email" placeholder="Email"/>
      <textarea placeholder="Tu mensaje" name="message"></textarea>
      <div class="g-recaptcha" data-sitekey="***KEY PARA EL SITIO WEB***"></div>
      <button type="submit" name="submit">Enviar</button>
  </form>
 </body>
 </html>
  1. Para la verificación de PHP.

Importante: Tienes que hacer el include de la librería de reCaptcha, de modo que esté disponible la clase ReCaptcha. Esa parte lo lógico sería hacerlo con Composer, y usar el sistema de autoload, pero ahí depende de tu proyecto. Puedes también copiar y pegar el código de la clase.

Luego, el código de verificación es este:

$secret = "***KEY SECRETA***";
$reCaptcha = new ReCaptcha($secret);

// Inicializar a null la respuesta de reCAPTCHA
$resp = null;

// Se ha recibido una respuesta de la captcha?
if ($_POST["g-recaptcha-response"]) {
    $resp = $reCaptcha->verifyResponse(
        $_SERVER["REMOTE_ADDR"],
        $_POST["g-recaptcha-response"]
    );
}


if ($resp != null && $resp->success) {
    echo "La respuesta del captcha positiva, no eres un robot!!";
} else {
    echo "No hemos recibido una respuesta positiva del captcha";
}
Miguel Angel
3145 140 209 17