2009-12-11 9 views
7

J'ai besoin d'insérer ReCaptcha sous une forme dans mon application ZF. J'essaie de suivre la documentation officielle, mais le service ReCaptcha me renvoie toujours l'erreur 'incorrect-captcha-sol'. Le code J'utilise:Cadre Zend et ReCaptcha

(sous forme)

// configure the captcha service 
$privateKey = 'XXXXXXXXXXXXXXXXXXX'; 
$publicKey = 'YYYYYYYYYYYYYYYYYYYY'; 
$recaptcha = new Zend_Service_ReCaptcha($publicKey, $privateKey); 

// create the captcha control 
$captcha = new Zend_Form_Element_Captcha('captcha', 
           array('captcha' => 'ReCaptcha', 
             'captchaOptions' => array(
              'captcha' => 'ReCaptcha', 
              'service' => $recaptcha))); 

$this->addElement($captcha); 

(Dans le contrôleur)

$recaptcha = new Zend_Service_ReCaptcha('YYYYYYYYYYYYY', 'XXXXXXXXXXXXXXX'); 

$result = $recaptcha->verify($this->_getParam('recaptcha_challenge_field'), 
          $this->_getParam('recaptcha_response_field')); 

if (!$result->isValid()) { 
    //ReCaptcha validation error 
} 

Toute aide s'il vous plaît?

Répondre

20

Pourquoi tirez-vous un élément séparé du formulaire pour faire un contrôle? Voici comment je fais ceci:

Formulaire

<?php 
class Default_Form_ReCaptcha extends Zend_Form 
{ 
    public function init() 
    { 
     $publickey = 'YOUR KEY HERE'; 
     $privatekey = 'YOUR KEY HERE'; 
     $recaptcha = new Zend_Service_ReCaptcha($publickey, $privatekey); 

     $captcha = new Zend_Form_Element_Captcha('captcha', 
      array(
       'captcha'  => 'ReCaptcha', 
       'captchaOptions' => array('captcha' => 'ReCaptcha', 'service' => $recaptcha), 
       'ignore' => true 
       ) 
     ); 

     $this->addElement($captcha); 

     $this->addElement('text', 'data', array('label' => 'Some data')); 
     $this->addElement('submit', 'submit', array('label' => 'Submit')); 
    } 
} 

Contrôleur

$form = new Default_Form_ReCaptcha(); 

if ($this->getRequest()->isPost()===true) { 
    if($form->isValid($_POST)===true) { 
     $values = $form->getValues(); 
     var_dump($values); 
     die(); 
    } 
} 

$this->view->form = $form 

Voir

echo $this->form; 

Cette est un code assez transparent ici. Lorsque isValid() du formulaire est exécuté, il valide tous ses éléments et renvoie true uniquement si chacun d'entre eux est valide. Bien sûr, assurez-vous que les clés que vous utilisez sont pertinentes pour le domaine dans lequel vous exécutez ce code. Faites-moi savoir si vous avez d'autres questions.

+0

Vous avez raison! Merci beaucoup! Tu m'as sauvé! :) – Stefano

16

Je suivais le démarrage rapide à the zend site, et pour moi ce qui suit était beaucoup plus rapide changement du captcha 'Figlet'.

$this->addElement('captcha', 'captcha', array(
     'label' => 'Please enter two words displayed below:', 
     'required' => true, 
     'captcha' => array(
      'pubkey' => '---your public key here---', 
      'privkey' => '---your private key here---', 
      'captcha' => 'reCaptcha' 
     ) 
    )); 
+4

+1 - beaucoup plus simple que la réponse acceptée –

+0

Cela devrait être la réponse acceptée. Je l'ai utilisé, et cela a parfaitement fonctionné. Le moyen le plus simple pour reCaptcha. Merci mon pote;) –

+0

+1 bonne réponse :) –