--- title: Inicio rápido --- # Inicio rápido Esta guía te ayudará a integrar el CAPTCHA de CaptchaLa en 5 minutos. ::: tip Míralo funcionar en 30 segundos [demo-v1.captcha.la](https://demo-v1.captcha.la) — HTML + PHP puro, licencia MIT, ver el código fuente en cada página. - [popup.html](https://demo-v1.captcha.la/popup.html) — modo popup - [float.html](https://demo-v1.captcha.la/float.html) — widget flotante - [bind.html](https://demo-v1.captcha.la/bind.html) — enlazar a un botón - [inline.html](https://demo-v1.captcha.la/inline.html) — integración en línea - [server-token.html](https://demo-v1.captcha.la/server-token.html) — token emitido por el servidor (anti-replay) ::: ## 1. Crear cuenta Regístrate gratis en el panel de control. [Regístrate ahora →](https://dash.captcha.la/register) ## 2. Crear aplicación Crea una aplicación en el panel para obtener tu App Key. ## 3. Instalar el SDK Elige el método de instalación que prefieras. ```html ``` ```bash # o vía npm npm install captchala ``` ## 4. Inicializar el CAPTCHA Inicializa el componente CAPTCHA en tu página. ```html ``` ## 5. Verificación en el servidor Valida el token en tu servidor. ```bash POST https://apiv1.captcha.la/v1/validate X-App-Key: YOUR_APP_KEY X-App-Secret: YOUR_APP_SECRET Content-Type: application/json { "pass_token": "" } ``` ```json { "code": 0, "data": { "valid": true, "action": "login", "challenge_id": "ch_xxx", "uid": null, "risk_score": 12 } } ``` ::: warning Comprueba siempre que `data.valid === true` **y** que `data.action` coincida con el escenario que esperas. Los pass tokens son de un solo uso; el mismo `pt_xxx` no puede validarse dos veces. ::: ## Modo de token emitido por el servidor (recomendado en producción) {#server-token} Para acciones sensibles (inicio de sesión, registro, pago) recomendamos el flujo de token emitido por el servidor: tu backend solicita primero un server_token de corta duración, que el navegador utiliza después para inicializar el CAPTCHA. Esto evita el abuso si tu app_key se filtra. ### Cuándo usarlo - Recomendado: registro, inicio de sesión, restablecimiento de contraseña, pago, canje de puntos y cualquier endpoint que un atacante pueda automatizar. - Opcional: formularios públicos informales, cuadros de búsqueda e interacciones de bajo valor donde la conveniencia es prioritaria. ### 1. El backend emite el server_token Llama a /v1/server/challenge/issue desde tu propio servidor, usando las cabeceras X-App-Key y X-App-Secret. Nunca expongas estas cabeceras al navegador. ```bash # Server-side only — never call this from a browser curl -X POST https://apiv1.captcha.la/v1/server/challenge/issue \ -H "X-App-Key: YOUR_APP_KEY" \ -H "X-App-Secret: YOUR_APP_SECRET" \ -d "action=login&ttl=300&max_uses=1&bind_ip=1.2.3.4" # → { "code": 0, "data": { "server_token": "sct_...", "expires_in": 300 } } ``` ### 2. El frontend renderiza CaptchaLa con el server_token Pasa el token a tu componente CaptchaLa. El SDK lo reenvía al inicializar el desafío. ```js // Browser fetches the token from YOUR backend, not from CaptchaLa directly const { serverToken } = await fetch('/api/captcha/issue').then(r => r.json()); Captchala.init({ appKey: 'YOUR_APP_KEY', serverToken, // single-use, short-lived product: 'popup', action: 'login', }) .appendTo('#captcha-container') .onSuccess(res => submitForm(res.token)); ``` ### Notas de seguridad - Nunca incluyas el app_secret en código del frontend, aplicaciones móviles o repositorios públicos. Debe permanecer en el servidor. - Activa «Requerir token de desafío emitido por el servidor» en el panel para rechazar cualquier desafío que se intente sin un server_token. - Mantén el ttl corto (300s por defecto, 900s máximo) y prefiere max_uses=1 para reducir el impacto de una filtración de token. ## Siguientes pasos - [SDK Web](/es/web-sdk) - [Referencia de la API](/es/api-reference)