Migra de Turnstile a CaptchaLa
Reemplazo directo en menos de 10 minutos. Conserva tus formularios, elimina la dependencia de Cloudflare y gana respaldo de desafío y endpoints en China continental.
Cómo es el cambio 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' })Pasos de migración
- 1
Regístrate y obtén tu App Key + Secret
Crea una cuenta gratuita en CaptchaLa, añade un sitio y copia la App Key (pública) y el App Secret (lado servidor). Sin cuenta de Cloudflare requerida.
- 2
Cambia la etiqueta del widget
Reemplaza cf-turnstile por captchala y data-sitekey por data-app-key. Cambia el script src por el de nuestro CDN. La forma del widget (un div marcador + una etiqueta script) es la misma.
- 3
Actualiza el nombre del campo oculto
Turnstile inyecta cf-turnstile-response; CaptchaLa inyecta captchala-token. La mayoría de los manejadores de formularios no leen el campo por su nombre, pero si el tuyo lo hace, renombra la constante en un solo lugar.
- 4
Actualiza la llamada de verificación del servidor
Cambia el endpoint a apiv1.captcha.la/v1/validate. Aceptamos JSON (Turnstile usa form-urlencoded), así que actualiza el Content-Type y la forma del cuerpo. La respuesta sigue devolviendo un flag valid (data.valid) para tu lógica de ramificación.
- 5
Despliega de forma gradual
Mantén Turnstile en la mayoría de los formularios y pon CaptchaLa primero en un formulario de bajo tráfico. Observa la conversión y la tasa de desafíos durante un día. Expande cuando estés satisfecho — no hay mínimo ni contrato.
Más rápido: usa un plugin
WordPress + WooCommerce
Si usabas un plugin comunitario de Turnstile en WordPress, cámbialo por nuestro plugin oficial. Inicio de sesión, registro, comentarios, checkout de WooCommerce, CF7 / Gravity / WPForms — todo cubierto en una sola instalación.
View integration →Flarum
Instala la extensión de CaptchaLa vía Composer, actívala en el panel de administración, y todos los formularios de Flarum (registro, inicio de sesión, restablecimiento de contraseña, respuestas a publicaciones) pasan por CaptchaLa.
View integration →Preguntas frecuentes
¿Puedo conservar mi CDN de Cloudflare y aun así usar CaptchaLa?
Sí. CaptchaLa es independiente de cualquier CDN — la mayoría de nuestros clientes mantienen Cloudflare como CDN y usan CaptchaLa para la verificación. Las dos capas no entran en conflicto.
¿Seguirán aplicándose mis reglas de detección de bots de Cloudflare?
Sí — esas son funciones de Cloudflare WAF / Bot Management, independientes de Turnstile. Eliminar el widget de Turnstile no afecta a la configuración de tu zona de Cloudflare.
¿Y si estoy usando Turnstile a través de Cloudflare Workers?
La migración es la misma en el lado del Worker. Reemplaza el fetch de Turnstile por el fetch de CaptchaLa. Tenemos un fragmento en la documentación compatible con el runtime de Workers.