Integraciones
Paquetes listos para Laravel, Symfony, WordPress y WoltLab Suite, y la guía para crear el suyo propio.
En esta página
Integración Laravel
1. Añadir el repositorio
Añade el repositorio de CaptchaCore a tu composer.json:
{
"repositories": [
{
"type": "composer",
"url": "https://captchacore.eu/packages"
}
]
}
2. Instalar el paquete
composer require captchacore/laravel
3. Configurar .env
CAPTCHACORE_URL=https://captchacore.eu CAPTCHACORE_SITE_KEY=cc_pub_dein_key CAPTCHACORE_SECRET_KEY=cc_sec_dein_secret CAPTCHACORE_WIDGET_MODE=interactive # interactive | visible | invisible CAPTCHACORE_WIDGET_THEME=auto # auto | light | dark CAPTCHACORE_WIDGET_COLOR=#4ade80 CAPTCHACORE_WIDGET_LABEL=Ich bin kein Bot CAPTCHACORE_WIDGET_BRAND=CaptchaCore
Componente Blade
<form method="post" data-captchacore="interactive"> @csrf <!-- Formularfelder --> <x-captchacore::widget /> <button type="submit">Absenden</button> </form>
Middleware
// Route schützen Route::post('/register', RegisterController::class) ->middleware('captchacore:register'); // Oder als Validation Rule 'captchacore_token' => ['required', new CaptchaCoreToken('contact')] // Tests: fake() mockt alle Verifikationen CaptchaCore::fake();
Bundle de Symfony
Para Symfony 6.4 LTS y 7.x. Cuatro vías de integración: FormType, Validator-Constraint, atributos de controlador y Security-Badge.
1. Instalar
composer require captchacore/captchacore-bundle
Symfony Flex registra el bundle y crea automáticamente config/packages/captchacore.yaml.
2. Configurar .env
CAPTCHACORE_URL=https://api.captchacore.eu CAPTCHACORE_SITE_KEY=cc_pub_xxxxxxxxxxxxxxxxxxxxxxxxxxxx CAPTCHACORE_SECRET_KEY=cc_sec_xxxxxxxxxxxxxxxxxxxxxxxxxxxx
FormType (recomendado)
use CaptchaCore\SymfonyBundle\Form\Type\CaptchaCoreType; $builder ->add('email', EmailType::class) ->add('message', TextareaType::class) ->add('captcha', CaptchaCoreType::class, [ 'form_type' => 'contact', ]);
Atributos de controlador
use CaptchaCore\SymfonyBundle\Security\Attribute\RequiresCaptcha; #[Route('/contact', methods: ['POST'])] #[RequiresCaptcha(formType: 'contact')] public function submit(Request $request): Response { /* ... */ }
Validator-Constraint (DTOs)
use CaptchaCore\SymfonyBundle\Validator\CaptchaCoreToken; final class ContactDto { public function __construct( #[Assert\NotBlank] public string $email, #[CaptchaCoreToken(formType: 'contact')] public string $captchaToken, ) {} }
Programático
use CaptchaCore\SymfonyBundle\Client\CaptchaCoreClient; $result = $this->captcha->verify($token, 'login'); if ($result->blocked()) { throw new AccessDeniedHttpException(); } // Properties: valid, riskScore, action, confidence, reasons, stepUp
Twig (independiente)
{{ captchacore_widget(mode: 'interactive') }}
Tests
CaptchaCoreClient::fake(VerificationResult::allow()); $this->client->request('POST', '/contact', [...]); self::assertResponseIsSuccessful();
Plugin de WordPress
- Instale el plugin: en WordPress, vaya a
Plugins → Añadir nuevoy busque «CaptchaCore» (entrada en el directorio de WordPress). Las actualizaciones llegan entonces desde WordPress. Como alternativa, suba el ZIP desde su área de cliente. - Actívalo en Plugins
- Abre Ajustes > CaptchaCore
- Introducir la URL del servicio, la site key y la secret key
- Elegir el modo del widget, el tema y el color
- Activar los formularios deseados (login, registro, comentarios, etc.)
Sin necesidad de código. El plugin integra el widget automáticamente en todos los formularios de WordPress activados y verifica los tokens en el servidor.
WoltLab Suite
El paquete se distribuye a través de la tienda oficial de plugins de WoltLab. La instalación y todas las actualizaciones futuras pasan por ella: no hay una descarga propia en el área de cliente.
- Adquiera el paquete en la tienda de plugins e instálelo en el ACP en
Paquetes → Instalar paquete - Introduzca las credenciales en
Opciones → Seguridad → Anti-spam → CaptchaCore: URL del servicio, site key y secret key - Elija la apariencia: modo, tema, color de acento e idioma. «auto» sigue el idioma del foro.
- Seleccione CaptchaCore como captcha en
Opciones → Seguridad → Anti-spam → Captcha: a partir de ahí se aplica al registro, al formulario de contacto y a todos los demás formularios del sistema
| Ajuste | Significado |
|---|---|
| Endpoint | Endpoint estándar de la UE o mundial. La UE mantiene todos los datos de verificación dentro de la UE; el endpoint global acelera la respuesta para visitantes lejanos. |
| Modo | interactive, visible o invisible: los mismos tres modos que en el resto, véase modos del widget. |
| Comportamiento ante una caída | Si no se puede contactar con CaptchaCore, el plugin deja pasar el formulario por defecto y registra el error. Se puede desactivar si prefiere bloquear en caso de duda. |
Un paquete para 6.1 y 6.2. El handler verifica cada token en el servidor contra la API V2; la comprobación adicional («step_up») la resuelve el propio widget y el visitante recibe un aviso propio en lugar de un error.
Crear una integración propia
¿Quiere llevar CaptchaCore a un sistema para el que aún no hay paquete, como Shopware, Joomla o un framework propio? El esfuerzo es de unas pocas horas. Este orden ha demostrado funcionar.
Servir el script
Incluya captchacore-v2.min.js desde el endpoint de la UE y pase la clave de sitio y la URL del servicio como atributos data. En un CMS esto corresponde al hook que registra los scripts del frontend. Cargue el script solo en páginas que contengan realmente un formulario protegido.
Marcar los formularios
Ponga data-captchacore en el formulario e inserte un contenedor vacío con data-captchacore-widget. Con data-form-type decide qué política se aplica. Varios formularios en una página no son problema: cada uno recibe su propio widget.
Comprobar el token en el servidor
Lea el campo captchacore_token de la petición y envíelo con su clave secreta a /api/v2/verify. Compruebe decision y no trate step_up como block.
Gestionar las caídas
Fije un tiempo de espera de unos tres segundos y decida conscientemente si una caída deja pasar o bloquea. Hágalo configurable en el complemento: la respuesta varía según el formulario.
Tener en cuenta la carga posterior
Si su sistema sustituye formularios mediante AJAX, llame después a CaptchaCoreV2.attach().
Ofrecer ajustes
La clave de sitio, la clave secreta, la selección de formularios protegidos, el aspecto y el comportamiento ante caídas deben estar en la pantalla de configuración de su complemento.
Plantillas de las que copiar
Todas las integraciones suministradas siguen el mismo patrón. Para un sistema basado en Symfony como Shopware 6, el bundle de Symfony es la plantilla más cercana; para un CMS clásico, el complemento de WordPress.
Comprobar antes de publicar
- Formulario enviado sin JavaScript: ¿se aplica su regla de fallo?
- Token usado dos veces: la segunda comprobación debe fallar, el nonce es de un solo uso.
- Token enviado tras más de cinco minutos: el widget lo renueva solo, compruébelo en una prueba prolongada.
- Dos formularios protegidos en una página: ambos deben funcionar de forma independiente.
- Formulario cargado por AJAX: ¿aparece el widget?
- La clave secreta no aparece en ningún lugar del HTML ni en JavaScript.
- Una respuesta con decision=step_up: el usuario no debe acabar en un callejón sin salida.
¿Está creando una integración y quiere que la incluyamos aquí o que la mantengamos con usted? Póngase en contacto: facilitamos accesos de prueba y una persona de contacto.