Integraciones

Paquetes listos para Laravel, Symfony, WordPress y WoltLab Suite, y la guía para crear el suyo propio.

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

  1. Instale el plugin: en WordPress, vaya a Plugins → Añadir nuevo y busque «CaptchaCore» (entrada en el directorio de WordPress). Las actualizaciones llegan entonces desde WordPress. Como alternativa, suba el ZIP desde su área de cliente.
  2. Actívalo en Plugins
  3. Abre Ajustes > CaptchaCore
  4. Introducir la URL del servicio, la site key y la secret key
  5. Elegir el modo del widget, el tema y el color
  6. 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.

  1. Adquiera el paquete en la tienda de plugins e instálelo en el ACP en Paquetes → Instalar paquete
  2. Introduzca las credenciales en Opciones → Seguridad → Anti-spam → CaptchaCore: URL del servicio, site key y secret key
  3. Elija la apariencia: modo, tema, color de acento e idioma. «auto» sigue el idioma del foro.
  4. 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.

01

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.

02

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.

03

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.

04

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.

05

Tener en cuenta la carga posterior

Si su sistema sustituye formularios mediante AJAX, llame después a CaptchaCoreV2.attach().

06

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.