Como usar o reCAPTCHA com PHP

Importante: a versão 1.0 da API reCAPTCHA não é mais compatível. Faça upgrade para a versão 2.0. Saiba mais

A biblioteca reCAPTCHA para PHP oferece uma maneira simples de inserir um CAPTCHA em seu site PHP, o que ajuda você a impedir que os bots abusem dele. A biblioteca envolve a API reCAPTCHA.

Para usar o reCAPTCHA com PHP, faça o download do reCAPTCHA PHP biblioteca. Você só vai precisar de um arquivo (recaptchalib.php). Os outros arquivos são exemplos, leia-me e coisas legais, mas não afetam a funcionalidade.

Início rápido

Depois de se inscrever para as chaves de API, veja abaixo as instruções básicas para instalar o reCAPTCHA no seu site. Confira abaixo um guia de referência completo do plug-in do PHP.

Lado do cliente (como fazer a imagem CAPTCHA aparecer)

Se quiser usar a biblioteca PHP para exibir o widget reCAPTCHA, você precisará inserir este snippet de código no <form> elemento em que o widget reCAPTCHA estará 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 de API.

O valor do atributo "action" atributo é "verify.php". Agora, verify.php é o arquivo de destino para o qual os valores desse formulário são enviados. Você precisa de um arquivo check.php no mesmo local que o html do cliente.

A função "require_once" no exemplo acima espera que o recaptchalib.php esteja no mesmo diretório do arquivo do formulário. Se ele estiver em outro diretório, vincule-o corretamente. Por exemplo, se o recaptchalib.php estiver no diretório "captcha", no mesmo nível do arquivo do formulário, a função vai ficar assim: require_once('captcha/recaptchalib.php').

Do lado do servidor (como testar se o usuário digitou a resposta certa)

O código a seguir precisa ser colocado na parte de cima 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.
  • Se $resp->is_valid for verdadeiro, o desafio do captcha foi concluído corretamente e você poderá continuar o processamento do formulário.
  • Se $resp->is_valid for falso, o usuário não forneceu o captcha correto e você deve exibir o formulário novamente para permitir uma nova tentativa. Nesse caso, $resp->error será um código de erro que pode ser fornecido para recaptcha_get_html. Transmitir o código de erro faz o controle reCAPTCHA mostrar uma mensagem explicando que o usuário digitou o texto incorretamente e deve tentar novamente.
  • Observe que esse código está solicitando a chave private, que não deve ser confundida. com a chave pública. Você encontra isso na mesma página da chave pública.

    Além disso, verifique se o formulário está configurado para receber as variáveis usando $_POST em vez de $_REQUEST e se o formulário está usando o método POST.

    É isso! O reCAPTCHA já deve estar funcionando no seu site.

    Leitura adicional

  • Como personalizar a aparência
  • Dicas e diretrizes
  • Solução de problemas
  • Guia de referência do plug-in para PHP

    Veja abaixo uma lista abrangente de todos os métodos do plug-in reCAPTCHA para PHP.

    A função recaptcha_get_html

    A função recaptcha_get_html exibe o HTML que apresenta o reCAPTCHA para as usuário.

    recaptcha_get_html
    Parâmetro
    $pubkey: string. Obrigatório. Sua chave pública do reCAPTCHA, da página de inscrição da API
    $error -- string. opcional (o padrão é nulo) Se essa string for definida, a área reCAPTCHA vai mostrar o código de erro. dado. Esse código de erro vem de ReCaptchaResponse->$error
    $use_ssl: booleano. Opcional (o padrão é "false"). A API baseada em SSL precisa ser usada? Se você está exibindo uma página para o usuário por SSL, defina-o como "true" para que uma caixa de diálogo de erro não aparecer no navegador do usuário.
    Valor de retorno String com HTML a ser colocado na página da Web.

    A função recaptcha_check_answer

    Depois que o usuário preencheu o formulário HTML, incluindo a resposta para o CAPTCHA, nós quiser verificar a resposta quando enviar o formulário usando o função recaptcha_check_answer. A resposta do usuário estará em dois campos de formulário: recaptcha_challenge_field e recaptcha_response_field. A biblioteca reCAPTCHA vai fazer uma solicitação HTTP para o servidor reCAPTCHA e verificar a resposta do usuário.

    recaptcha_check_answer
    Parâmetro
    $privkey: string obrigatória. Sua chave privada reCAPTCHA, da página de inscrição na API.
    $remoteip -- string. obrigatórios. O endereço IP do usuário, no formato 192.168.0.1
    $challenge: string. Obrigatório.
    O valor do campo de formulário recaptcha_challenge_field
    $response: string obrigatória. O valor do campo do formulário recaptcha_response_field
    Valor de retorno Uma instância da classe ReCaptchaResponse

    ReCaptchaResponse
    Campo
    $is_valid: booleano O reCAPTCHA considerou a resposta válida?
    $error: string Se a resposta for inválida, qual foi o problema? Esse código de erro pode ser usado em recaptcha_get_html
    Valor de retorno O HTML ou o URL bruto para decodificar o endereço de e-mail, dependendo da função chamada.

    Correir

    A biblioteca PHP do reCAPTCHA inclui vinculações para a API Mailhide. Isso A API permite que você empacote um e-mail em um reCAPTCHA para evitar que 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 HTML que pode ser colocado diretamente na sua página da Web. A parte do nome de usuário do e-mail que é passado é truncado e substituído por um link que chama o Mailhide. A versão _url fornece o URL decodificar o e-mail e deixar que você o coloque 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 da 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>