Guia de migração

Migre do Turnstile para o CaptchaLa

Substituição plug-and-play em menos de 10 minutos. Mantenha seus formulários, abandone a dependência da Cloudflare e ganhe fallback de desafio e endpoints na China continental.

TTurnstileCurrent setup~10 minCaptchaLaDrop-in target

Como fica a mudança de código

Antes — Turnstile
<div class="cf-turnstile" data-sitekey="YOUR_SITE_KEY"></div>
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
Depois — CaptchaLa
<button id="login-btn">Sign in</button>
<script src="https://cdn.captcha-cdn.net/captchala-loader.js"></script>
<script>
  loadCaptchala(() => Captchala.init({ appKey: 'YOUR_APP_KEY', action: 'login' })
    .onSuccess(res => onToken(res.token))
    .bindTo('#login-btn'));
</script>
Antes — verificação no servidor do Turnstile (Node)
const res = await fetch('https://challenges.cloudflare.com/turnstile/v0/siteverify', {
  method: 'POST',
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
  body: new URLSearchParams({
    secret: process.env.TURNSTILE_SECRET,
    response: req.body['cf-turnstile-response'],
  }),
})
const data = await res.json()
if (!data.success) return res.status(400).json({ error: 'bot' })
Depois — verificação no servidor do CaptchaLa (Node)
const res = await fetch('https://apiv1.captcha.la/v1/validate', {
  method: 'POST',
  headers: {
    'X-App-Key': process.env.CAPTCHALA_APP_KEY,
    'X-App-Secret': process.env.CAPTCHALA_APP_SECRET,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ pass_token: req.body['captchala-token'] }),
})
const { data } = await res.json()
if (!data || !data.valid) return res.status(400).json({ error: 'bot' })

Passos da migração

  1. 1

    Cadastre-se e pegue sua App Key + Secret

    Crie uma conta gratuita no CaptchaLa, adicione um site e copie a App Key (pública) e o App Secret (lado do servidor). Sem precisar de conta na Cloudflare.

  2. 2

    Troque a tag do widget

    Substitua cf-turnstile por captchala e data-sitekey por data-app-key. Mude o src do script para o nosso CDN. O formato do widget (um placeholder div + uma tag script) é o mesmo.

  3. 3

    Atualize o nome do campo oculto

    O Turnstile injeta cf-turnstile-response; o CaptchaLa injeta captchala-token. A maioria dos handlers de formulário não lê o campo pelo nome, mas se o seu lê, renomeie a constante em um único lugar.

  4. 4

    Atualize a chamada de verificação no servidor

    Mude o endpoint para apiv1.captcha.la/v1/validate. Aceitamos JSON (o Turnstile usa form-urlencoded), então atualize o Content-Type e o formato do corpo. A resposta continua retornando uma flag valid (data.valid) para o seu código de ramificação.

  5. 5

    Faça o rollout gradualmente

    Mantenha o Turnstile na maioria dos formulários e coloque o CaptchaLa primeiro em um formulário de baixo tráfego. Observe a conversão e a taxa de desafio por um dia. Expanda quando estiver satisfeito — não há mínimo nem contrato.

Perguntas frequentes

Posso manter meu CDN da Cloudflare e ainda usar o CaptchaLa?

Sim. O CaptchaLa é independente de qualquer CDN — a maioria dos nossos clientes mantém a Cloudflare como CDN e usa o CaptchaLa para verificação. As duas camadas não conflitam.

Minhas regras de detecção de bots da Cloudflare continuam valendo?

Sim — esses são recursos do WAF / Bot Management da Cloudflare, separados do Turnstile. Remover o widget do Turnstile não afeta a configuração da sua zona Cloudflare.

E se eu estiver usando o Turnstile via Cloudflare Workers?

A migração é a mesma do lado do Worker. Substitua o fetch do Turnstile pelo fetch do CaptchaLa. Temos um trecho na documentação compatível com o runtime do Workers.