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
- Verifique o tipo de implementação — verifique
enterprise.jsna tag do script - Adicione
enterprise=1à sua solicitação CaptchaAI - Verifique
data-s— inclua-o se a página tiver este atributo - 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
- Como identificar a implementação empresarial do reCAPTCHA
- Como resolver reCAPTCHA v2 usando API
- Padrão vs Empresarial reCAPTCHA v2
- Referência de códigos de erro CaptchaAI