Importante: não há mais suporte para a versão 1.0 da API reCAPTCHA. Faça upgrade para a versão 2.0. Saiba mais
A biblioteca PHP do reCAPTCHA oferece uma maneira simples de colocar um CAPTCHA no seu site PHP, o que ajuda a impedir que bots abusem dele. A biblioteca encapsula a API reCAPTCHA.
Para usar o reCAPTCHA com PHP, faça o download da biblioteca reCAPTCHA PHP. Você só precisará de um arquivo a partir desse local (recaptchalib.php). Os outros arquivos são exemplos, arquivos README e conteúdo jurídico. Eles não afetam a funcionalidade.
Início rápido
Depois de se inscrever para receber as chaves de API, confira abaixo as instruções básicas para instalar o reCAPTCHA no seu site. Um guia de referência completo para o plug-in do PHP está disponível abaixo.
Lado do cliente (como fazer a imagem do CAPTCHA aparecer)
Se você quiser usar a biblioteca PHP para exibir o widget reCAPTCHA, será necessário inserir este snippet de código dentro do elemento <form> onde o widget reCAPTCHA será colocado:
require_once('recaptchalib.php'); $publickey = "your_public_key"; // you got this from the signup page echo recaptcha_get_html($publickey);
Com o código, seu formulário pode ficar assim:
<html> <body> <!-- the body tag is required or the CAPTCHA may not show on some browsers --> <!-- your HTML content --> <form method="post" action="verify.php"> <?php require_once('recaptchalib.php'); $publickey = "your_public_key"; // you got this from the signup page echo recaptcha_get_html($publickey); ?> <input type="submit" /> </form> <!-- more of your HTML content --> </body> </html>
Não se esqueça de definir $publickey substituindo your_public_key
pela sua chave pública da API.
Observe que o valor do atributo "action" é "verify.php". Agora, "verify.php" é o arquivo de destino para onde os valores deste formulário são enviados. Portanto, você precisará de um arquivo verify.php no mesmo local que o html do cliente.
A função "require_once" no exemplo acima espera que recaptchalib.php esteja no mesmo
diretório que o arquivo de formulário. Se ele estiver em outro diretório, será preciso vinculá-lo adequadamente.
Por exemplo, se o recaptchalib.php estiver no diretório chamado "captcha", que está no mesmo
nível do arquivo de formulário, a função vai ficar assim:
require_once('captcha/recaptchalib.php')
.
Lado do servidor (como testar se o usuário inseriu a resposta certa)
O código a seguir deve ser colocado na parte superior do arquivo verify.php:
<?php require_once('recaptchalib.php'); $privatekey = "your_private_key"; $resp = recaptcha_check_answer ($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); if (!$resp->is_valid) { // What happens when the CAPTCHA was entered incorrectly die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." . "(reCAPTCHA said: " . $resp->error . ")"); } else { // Your code here to handle a successful verification } ?>
No código acima:
recaptcha_check_answer
retorna um objeto que representa se o usuário
concluiu o desafio com sucesso.$resp->is_valid
for verdadeira, o desafio de captcha foi concluído corretamente, e você terá que continuar o processamento do formulário.$resp->is_valid
for falso, o usuário não forneceu o texto de captcha correto, e você precisará exibir o formulário novamente para permitir outra tentativa. Nesse caso,
$resp->error
será um código de erro que pode ser fornecido a recaptcha_get_html
.
Transmitir o código de erro faz com que o controle reCAPTCHA exiba uma mensagem explicando que o usuário
digitou o texto incorretamente e precisa tentar de novo.Observe que esse código está solicitando a chave private, o que não pode ser confundido com a chave pública. Você consegue essa informação na mesma página que a chave pública.
Verifique também se o formulário está configurado para obter as variáveis do formulário usando $_POST em vez de $_REQUEST e se o próprio formulário está usando o método POST.
Pronto. O reCAPTCHA agora deve estar funcionando no seu site.
Leitura complementar
Guia de referência do plug-in PHP
Veja abaixo uma lista abrangente de todos os métodos do plug-in reCAPTCHA PHP.
Função recaptcha_get_html
A função recaptcha_get_html
exibe o HTML que apresenta o reCAPTCHA ao
usuário.
recaptcha_get_html | |
Parâmetro | |
$pubkey -- string. obrigatória. | Sua chave pública reCAPTCHA na página de inscrição da API |
$error -- string. opcional (null é o padrão) | Se essa string for definida, a área reCAPTCHA vai mostrar o código de erro fornecido. Esse código de erro vem de ReCaptchaResponse->$error |
$use_ssl -- booleano. opcional (false é o padrão) | A API baseada em SSL deve ser usada? Se você estiver exibindo uma página ao usuário por SSL, defina essa opção como "true" para que uma caixa de diálogo de erro não apareça no navegador do usuário. |
Valor de retorno | String com HTML que será colocado na página da Web. |
Função recaptcha_check_answer
Depois que o usuário preenche o formulário HTML, incluindo a resposta para o captcha, queremos
verificar a resposta quando ele envia o formulário usando a
função recaptcha_check_answer
. A resposta do usuário terá dois campos de formulário, recaptcha_challenge_field
e recaptcha_response_field
. A
biblioteca reCAPTCHA faz uma solicitação HTTP para o servidor reCAPTCHA e verifica a resposta
do usuário.
recaptcha_check_answer | |
Parâmetro | |
$privkey -- string. obrigatória. | Sua chave privada reCAPTCHA, na página de inscrição da API. |
$remoteip -- string. obrigatória. | Endereço IP do usuário, no formato 192.168.0.1 |
$challenge -- string. obrigatório. |
O valor do campo do formulário recaptcha_challenge_field |
$response -- string. obrigatório | O valor do campo de formulário recaptcha_response_field |
Valor de retorno | Uma instância da classe ReCaptchaResponse |
ReCaptchaResponse | |
Campo | |
$is_valid -- booleano | O reCAPTCHA acreditava que a resposta era válida? |
$error -- string | Se a resposta for inválida, qual foi o problema? Esse código do erro pode ser usado no recaptcha_get_html |
Valor de retorno | O URL HTML ou bruto para decodificar o endereço de e-mail, dependendo da função que você chamou. |
Corredor de correio
A biblioteca PHP do reCAPTCHA inclui vinculações para a API Mailhide. Essa API permite encapsular um e-mail em um reCAPTCHA para evitar que os criadores de spam o vejam: exame...@example.com.
A parte Mailhide da biblioteca PHP requer o módulo mcrypt do PHP.
A API Mailhide consiste em duas funções, recaptcha_mailhide_html
e
recaptcha_mailhide_url
. As funções têm os mesmos parâmetros. A versão _html retorna códigos HTML que podem ser inseridos diretamente na sua página da Web. A parte do nome de usuário do e-mail que é transmitida é truncada e substituída por um link que chama o Mailhide. A versão "_url" fornece o URL para decodificar o e-mail e deixa para você colocar o e-mail em HTML.
recaptcha_mailhide_url / recaptcha_mailhide_html | |
Parâmetro | |
$pubkey -- string | A chave pública do Mailhide na página de inscrição |
$privkey -- string | A chave privada do Mailhide na página de inscrição |
$email -- string | O endereço de e-mail que você quer ocultar. |
O exemplo a seguir mostra como usar o Mailhide:
<html><body> <? require_once ("recaptchalib.php"); // get a key at http://www.google.com/recaptcha/mailhide/apikey $mailhide_pubkey = ''; $mailhide_privkey = ''; ?> The Mailhide encoding of example@example.com is <? echo recaptcha_mailhide_html ($mailhide_pubkey, $mailhide_privkey, "example@example.com"); ?>. <br> The url for the email is: <? echo recaptcha_mailhide_url ($mailhide_pubkey, $mailhide_privkey, "example@example.com"); ?> <br> </body></html>