Regresar a la página ComoCrearTuWeb.com
Resultados 1 al 10 de 10

Tema: ReCaptcha

  1. #1
    Me va gustando esto... Habitante
    Fecha de Ingreso
    26 jul, 13
    Mensajes
    116
    Poder de Reputación
    12

    Exclamation Problema con código ReCaptcha

    Buenas a todos:

    Tengo el siguiente código ReCaptcha:

    Código:
    <?php
    
      require_once('recaptchalib.php');
    	
    	$publickey ="6L...";
            $privatekey = "6L...";
    	
    	# the response from reCAPTCHA
    	$resp = null;
    	# the error code from reCAPTCHA, if any
    	$error = null;
    	
    	# was there a reCAPTCHA response?
            $resp = recaptcha_check_answer ($privatekey,
    			                         $_SERVER["REMOTE_ADDR"],
    	 					 $_POST["recaptcha_challenge_field"],
    	  					 $_POST["recaptcha_response_field"]);
    
      if ( $resp -> is_valid) {
    		 print 'Correto';
    	}
    	else {
    	         print 'Errado';
    	}
     ?>
    Con el siguiente formulario:

    Código HTML:
    <head>
        <script src='https://www.google.com/recaptcha/api.js'></script>
    </head>
    
    <body>
        <form action="enviar.php" method="POST" name="contacto">
    
                  <p>Nome:</p> <p><input type="text" name="nombre" value="" placeholder="Nome"/></p>
    
                  <p>Empresa:</p> <p><input type="text" name="empresa" value="" placeholder="empresa"/></p>
    
                  <p>CPF ou CNPJ:</p> <p>
                                      
                                      <select placeholder="Escolha uma opção:" id="selecion">
                                        <option value="cpf">CPF</option>
                                        <option value="cnpj">CNPJ</option>
                                      </select>
    
                                      <input type="text" name="select" placeholder="CPF ou CNPJ" onmouseover="tipo()" maxlength="14">
    
                                      </p>
    
                  <p>E-Mail:</p> <p><input type="text" name="email" value="" placeholder="E-Mail"/></p>
    
                  <p>Mensagem:</p> <p><textarea rows="8" cols="50" name="mensaje" placeholder="Mensagem"></textarea></p>
    							
    							<?php
              				 require_once('recaptchalib.php');
              				 $publickey = "6L..."; // you got this from the signup page
              				 echo recaptcha_get_html($publickey);
            			?>
    
                  <div class="g-recaptcha" data-sitekey="6L..."></div>
    
              <input type="submit" name="envio" value="Enviar" class="button"/>
    
            </form>
    </body>
    No se que estara mal, pero cada vez que comprueba el captcha solo me imprime el mensaje de "Errado", este el código captcha bien o mal.

    Aclarar que este código es colo para verificar el captcha, y si logro que alguien me ayude a solucionarlo ya tengo el código para enviar el correo listo.

    Muchas gracias de antemano.

    P.D: Los nombres que tengo en los archivos son: contacto.html y enviar.php
    Última edición por alex222en; 14/02/2015 a las 02:29 Razón: Detalle olvidado.

  2. #2
    Me va gustando esto... Habitante
    Fecha de Ingreso
    26 jul, 13
    Mensajes
    116
    Poder de Reputación
    12
    Buenas:

    e mirado varios códigos aqui por el foro, entiendo´gran parte del php que tengo pero sigo sin poder dar con la solucion. Espero que alguien me de una respuesta porque es algo urgente y ya no se que hacer.

  3. #3
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    02 may, 11
    Ubicación
    Santiago, Chile
    Mensajes
    2,046
    Poder de Reputación
    27
    Hola,

    ¿Tienes las claves privadas y públicas del CAPTCHA de Google? Si las tienes, ¿las escribiste donde corresponde ($pirvateKey y $publicKey)?

    Añade lo siguiente al comienzo del archivo PHP:

    Código PHP:
    error_reporting (E_ALL); 
    Luego publica cualquier error que pueda aparecer.

    También publica cualquier error que aparezca en la consola de errores del navegador.

  4. #4
    Me va gustando esto... Habitante
    Fecha de Ingreso
    26 jul, 13
    Mensajes
    116
    Poder de Reputación
    12
    Buenas skaparate:

    coloque el código que me dijiste al comienzo del PHP, me salto dos errores de que no tengo definido "recaptcha_challenge_field". Copio y pego los dos errores.

    Errores:

    Notice: Undefined index: recaptcha_challenge_field in /home/irbanane/public_html/gruascopa.com.br/contato/enviar.php on line 17

    Notice: Undefined index: recaptcha_response_field in /home/irbanane/public_html/gruascopa.com.br/contato/enviar.php on line 18

    En la siguiente imagen esta como me aparece el captcha. Sin verificar para verificar y despues de verificado.

    captcha.jpg
    Última edición por alex222en; 16/02/2015 a las 14:24 Razón: Añadiendo archivo

  5. #5
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    02 may, 11
    Ubicación
    Santiago, Chile
    Mensajes
    2,046
    Poder de Reputación
    27
    Hmmm, no sé que librería estas usando, pero te recomiendo utilizar esta:

    recaptchalib.php
    Código PHP:
    <?php
    /**
     * This is a PHP library that handles calling reCAPTCHA.
     *    - Documentation and latest version
     *          https://developers.google.com/recaptcha/docs/php
     *    - Get a reCAPTCHA API Key
     *          https://www.google.com/recaptcha/admin/create
     *    - Discussion group
     *          http://groups.google.com/group/recaptcha
     *
     * @copyright Copyright (c) 2014, Google Inc.
     * @link      http://www.google.com/recaptcha
     *
     * Permission is hereby granted, free of charge, to any person obtaining a copy
     * of this software and associated documentation files (the "Software"), to deal
     * in the Software without restriction, including without limitation the rights
     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     * copies of the Software, and to permit persons to whom the Software is
     * furnished to do so, subject to the following conditions:
     *
     * The above copyright notice and this permission notice shall be included in
     * all copies or substantial portions of the Software.
     *
     * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
     * THE SOFTWARE.
     */
    /**
     * A ReCaptchaResponse is returned from checkAnswer().
     */
    class ReCaptchaResponse
    {
        public 
    $success;
        public 
    $errorCodes;
    }

    class 
    ReCaptcha
    {
        private static 
    $_signupUrl "https://www.google.com/recaptcha/admin";
        private static 
    $_siteVerifyUrl =
            
    "https://www.google.com/recaptcha/api/siteverify?";
        private 
    $_secret;
        private static 
    $_version "php_1.0";

        
    /**
         * Constructor.
         *
         * @param string $secret shared secret between site and ReCAPTCHA server.
         */
        
    function ReCaptcha($secret)
        {
            if (
    $secret == null || $secret == "") {
                die(
    "To use reCAPTCHA you must get an API key from <a href='"
                    
    self::$_signupUrl "'>" self::$_signupUrl "</a>");
            }
            
    $this->_secret=$secret;
        }

        
    /**
         * Encodes the given data into a query string format.
         *
         * @param array $data array of string elements to be encoded.
         *
         * @return string - encoded request.
         */
        
    private function _encodeQS($data)
        {
            
    $req "";
            foreach (
    $data as $key => $value) {
                
    $req .= $key '=' urlencode(stripslashes($value)) . '&';
            }

            
    // Cut the last '&'
            
    $req=substr($req0strlen($req)-1);
            return 
    $req;
        }

        
    /**
         * Submits an HTTP GET to a reCAPTCHA server.
         *
         * @param string $path url path to recaptcha server.
         * @param array  $data array of parameters to be sent.
         *
         * @return array response
         */
        
    private function _submitHTTPGet($path$data)
        {
            
    $req $this->_encodeQS($data);
            
    $response file_get_contents($path $req);
            return 
    $response;
        }

        
    /**
         * Calls the reCAPTCHA siteverify API to verify whether the user passes
         * CAPTCHA test.
         *
         * @param string $remoteIp   IP address of end user.
         * @param string $response   response string from recaptcha verification.
         *
         * @return ReCaptchaResponse
         */
        
    public function verifyResponse($remoteIp$response)
        {
            
    // Discard empty solution submissions
            
    if ($response == null || strlen($response) == 0) {
                
    $recaptchaResponse = new ReCaptchaResponse();
                
    $recaptchaResponse->success false;
                
    $recaptchaResponse->errorCodes 'missing-input';
                return 
    $recaptchaResponse;
            }

            
    $getResponse $this->_submitHttpGet(
                
    self::$_siteVerifyUrl,
                array (
                    
    'secret' => $this->_secret,
                    
    'remoteip' => $remoteIp,
                    
    'v' => self::$_version,
                    
    'response' => $response
                
    )
            );
            
    $answers json_decode($getResponsetrue);
            
    $recaptchaResponse = new ReCaptchaResponse();

            if (
    trim($answers ['success']) == true) {
                
    $recaptchaResponse->success true;
            } else {
                
    $recaptchaResponse->success false;
                
    $recaptchaResponse->errorCodes $answers [error-codes];
            }

            return 
    $recaptchaResponse;
        }
    }
    ?>
    Tu nuevo código HTML:

    Código HTML:
    <head>
        <script src='https://www.google.com/recaptcha/api.js'></script>
    </head>
    
    <body>
        <form action="enviar.php" method="POST" name="contacto">
    
                  <p>Nome:</p> <p><input type="text" name="nombre" value="" placeholder="Nome"/></p>
    
                  <p>Empresa:</p> <p><input type="text" name="empresa" value="" placeholder="empresa"/></p>
    
                  <p>CPF ou CNPJ:</p> <p>
                                      
                                      <select placeholder="Escolha uma opção:" id="selecion">
                                        <option value="cpf">CPF</option>
                                        <option value="cnpj">CNPJ</option>
                                      </select>
    
                                      <input type="text" name="select" placeholder="CPF ou CNPJ" onmouseover="tipo()" maxlength="14">
    
                                      </p>
    
                  <p>E-Mail:</p> <p><input type="text" name="email" value="" placeholder="E-Mail"/></p>
    
                  <p>Mensagem:</p> <p><textarea rows="8" cols="50" name="mensaje" placeholder="Mensagem"></textarea></p>
    
                  <div class="g-recaptcha" data-sitekey="6L..."></div>
    
              <input type="submit" name="envio" value="Enviar" class="button"/>
    
            </form>
    </body>
    Y tu nuevo archivo enviar.php:

    Código PHP:
    <?php

      
    include_once 'recaptchalib.php';
        
      
    $test = new Recaptcha ('clave_privada');
      
    $response $test->verifyResponse ($_SERVER['REMOTE_ADDR'], $_POST['g-recaptcha-response']);

      if (!
    $response->success)
      {
        echo 
    '<p style="color: red">Ocurrió un error:</p>';
        
    var_dump ($response->errorCodes);
      }
      else
      {
        echo 
    '<p style="color: green">Verificado!</p>';
        
    // ahora puedes enviar el mail.
      
    }
     
    ?>
    Yo lo probé y funciona :)... de hecho, aquí hay un código funcionando (no es necesario llenar el formulario :P): http://nicomv.com/
    Última edición por skaparate; 06/05/2015 a las 20:48

  6. #6
    Me va gustando esto... Habitante
    Fecha de Ingreso
    26 jul, 13
    Mensajes
    116
    Poder de Reputación
    12
    Muchas gracias de verdad. Ya lo he implementado en la página y funciona correctamente. Te doy mil gracias a ti y a este foro por haberme ayudado tanto hasta ahora.
    Última edición por alex222en; 16/02/2015 a las 16:53

  7. #7
    Recien Llegado! Merodeador Avatar de Cammi
    Fecha de Ingreso
    16 feb, 15
    Mensajes
    7
    Poder de Reputación
    0
    Wow, de verdad que sí. Muchas gracias a los foreros por su ayuda y qué afortunados son de tener tanto talento!

  8. #8
    Me va gustando esto... Habitante
    Fecha de Ingreso
    26 jul, 13
    Mensajes
    116
    Poder de Reputación
    12
    Buenas, siento reavivar este tema por burricie mia. La clave privada del g-recaptcha la tengo que colocar dentro del documento.php donde haga la verificacion del captcha verdad? despues simplemente la clave publica he de cambiarla en el div situado al final del formulario. Si me equivoco corregirme por favor.

  9. #9
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    02 may, 11
    Ubicación
    Santiago, Chile
    Mensajes
    2,046
    Poder de Reputación
    27
    Depende... si estás usando lo que yo publiqué, entonces debes ponerla dentro del constructor de la librería:

    Código PHP:
    $variable = new Recaptcha('aquí va la clave privada'); 
    Y la clave pública debe ir en el form:

    Código HTML:
    <div class="g-recaptcha" data-sitekey="6L..."></div>

  10. #10
    Recien Llegado! Merodeador
    Fecha de Ingreso
    08 sep, 19
    Mensajes
    3
    Poder de Reputación
    0
    A great exchange of information.
    192.168.l0.1

Temas Similares

  1. reCAPTCHA V2 funciona..pero se me cuelan
    Por Morgan007 en el foro Foro General
    Respuestas: 0
    Último Mensaje: 14/11/2018, 12:46
  2. Mostrar mensaje de error Recaptcha en php.
    Por mortisdj en el foro Php Bases de Datos y MySQL (Nuevo!)
    Respuestas: 0
    Último Mensaje: 27/08/2014, 11:32
  3. Donde debo colocar el código de la ReCaptcha
    Por Hormiguita en el foro Foro General
    Respuestas: 11
    Último Mensaje: 24/11/2012, 14:16

Etiquetas para este Tema

Permisos de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •