2016-05-11 12 views
2

Ich versuche google reCaptcha zu Prestashop opc Registrierungsseite hinzufügen, ich habe die Checkbox Setup und es funktioniert aber die PHP-Datei erhält nicht die Captcha-Antwort. Lassen Sie mich erklären. Hier ist, was ich bisher getan: In meiner header.tpl Ich habePrestashop - AuthController.php empfängt keine Eingabewerte

<script src='https://www.google.com/recaptcha/api.js'></script> 

Um-opc-new-account.tpl, fügte ich

<div class="g-recaptcha" data-sitekey="[my_public_key]"></div> 

In meinem AuthController.php ich hinzugefügt

if (Tools::isSubmit('submitAccount') OR Tools::isSubmit('submitGuestAccount')) //if statement was already present 
{ 
    // captcha code I added 
    $reCaptchaUrl='https://www.google.com/recaptcha/api/siteverify'; 
    $reCaptchaSecret = '[my_secret_key]'; 
    $reCaptchaResponse = $_POST['g-recaptcha-response']; 
    $ip = $_SERVER['REMOTE_ADDR']; 

    $verifyCaptcha = file_get_contents($reCaptchaUrl."?secret=".$reCaptchaSecret."&response=".$reCaptchaResponse."&remoteip=".$ip); 
    $captchaReply = json_decode($verifyCaptcha); 

    if(isset($captchaReply->success) AND $captchaReply->success == true){ 
     $logger = new FileLogger(0); 
     $logger->setFilename(_PS_ROOT_DIR_."/log/debug.log"); 
     $logger->logDebug("Captcha was successful: ".$reCaptchaResponse); 
    } else { 
     //captcha failed 
     $logger = new FileLogger(0); 
     $logger->setFilename(_PS_ROOT_DIR_."/log/debug.log"); 
     $logger->logDebug("Captcha failed: ".$reCaptchaResponse); 
    } 

    // ... prestashop registration code 
} 

ich mit den Debug-Nachrichten erfuhr, dass $reCaptchaResponse Variable leer jedes Mal tatsächlich kommt, auch wenn das captcha geprüft wurde. Irgendwelche Ideen warum?

bearbeiten: Das Formular sendet die Daten tatsächlich zu authentication.php, welche die folgenden Zeilen

require(dirname(__FILE__).'/config/config.inc.php'); 
ControllerFactory::getController('AuthController')->run(); 

Meine Vermutung ist, hat, dass dieses Stück Code vorwärts die Formulardaten an AuthController.php aber nur vorwärts Felder Es wurde gesagt, dass er weiterleiten soll. Es erkennt das neue Recaptcha-Feld nicht und leitet diese Daten nicht an die Datei weiter. Also müsste ich herausfinden, wer entscheidet, welche Daten weitergeleitet werden.

+0

hm, vielleicht versuchen '$ reCaptchaResponse = Tools :: getValue ('g-recaptcha-response');'? - bitte verschleiern Sie auch die API-Schlüssel !! – defuzed

+0

Nicht gut, es hat nicht funktioniert. Bitte beachten Sie den ursprünglichen Beitrag für weitere Informationen. Übrigens waren die Schlüssel öffentlich und zu Testzwecken, also habe ich sie nicht versteckt. [Googe Dev Guide] (https://developers.google.com/recaptcha/docs/faq#id-like-to-run-automated-tests-with-recaptcha-v2-what-should-i-do) – VeeK

+0

tat stellen Sie sicher, dass zum Beispiel bei einem Netzwerk-Tab von Entwicklungswerkzeugen die 'g-recaptcha-response' beim Versenden des Formulars gepostet wird? - mein Schlechter, wusste nicht über die Testschlüssel – defuzed

Antwort

2

Stellen Sie sicher, dass sich <div class="g-recaptcha" data-sitekey="6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI"></div> im FORM-Element befindet.

+0

Ja natürlich ist es im Formelement. Meine beste Vermutung ist, dass AuthController die Daten nicht direkt erhält, so dass ich dieses neue Feld nicht erhalte – VeeK