Intégrations

Des paquets prêts à l’emploi pour Laravel, Symfony, WordPress et WoltLab Suite — et le guide pour créer le vôtre.

Intégration Laravel

1. Déclarer le dépôt

Ajoutez le dépôt CaptchaCore dans votre composer.json :

{
    "repositories": [
        {
            "type": "composer",
            "url": "https://captchacore.eu/packages"
        }
    ]
}

2. Installer le paquet

composer require captchacore/laravel

3. Configurer le .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

Composant 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();

Symfony Bundle

Pour Symfony 6.4 LTS et 7.x. Quatre voies d'intégration : FormType, contrainte de validation, attributs de contrôleur et badge Security.

1. Installer

composer require captchacore/captchacore-bundle

Symfony Flex enregistre le bundle et crée automatiquement config/packages/captchacore.yaml.

2. Configurer le .env

CAPTCHACORE_URL=https://api.captchacore.eu
CAPTCHACORE_SITE_KEY=cc_pub_xxxxxxxxxxxxxxxxxxxxxxxxxxxx
CAPTCHACORE_SECRET_KEY=cc_sec_xxxxxxxxxxxxxxxxxxxxxxxxxxxx

FormType (recommandé)

use CaptchaCore\SymfonyBundle\Form\Type\CaptchaCoreType;

$builder
    ->add('email', EmailType::class)
    ->add('message', TextareaType::class)
    ->add('captcha', CaptchaCoreType::class, [
        'form_type' => 'contact',
    ]);

Attributs de contrôleur

use CaptchaCore\SymfonyBundle\Security\Attribute\RequiresCaptcha;

#[Route('/contact', methods: ['POST'])]
#[RequiresCaptcha(formType: 'contact')]
public function submit(Request $request): Response { /* ... */ }

Contrainte Validator (DTOs)

use CaptchaCore\SymfonyBundle\Validator\CaptchaCoreToken;

final class ContactDto {
    public function __construct(
        #[Assert\NotBlank]
        public string $email,

        #[CaptchaCoreToken(formType: 'contact')]
        public string $captchaToken,
    ) {}
}

Programmatique

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 (standalone)

{{ captchacore_widget(mode: 'interactive') }}

Tests

CaptchaCoreClient::fake(VerificationResult::allow());
$this->client->request('POST', '/contact', [...]);
self::assertResponseIsSuccessful();

Plugin WordPress

  1. Installez l’extension — dans WordPress, ouvrez Extensions → Ajouter et cherchez « CaptchaCore » (fiche dans le répertoire WordPress). Les mises à jour viennent ensuite de WordPress. Sinon, téléversez le ZIP depuis votre espace client.
  2. Activer dans Extensions
  3. Ouvrir Réglages > CaptchaCore
  4. Renseigner l'URL du service, la clé de site et la clé secrète
  5. Choisir le mode du widget, le thème et la couleur
  6. Activer les formulaires souhaités (connexion, inscription, commentaires, etc.)

Aucun code requis. Le plugin intègre automatiquement le widget dans tous les formulaires WordPress activés et vérifie les tokens côté serveur.

WoltLab Suite

Le paquet est distribué via la boutique officielle de plugins WoltLab. L’installation et toutes les mises à jour passent par elle — il n’y a pas de téléchargement séparé dans l’espace client.

  1. Achetez le paquet dans la boutique de plugins et installez-le dans l’ACP sous Paquets → Installer un paquet
  2. Saisissez vos identifiants sous Options → Sécurité → Anti-spam → CaptchaCore : URL du service, site key et secret key
  3. Choisissez l’apparence : mode, thème, couleur d’accent et langue — « auto » suit la langue du forum.
  4. Sélectionnez CaptchaCore comme captcha sous Options → Sécurité → Anti-spam → Captcha — il s’applique alors à l’inscription, au formulaire de contact et à tous les autres formulaires du système
Réglage Signification
Point d'accès Endpoint UE par défaut ou mondial. L’UE conserve toutes les données de vérification dans l’UE ; l’endpoint global accélère la réponse pour les visiteurs éloignés.
Mode interactive, visible ou invisible — les trois mêmes modes que partout ailleurs, voir les modes du widget.
Comportement en cas de panne Si CaptchaCore est injoignable, le plugin laisse passer le formulaire par défaut et journalise l’erreur. Désactivable si vous préférez bloquer en cas de doute.

Un seul paquet pour 6.1 et 6.2. Le handler vérifie chaque jeton côté serveur via l’API V2 ; la vérification supplémentaire (« step_up ») est prise en charge par le widget lui-même et le visiteur reçoit un message dédié plutôt qu’une erreur.

Créer votre propre intégration

Vous voulez intégrer CaptchaCore dans un système sans paquet existant, comme Shopware, Joomla ou votre propre framework ? Comptez quelques heures. Cet ordre a fait ses preuves.

01

Diffuser le script

Incluez captchacore-v2.min.js depuis le point d'accès UE et transmettez la clé de site et l'URL du service comme attributs data. Dans un CMS, cela relève du hook qui enregistre les scripts du frontend. Ne chargez le script que sur les pages contenant réellement un formulaire protégé.

02

Marquer les formulaires

Placez data-captchacore sur le formulaire et insérez un conteneur vide avec data-captchacore-widget. data-form-type décide de la politique appliquée. Plusieurs formulaires sur une page ne posent pas de problème, chacun reçoit son propre widget.

03

Vérifier le jeton côté serveur

Lisez le champ captchacore_token de la requête et envoyez-le avec votre clé secrète à /api/v2/verify. Vérifiez decision et ne traitez pas step_up comme block.

04

Gérer les pannes

Fixez un délai d'attente d'environ trois secondes et décidez délibérément si une panne laisse passer ou bloque. Rendez-le configurable dans l'extension, la réponse diffère selon le formulaire.

05

Prendre en compte le chargement différé

Si votre système remplace des formulaires via AJAX, appelez ensuite CaptchaCoreV2.attach().

06

Proposer des réglages

Clé de site, clé secrète, choix des formulaires protégés, apparence et comportement en cas de panne ont leur place dans l'écran de configuration de votre extension.

Modèles dont s'inspirer

Toutes les intégrations fournies suivent le même schéma. Pour un système basé sur Symfony comme Shopware 6, le bundle Symfony est le modèle le plus proche ; pour un CMS classique, l'extension WordPress.

À vérifier avant publication

  • Formulaire envoyé sans JavaScript — votre règle de repli s'applique-t-elle ?
  • Jeton utilisé deux fois — la seconde vérification doit échouer, le nonce est à usage unique.
  • Jeton envoyé après plus de cinq minutes — le widget le renouvelle de lui-même, vérifiez-le lors d'un test de longue durée.
  • Deux formulaires protégés sur une page — les deux doivent fonctionner indépendamment.
  • Formulaire chargé via AJAX — le widget apparaît-il ?
  • La clé secrète n'apparaît nulle part dans le HTML ni en JavaScript.
  • Une réponse avec decision=step_up — l'utilisateur ne doit pas se retrouver dans une impasse.

Vous développez une intégration et souhaitez que nous la référencions ici ou que nous participions à sa maintenance ? Contactez-nous — nous fournissons des accès de test et un interlocuteur.