Aller au contenu principal

3. Vérifier la solution CAPTCHA

✅ Un exemple complet de backend fonctionnel se trouve au bas de cette page.

Changez facilement

La vérification de la solution (jeton) fonctionne de la même manière qu'avec Google reCAPTCHA et hCaptcha. Seule la réponse de l'API est légèrement différente et contient plus d'informations. Vous pouvez également vérifier les adresses électroniques dans le même appel API.

Vérification côté serveur

Souvenez-vous de la clef secrète qui a été automatiquement générée avec la sitekey. Cette clef secrète est nécessaire pour vérifier la solution CAPTCHA avec l'API afin de s'assurer qu'elle est bien réelle et valide.

Pour vérifier la solution CAPTCHA, faites une demande POST à

https://www.zencaptcha.com/captcha/siteverify

avec les paramètres suivants :

Post paramètreDescription
responseLa solution (zenc-captcha-solution) du CAPTCHA.
secretVotre clé secrète (qui correspond à la sitekey du widget)
emailOptionnel: Adresse email de l'utilisateur. - Alternativement, vous pouvez simplement fournir le nom de domaine de l'email (pour un maximum de confidentialité : example.com).
Utiliser POST

N'utilisez pas de requête GET pour appeler /siteverify (ou cela échouera).

Exemple Curl

Modifiez CAPTCHA-SOLUTION et VOTRE-CLÉ-SECRÈTE avec vos valeurs :

curl
curl https://www.zencaptcha.com/captcha/siteverify
-X POST
-H "Content-Type: application/x-www-form-urlencoded"
-d 'response=CAPTCHA-SOLUTION&secret=VOTRE-CLÉ-SECRÈTE'

Pour vérifier le jeton zenc-captcha-solution envoyé depuis votre HTML frontend vers votre backend, le point de terminaison requiert une requête POST avec deux paramètres - votre clé secrète et le jeton zenc-captcha-solution. Vous pouvez optionnellement inclure l'adresse email de l'utilisateur &email=xxx@example.com pour vérifier si l'utilisateur utilise une adresse email jetable ou invalide. Cette option n'est disponible que pour les plans payants.

Réponse de l'API

La réponse de vérification

La réponse à la requête POST indique si la solution CAPTCHA (jeton) est valide.

  • La réponse est un objet JSON.

La réponse vous donnera également le code pays de l'utilisateur (codes ISO 3166-1 alpha-2), la validité de l'adresse électronique de l'utilisateur et un score de fraude de 0 à 99 pour chaque utilisateur. Les scores compris entre 0 et 55 sont acceptables, tandis que les scores compris entre 55 et 99 indiquent que l'utilisateur peut être frauduleux. Ne vous fiez pas au score, il doit seulement vous aider à identifier les utilisateurs potentiellement frauduleux sur la base de leur activité sur votre site.

json
{
"success":true|false, //true si la validation est réussie
"message":"XXX", //"valid" ou un autre message d'erreur
"fraudscore":XXX, //nombre entre 0 et 99
"countrycode":"XXX", //code pays à deux lettres ex. "FR", "DE"
"emailvalid":"XXX" //`none`, `valid_email`, `invalid_email`, `disposable_email` ou `upgrade_plan`
}
//"success":true et "message":"valid" Cela signifie que la solution est correcte => accepter l'utilisateur
Validité de la solution

Les solutions ne peuvent être validées qu'une seule fois et seront ensuite marquées comme invalides ou dupliquées. Les solutions ne sont également valides que pendant 5 minutes, après quoi elles seront marquées comme invalides. Si vous avez besoin d'une nouvelle solution, vous devez réinitialiser le captcha (zencap.reset()) et le relancer (zencap.start()).

Résumé de la réponse à la requête POST

Clé de réponseDescription
successSi true, la solution était correcte, il n'est pas nécessaire de vérifier le champ message. Si false, la solution était invalide, dupliquée ou a expiré plus d'infos dans "message" .
messageSi "valid", alors la solution était correcte. Si "timeout_or_duplicate", alors la solution a déjà été validée ou a dépassé le temps imparti. Si "invalid_solution", alors la solution n'est pas valide. D'autres codes d'erreur sont possibles.
fraudscoreUne valeur de 0-55 est acceptable, 55-99 signifie que l'utilisateur pourrait être un spammeur sur la base d'une activité frauduleuse potentielle. Cependant, une valeur de 0-55 ne signifie pas que l'utilisateur n'est pas un spammeur. A utiliser à vos risques et périls.
countrycodeCodes pays à deux lettres des utilisateurs définis dans ISO 3166-1 - (ISO 3166-1 alpha-2 codes). Par exemple, l'Allemagne "DE", la France "FR", etc
emailvalid"valid_email" est parfait, "invalid_email" ou "disposable_email" n'est pas bon. "disposable_email" signifie que l'utilisateur a essayé d'utiliser une adresse email jetable (100% sûr). "none" signifie que vous n'avez peut-être pas fourni d'adresse e-mail. "upgrade_plan" signifie que vous devez mettre à jour votre plan

Exemples complets de backend

PHP
$email = $_POST['email'];
$password = $_POST['password'];
$captcharesponse = $_POST['zenc-captcha-solution'];

$secret = "VOTRE-CLÉ-SECRÈTE"; //ne jamais partager votre clé secrète

$data = array(
"response" => $captcharesponse,
"secret" => $secret,
"email" => $email,
);

$options = array(
"http" => array(
"header" => "Content-type: application/x-www-form-urlencoded",
"method" => "POST",
"content" => http_build_query($data),
),
);

$context = stream_context_create($options);
$verify = file_get_contents("https://www.zencaptcha.com/captcha/siteverify", false, $context);
$captcha_success = json_decode($verify);

if ($captcha_success->success==false) {
//mauvaise solution - ne pas continuer
exit();
}
else{
//solution correcte - continuez avec votre code
//$captcha_success->fraudscore (obtenir le score)
//$captcha_success->countrycode (obtenir le code pays des utilisateurs)
//$captcha_success->emailvalid (vérifier l'adresse e-mail des utilisateurs)
}