Solução de Problemas

Erros e correções comuns do reCAPTCHA v2 Enterprise

reCAPTCHA v2 Enterprise falha pelos mesmos motivos da versão 2 padrão – chave de site errada, URL de página inválido, tokens expirados – além de alguns problemas específicos da empresa. O maior problema da empresa é identificar incorretamente a implementação: usar parâmetros v2 padrão em um widget corporativo ou vice-versa. Se você enviar method=userrecaptcha sem o sinalizador enterprise=1 para um widget Enterprise, o token retornado será rejeitado pelo back-end do site de destino.

Este guia cobre todas as falhas comuns ao resolver reCAPTCHA v2 Enterprise por meio da API CaptchaAI. Se você não tem certeza se está lidando com padrão ou Enterprise, leiaComo identificar a implementação empresarial do reCAPTCHAprimeiro.


Como reCAPTCHA v2 Enterprise difere do padrão

Recurso Padrão v2 Empresa v2
URL do script google.com/recaptcha/api.js google.com/recaptcha/enterprise.js
Objeto JS grecaptcha grecaptcha.enterprise
Ponto final de verificação google.com/recaptcha/api/siteverify recaptchaenterprise.googleapis.com
Parâmetro CaptchaAI method=userrecaptcha method=userrecaptcha + enterprise=1
Parâmetro data-s Nunca usado Às vezes presente (token adicional)

Erros específicos da empresa

Enviando parâmetros padrão para um widget Enterprise

Sintoma: a API retorna um token, mas o site de destino o rejeita.

Causa: Você enviou a tarefa sem enterprise=1. CaptchaAI resolveu isso como padrão v2, mas o back-end verifica a API Enterprise – que rejeita tokens padrão.

Correção: Adicione enterprise=1 à sua solicitação:

import requests

response = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": "6LcR_RsTAAAAAFJR-JhNbC6CC42wKCbR9Hq_kVCd",
    "pageurl": "https://staging.example.com/qa-login",
    "enterprise": 1,
    "json": 1
})

data = response.json()
task_id = data["request"]
const params = new URLSearchParams({
  key: "YOUR_API_KEY",
  method: "userrecaptcha",
  googlekey: "6LcR_RsTAAAAAFJR-JhNbC6CC42wKCbR9Hq_kVCd",
  pageurl: "https://staging.example.com/qa-login",
  enterprise: 1,
  json: 1,
});

const res = await fetch(`https://ocr.captchaai.com/in.php?${params}`);
const data = await res.json();
const taskId = data.request;

Parâmetro data-s ausente

Sintoma: ERROR_BAD_PARAMETERS ou o token é rejeitado pelo site.

Causa: algumas implementações empresariais incluem um atributo data-s na div reCAPTCHA. Este é um token de sessão adicional necessário para a resolução. Se presente, você deve incluí-lo.

Correção: Verifique a página de data-s e inclua-o se encontrado:

# Look for: <div class="g-recaptcha" data-sitekey="..." data-s="..."></div>
response = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": sitekey,
    "pageurl": page_url,
    "enterprise": 1,
    "data-s": data_s_value,  # Include if present on the page
    "json": 1
})

Identificação de script errada

Sintoma: O token funciona de forma inconsistente ou é sempre rejeitado.

Causa: Você identificou o widget como padrão quando ele é Enterprise (ou vice-versa).

Correção: Verifique a fonte do script no HTML da página:

// Enterprise uses enterprise.js
// <script src="https://www.google.com/recaptcha/enterprise.js?render=SITEKEY"></script>

// Standard uses api.js
// <script src="https://www.google.com/recaptcha/api.js"></script>

// Also check the JS object:
// Enterprise: grecaptcha.enterprise.render(...)
// Standard: grecaptcha.render(...)

Erros gerais (compartilhados com o padrão v2)

Código de erro Causa Correção
ERROR_WRONG_USER_KEY Formato de chave de API inválido Verifique emcaptchaai.com/api.php
ERROR_KEY_DOES_NOT_EXIST Chave de API não encontrada Verifique se há espaços extras ou caracteres ausentes
ERROR_ZERO_BALANCE Sem saldo Recarregue sua conta
ERROR_PAGEURL Faltando pageurl Adicione o URL completo da página
ERROR_GOOGLEKEY Chave do site malformada Extrair novamente de data-sitekey
ERROR_BAD_TOKEN_OR_PAGEURL Incompatibilidade de Sitekey/URL Verifique o contexto do iframe
CAPCHA_NOT_READY Ainda resolvendo Aguarde 5 segundos, enquete novamente
ERROR_CAPTCHA_UNSOLVABLE Não pode ser resolvido Envie uma nova tarefa

Fluxo de resolução completo com tratamento de erros

import requests
import time

def solve_recaptcha_v2_enterprise(api_key, sitekey, page_url, data_s=None):
    params = {
        "key": api_key,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": page_url,
        "enterprise": 1,
        "json": 1
    }
    if data_s:
        params["data-s"] = data_s

    response = requests.get("https://ocr.captchaai.com/in.php", params=params)
    data = response.json()

    if data.get("status") != 1:
        raise RuntimeError(f"Submit failed: {data.get('request')}")

    task_id = data["request"]

    for _ in range(40):
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": api_key, "action": "get", "id": task_id, "json": 1
        }).json()

        if result.get("status") == 1:
            return result["request"]
        if result.get("request") == "CAPCHA_NOT_READY":
            continue
        raise RuntimeError(f"Solve failed: {result.get('request')}")

    raise TimeoutError("Solve timed out after 200 seconds")

token = solve_recaptcha_v2_enterprise("YOUR_API_KEY", "SITEKEY", "https://staging.example.com/qa-login")
async function solveRecaptchaV2Enterprise(apiKey, sitekey, pageUrl, dataS) {
  const params = new URLSearchParams({
    key: apiKey, method: "userrecaptcha", googlekey: sitekey,
    pageurl: pageUrl, enterprise: 1, json: 1,
  });
  if (dataS) params.set("data-s", dataS);

  const submitRes = await fetch(`https://ocr.captchaai.com/in.php?${params}`);
  const submitData = await submitRes.json();
  if (submitData.status !== 1) throw new Error(`Submit failed: ${submitData.request}`);

  const taskId = submitData.request;
  for (let i = 0; i < 40; i++) {
    await new Promise(r => setTimeout(r, 5000));
    const res = await fetch(`https://ocr.captchaai.com/res.php?${new URLSearchParams({
      key: apiKey, action: "get", id: taskId, json: 1,
    })}`);
    const data = await res.json();
    if (data.status === 1) return data.request;
    if (data.request === "CAPCHA_NOT_READY") continue;
    throw new Error(`Solve failed: ${data.request}`);
  }
  throw new Error("Timed out after 200s");
}

Perguntas frequentes

Como posso saber se um site usa o reCAPTCHA Enterprise ou padrão?

Verifique a tag do script no HTML. O Enterprise carrega recaptcha/enterprise.js enquanto o padrão carrega recaptcha/api.js. O objeto JavaScript também é diferente: Enterprise usa grecaptcha.enterprise enquanto padrão usa grecaptcha.

Preciso alterar minha chamada de API para Enterprise?

Sim. Adicione enterprise=1 à sua solicitação CaptchaAI. Sem esse sinalizador, o token é gerado para o padrão v2, que os back-ends corporativos rejeitam.

Qual é o parâmetro data-s?

Algumas implementações empresariais incluem um atributo data-s na div reCAPTCHA. Este é um token de sessão adicional. Se estiver presente na página, inclua-o na sua solicitação de API.

Por que meu token Enterprise é rejeitado mesmo com Enterprise=1?

Verifique três coisas: (1) a chave do site está correta, (2) o parâmetro data-s está presente na página, mas ausente na sua solicitação, ou (3) o token expirou antes de você enviar o formulário.

Posso usar o mesmo código para Standard e Enterprise v2?

Sim – adicione enterprise=1 para mudar. Todo o resto (nome do método, parâmetros, pesquisa) permanece o mesmo.


Corrija o fluxo de trabalho da sua empresa

  1. Verifique o tipo de implementação — verifique enterprise.js na tag do script
  2. Adicione enterprise=1 à sua solicitação CaptchaAI
  3. Verifique data-s — inclua-o se a página tiver este atributo
  4. Envie o token imediatamente — Os tokens empresariais também expiram após aproximadamente 2 minutos

Obtenha sua chave API emcaptchaai.com/api.php.


Guias relacionados

Os comentários estão desativados para este artigo.