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.
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():
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().
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.
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);
}