Intégrations
Des paquets prêts à l’emploi pour Laravel, Symfony, WordPress et WoltLab Suite — et le guide pour créer le vôtre.
Sur cette page
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
- Installez l’extension — dans WordPress, ouvrez
Extensions → Ajouteret 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. - Activer dans Extensions
- Ouvrir Réglages > CaptchaCore
- Renseigner l'URL du service, la clé de site et la clé secrète
- Choisir le mode du widget, le thème et la couleur
- 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.
- Achetez le paquet dans la boutique de plugins et installez-le dans l’ACP sous
Paquets → Installer un paquet - Saisissez vos identifiants sous
Options → Sécurité → Anti-spam → CaptchaCore: URL du service, site key et secret key - Choisissez l’apparence : mode, thème, couleur d’accent et langue — « auto » suit la langue du forum.
- 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.
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é.
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.
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.
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.
Prendre en compte le chargement différé
Si votre système remplace des formulaires via AJAX, appelez ensuite CaptchaCoreV2.attach().
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.