Esta página explica como verificar a resposta de um usuário a um desafio reCAPTCHA do back-end.
Para usuários da Web, é possível conseguir o token de resposta do usuário de uma destas três maneiras:
- Parâmetro POST 
g-recaptcha-responsequando o usuário envia o formulário no site grecaptcha.getResponse(opt_widget_id)após a conclusão do usuário o desafio reCAPTCHA- Como um argumento de string para sua função de callback,
se 
data-callbackfor especificado no atributo de tagg-recaptchaou no parâmetro de callback no métodogrecaptcha.render. 
Para usuários da biblioteca Android, você pode chamar o método SafetyNetApi.RecaptchaTokenResult.getTokenResult() para obter o token de resposta se o status retornar bem-sucedido.
Restrições de token
Cada token de resposta do usuário reCAPTCHA é válido por dois minutos e só pode ser verificado uma vez para evitar ataques de repetição. Se você precisar de um novo token, execute novamente a verificação reCAPTCHA.
Depois de receber o token de resposta, você precisa verificá-lo em dois minutos com o reCAPTCHA usando o a seguir para garantir que o token é válido.
Solicitação de API
URL: https://www.google.com/recaptcha/api/siteverify
MÉTODO: POST
| Parâmetro POST | Descrição | 
|---|---|
secret | 
    Obrigatório. A chave compartilhada entre seu site e o reCAPTCHA. | 
response | 
    Obrigatório. O token de resposta do usuário fornecido pela integração do reCAPTCHA no lado do cliente no seu site. | 
remoteip | 
    Opcional. O endereço IP do usuário. | 
Resposta da API
A resposta é um objeto JSON:
{
  "success": true|false,
  "challenge_ts": timestamp,  // timestamp of the challenge load (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)
  "hostname": string,         // the hostname of the site where the reCAPTCHA was solved
  "error-codes": [...]        // optional
}
Para o reCAPTCHA para Android:
{
  "success": true|false,
  "challenge_ts": timestamp,  // timestamp of the challenge load (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)
  "apk_package_name": string, // the package name of the app where the reCAPTCHA was solved
  "error-codes": [...]        // optional
}
Referência do código de erro
| Código do erro | Descrição | 
|---|---|
missing-input-secret | 
    O parâmetro secreto está ausente. | 
invalid-input-secret | 
    O parâmetro secreto é inválido ou está incorreto. | 
missing-input-response | 
    O parâmetro de resposta está ausente. | 
invalid-input-response | 
    O parâmetro de resposta é inválido ou está incorreto. | 
bad-request | 
    A solicitação é inválida ou está incorreta. | 
timeout-or-duplicate | 
    A resposta não é mais válida: ou é muito antiga ou já foi usada. |