TigerZF
🌐Español

64.26. Zend_Service_ReCaptcha

64.26.1. Introducción

Zend_Service_ReCaptcha proporciona un cliente para el servicio web reCAPTCHA. Según el sitio de reCAPTCHA, "reCAPTCHA es un servicio CAPTCHA gratuito que ayuda a digitalizar libros." Cada reCAPTCHA requiere que el usuario introduzca dos palabras, la primera de las cuales es el CAPTCHA real, y la segunda es una palabra de un texto escaneado que el software de reconocimiento óptico de caracteres (OCR) no ha podido identificar. La suposición es que si un usuario introduce correctamente la primera palabra, es probable que la segunda también se haya introducido correctamente, y se puede usar para mejorar el software OCR utilizado para digitalizar libros.

Para usar el servicio reCAPTCHA, deberá registrarse para obtener una cuenta y registrar uno o más dominios con el servicio para generar claves públicas y privadas.

64.26.2. Uso más simple

Instancie un objeto Zend_Service_ReCaptcha, pasándole sus claves pública y privada:

Ejemplo 64.119. Creación de una instancia del servicio reCAPTCHA

$recaptcha = new Zend_Service_ReCaptcha($pubKey, $privKey);

Para renderizar el reCAPTCHA, simplemente llame al método getHTML():

Ejemplo 64.120. Mostrando el reCAPTCHA

echo $recaptcha->getHTML();

Cuando se envía el formulario, debería recibir dos campos, 'recaptcha_challenge_field' y 'recaptcha_response_field'. Pase estos al método verify() del objeto reCAPTCHA:

Ejemplo 64.121. Verificación de los campos del formulario

$result = $recaptcha->verify(
    $_POST['recaptcha_challenge_field'],
    $_POST['recaptcha_response_field']
);

Una vez que tenga el resultado, compruébelo para ver si es válido. El resultado es un objeto Zend_Service_ReCaptcha_Response, que proporciona un método isValid().

Ejemplo 64.122. Validación del reCAPTCHA

if (!$result->isValid()) {
    // Failed validation
}

Es incluso más sencillo usar el adaptador reCAPTCHA de Zend_Captcha, o usar ese adaptador como backend para el elemento de formulario CAPTCHA. En cada caso, los detalles del renderizado y la validación del reCAPTCHA se automatizan para usted.

64.26.3. Ocultando direcciones de correo electrónico

Zend_Service_ReCaptcha_MailHide se puede usar para ocultar direcciones de correo electrónico. Reemplazará una parte de una dirección de correo electrónico con un enlace que abre una ventana emergente con un desafío reCAPTCHA. Resolver el desafío revelará la dirección de correo electrónico completa.

Para usar este componente necesitará una cuenta para generar claves públicas y privadas para la API de mailhide.

Ejemplo 64.123. Uso del componente de ocultación de correo

// The mail address we want to hide
$mail = 'mail@example.com';

// Create an instance of the mailhide component, passing it your public
// and private keys, as well as the mail address you want to hide
$mailHide = new Zend_Service_ReCaptcha_MailHide();
$mailHide->setPublicKey($pubKey);
$mailHide->setPrivateKey($privKey);
$mailHide->setEmail($mail);

// Display it
print($mailHide);

El ejemplo anterior mostrará "m...@example.com" donde "..." tiene un enlace que abre una ventana emergente con un desafío reCAPTCHA.

La clave pública, la clave privada y la dirección de correo electrónico también se pueden especificar en el constructor de la clase. También existe un cuarto argumento que le permite establecer algunas opciones para el componente. Las opciones disponibles se listan en la siguiente tabla:

Tabla 64.19. Opciones de Zend_Service_ReCaptcha_MailHide

Opción Descripción Valores esperados Valor por defecto
linkTitle El atributo title del enlace string 'Reveal this e-mail address'
linkHiddenText El texto que incluye el enlace emergente string '...'
popupWidth El ancho de la ventana emergente int 500
popupHeight La altura de la ventana emergente int 300


Las opciones de configuración se pueden establecer enviándolas como el cuarto argumento al constructor o llamando a setOptions($options), que acepta un array asociativo o una instancia de Zend_Config.

Ejemplo 64.124. Generación de muchas direcciones de correo electrónico ocultas

// Create an instance of the mailhide component, passing it your public
// and private keys, as well as some configuration options
$mailHide = new Zend_Service_ReCaptcha_MailHide();
$mailHide->setPublicKey($pubKey);
$mailHide->setPrivateKey($privKey);
$mailHide->setOptions(array(
    'linkTitle' => 'Click me',
    'linkHiddenText' => '+++++',
));

// The mail addresses we want to hide
$mailAddresses = array(
    'mail@example.com',
    'johndoe@example.com',
    'janedoe@example.com',
);

foreach ($mailAddresses as $mail) {
    $mailHide->setEmail($mail);
    print($mailHide);
}