Bonjour à tous,
J'ai un soucis avec la librairie reCaptcha:
Tout d'abord sur ma première page ("register1.php"), aucun soucis, le captcha fonctionne bien, et la vérification ("verif.php") est Ok.
Pourtant, si je passe par ma seconde page ("register2.php" - page spéciale pour offre promo), mal grès que le script de vérification soit le même ("verif.php"), celui-ci me retourne toujours la même erreur: "invalid-request-cookie"
D'après la documentation, il s’agirait du champs "challenge" qui est mal renseigné... et pourtant, dans mon dernier test encore, sur la page de "register2.php" je récupère bien le "challenge id", et celui ci est correctement envoyé à mon script "verif.php" en post. Et les datas envoyés au script de vérification de google sont les mêmes que pour mon register1.php, à savoir:
Dans firebug, lorsque je regarde dans l'onglet réseaux, c'est bien le challenge id que j'avais sur ma page de formulaire (et celui-ci me permet d'ailleurs d'actualiser le captcha sans problème).
Code : Sélectionner tout - Visualiser dans une fenêtre à part privatekey=[**private-key**]&remoteip=[**remote-addr**]&challenge=03AHJ_Vuus555tyU9v1hoQrZ3PePNMB1CAhkR5VG0yIvodEd1_K6LymD1gece9PCixCSB8jdA7mWGuMyXMApikpqDs1e03vOvO17Wn2CVkDa1FYglZD3poLFDrJ0AIVeo0k14lakt1wQfM1H_K-bCS-iEEPNjDbHmEGindviUsmw4gvvGZZ6HRW1c&response=but requama"
Pourtant, la réponse est toujours la même:
J'ai déjà fait tout le tour de tout les sujets des 5 premières pages google à ce sujet, et n'ai toujours trouvé aucune solution :'(
Code : Sélectionner tout - Visualiser dans une fenêtre à part array(2) { [0]=> string(5) "false" [1]=> string(22) "invalid-request-cookie" }
Tout ce que j'ai pu trouver sont des solutions qui ne me concerne pas, comme par exemple, une différence d'appel du nom de domaine ("http:// et https://" ou "http://domaine.com" et "http://www.domaine.com"), mais cela n'est pas mon cas.
Ressources:
Voici mon code de vérification au cas ou cela pourrait servir (bien que je ne pense pas puisque celui ci fonctionne avec la première page):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 if(!empty($post['challenge']) && !empty($post['response'])) { $data = 'privatekey='.RECAPTCHA_PRIVATE_KEY.'&remoteip='.$_SERVER["REMOTE_ADDR"]."&challenge=".$post['challenge']."&response=".$post['response']; var_dump($data); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, "http://www.google.com/recaptcha/api/verify"); curl_setopt($curl, CURLOPT_VERBOSE, 0); curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); $reponse = curl_exec($curl); curl_close($curl); $resultat = explode("\n",$reponse); if($resultat[0] != 'true') { var_dump($resultat); die("buggué"); $session->addError('Captcha incorrect'); $this->_redirectUrl($_SERVER['HTTP_REFERER'].'?error='.$resultat[1]); return; } die("passé");
Et la source (épurée) de ma page sur laquelle la verification ne marche pas:
(les onClick du boutons submit servent à donner les bonnes valeurs au champs "challenge" et "response", utilisé dans le script de vérification à la place de "recaptcha_challenge_field" et de "recaptcha_response_field" (ne me demandez pas pourquoi, je reprends le travail de quelqu'un d'autre ^^ - mais en tout cas ça fonctionne)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <script type="text/javascript" src="/js/default/register-form.js"></script> <script type="text/javascript" src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"></script> </head> <body class="landing-index-index"> <div id="container"> <section id="content"> <div id="fb-root"></div> <div id="page" class="landing"> <div class="landing_registration right"> <form id="registration" autocomplete="off" action="register/registry/type/1/" method="post"> <ul> <li> <div id="recaptcha_div" style="float:right;"></div> <script> $j(document).ready(function(){ showRecaptcha('recaptcha_div'); }); </script> <input type="hidden" name="challenge" value="0" id="challenge" /> <input type="hidden" name="response" value="0" id="response" /> </li> <li class="space"></li> <li> <div class="registration_content"> <input name="registration" type="submit" onClick="$j('#challenge').val(Recaptcha.get_challenge());$j('#response').val(Recaptcha.get_response());" value="" /> </div> </li> </ul> </form> </div> </div> </section> </div> </body> </html>
Et, pour finir, ma petite fonction JS:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 function showRecaptcha(element) { Recaptcha.create( "*pub-key*", element, { theme: "blackglass", callback: Recaptcha.focus_response_field } ); }
Des idées ? Des pistes ?
Help plz !
Partager