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.
Como fica a mudança de código
<div class="cf-turnstile" data-sitekey="YOUR_SITE_KEY"></div>
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script><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>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' })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
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
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
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
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
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.
Mais rápido: use um plugin
WordPress + WooCommerce
Se você usava um plugin Turnstile da comunidade no WordPress, troque-o pelo nosso plugin oficial. Login, cadastro, comentários, checkout do WooCommerce, CF7 / Gravity / WPForms — tudo coberto em uma instalação.
View integration →Flarum
Instale a extensão CaptchaLa via Composer, ative-a no admin, e os formulários do Flarum (cadastro, login, redefinição de senha, respostas a posts) passam todos pelo CaptchaLa.
View integration →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.