Jump to content

Problème de vérification réponse utilisateurs reCAPTCHA v2 Google


Recommended Posts

Bonjour tout le monde, je suis sur la fin d'un développement de module qui utilise reCAPTCHA v2 Google, je souhaite vraiment aboutir cela et non pas télécharger un module tout fait.

Tout est ok jusqu'au moment de la vérification du token de l'API, lorsque je rafraichi le formulaire de contact j'ai mon message d'erreur que j'ai défini dans le controleur natif du formulaire de contact "ContactController"

image.png.acbfbc1281098e1dfb693ffd6539fa9e.png

 

Le problème c'est qu'il ne devrait pas avoir ce message, voici la fonction postProcess que j'ai crée dans le controller de ce même formulaire de contact :

 

public function postProcess()
{
    parent::postProcess();

    // Vérifier si le token reCAPTCHA a été soumis
    if (Tools::isSubmit('g-recaptcha-response')) {
        $token = Tools::getValue('g-recaptcha-response');

        // Vérifier le token reCAPTCHA avec l'API de reCAPTCHA
        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, "https://www.google.com/recaptcha/api/siteverify");
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
            'secret' => 'SECRET_KEY_V2',
            'response' => $token,
        ]));

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        $data = curl_exec($ch);

        curl_close($ch);

        $response = @json_decode($data);

        if ($response && $response->success) {
            // Le reCAPTCHA est validé, vous pouvez continuer avec le traitement du formulaire
        } else {
            // Le reCAPTCHA est invalide, ajoutez une erreur pour informer l'utilisateur
            $this->errors[] = $this->trans('La vérification reCAPTCHA a échoué. Veuillez réessayer.', [], 'Shop.Notifications.Error');
        }
    } else {
        // Aucun token reCAPTCHA n'a été soumis
        $this->errors[] = $this->trans('Aucun token reCAPTCHA soumis.', [], 'Shop.Notifications.Error');
    }
}

 

Impossible de vérifier la réponse utilisateur, le formulaire ne s'envoie plus, même si je valide bien le reCAPTCHA v2, j'ai l'erreur vérification à échoué. 

Voici mon fichier JS :

 

window.onload = function() {
    document.addEventListener("DOMContentLoaded", function () {
        var form = document.querySelector("form.contact-form");
        var submitButton = form.querySelector("#send");

        // Désactiver le bouton "Envoyer" par défaut
        submitButton.disabled = true;

        // Ajouter un gestionnaire d'événements pour la soumission du formulaire
        form.addEventListener("submit", function (event) {
            // Récupérer la réponse du reCAPTCHA v2 Checkbox
            var recaptchaResponse = document.getElementById('g-recaptcha-response').value;
        });

        // Activer le bouton "Envoyer" lorsque le reCAPTCHA v2 Checkbox est cochée
        grecaptcha.ready(function () {
            grecaptcha.execute("PUBLIC_SITE_KEY_V2", { action: "submitMessage" }).then(function (token) {
                // Vérifier si le reCAPTCHA v2 Checkbox est cochée
                if (token) {
                    submitButton.disabled = false;
                    recaptchaResponse = token;
                }
            });
        });
    });
}

 

Si quelqu'un peut m'aider à solutionner cela, impossible de mettre la main sur l'erreur, j'ai aucune erreur en console ni en mode debug sur PrestaShop.

Merci à vous et bonne journée !

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...