Invisible recaptcha register form magento

This tutorial explains how to add Invisible recaptcha register form magento 1.9. Please use the server side validation.

google-invisible-recaptcha-register-magento

<?php
class Addpeople_Validatecaptcha_Model_Customer_Customer extends Mage_Customer_Model_Customer
{
    /**
     * Validate customer attribute values.
     * For existing customer password + confirmation will be validated only when password is set (i.e. its change is requested)
     *
     * @return bool
     */
    public function validate()
    {
        $errors = array();
        if (!Zend_Validate::is( trim($this->getFirstname()) , 'NotEmpty')) {
            $errors[] = Mage::helper('customer')->__('The first name cannot be empty.');
        }

        if (!Zend_Validate::is( trim($this->getLastname()) , 'NotEmpty')) {
            $errors[] = Mage::helper('customer')->__('The last name cannot be empty.');
        }

        if (!Zend_Validate::is($this->getEmail(), 'EmailAddress')) {
            $errors[] = Mage::helper('customer')->__('Invalid email address "%s".', $this->getEmail());
        }

        $password = $this->getPassword();
        if (!$this->getId() && !Zend_Validate::is($password , 'NotEmpty')) {
            $errors[] = Mage::helper('customer')->__('The password cannot be empty.');
        }
        if (strlen($password) && !Zend_Validate::is($password, 'StringLength', array(self::MINIMUM_PASSWORD_LENGTH))) {
            $errors[] = Mage::helper('customer')
                ->__('The minimum password length is %s', self::MINIMUM_PASSWORD_LENGTH);
        }
        if (strlen($password) && !Zend_Validate::is($password, 'StringLength', array('max' => self::MAXIMUM_PASSWORD_LENGTH))) {
            $errors[] = Mage::helper('customer')
                ->__('Please enter a password with at most %s characters.', self::MAXIMUM_PASSWORD_LENGTH);
        }
        $confirmation = $this->getPasswordConfirmation();
        if ($password != $confirmation) {
            $errors[] = Mage::helper('customer')->__('Please make sure your passwords match.');
        }

        $entityType = Mage::getSingleton('eav/config')->getEntityType('customer');
        $attribute = Mage::getModel('customer/attribute')->loadByCode($entityType, 'dob');
        if ($attribute->getIsRequired() && '' == trim($this->getDob())) {
            $errors[] = Mage::helper('customer')->__('The Date of Birth is required.');
        }
        $attribute = Mage::getModel('customer/attribute')->loadByCode($entityType, 'taxvat');
        if ($attribute->getIsRequired() && '' == trim($this->getTaxvat())) {
            $errors[] = Mage::helper('customer')->__('The TAX/VAT number is required.');
        }
        $attribute = Mage::getModel('customer/attribute')->loadByCode($entityType, 'gender');
        if ($attribute->getIsRequired() && '' == trim($this->getGender())) {
            $errors[] = Mage::helper('customer')->__('Gender is required.');
        }

        if( Mage::getStoreConfig('validate_captcha/server_side_validation/enabled') ) {
            $errors = $this->validateCaptcha($errors);
        }

        if (empty($errors)) {
            return true;
        }
        return $errors;
    }

    private function validateCaptcha( $errors ) {

        /* additional reCAPTCHA validation */

        $action = Mage::app()->getRequest()->getActionName();
        if ( $action == 'createpost' ) {

            $captcha = Mage::app()->getRequest()->getPost('g-recaptcha-response', 1);
            if ( $captcha == '' ) {

                $errors[] = Mage::helper('customer')->__('Please check the reCAPTCHA field to continue.');
            } else {
                $params = array();
                $params['secret'] =  Mage::getStoreConfig('validate_captcha/server_side_validation/secret_key');
                $params['response'] = Mage::app()->getRequest()->getPost('g-recaptcha-response', 1);
                $params['remoteip'] = $_SERVER['REMOTE_ADDR'];

                $params_string = http_build_query($params);
                $url = 'https://www.google.com/recaptcha/api/siteverify?'.$params_string;

                $ch = curl_init();
                curl_setopt( $ch, CURLOPT_URL, $url );
                curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1);
                $response = curl_exec( $ch );

                $result = json_decode( $response, true );
                if ( trim( $result['success'] ) != true ) {

                    // This will be shown at the top of the registration page
                    $errors[] = Mage::helper('customer')->__('reCAPTCHA unable to verify.');
                }
            }
        }

        return $errors;

    }

}
        

Layout and config file

<models>
      <validatecaptcha>
        <class>Addpeople_Validatecaptcha_Model</class>
        <resourceModel>validatecaptcha_mysql4</resourceModel>
      </validatecaptcha>
            <customer>
                <rewrite>
                    <customer>Addpeople_Validatecaptcha_Model_Customer_Customer</customer>
                </rewrite>
            </customer>
    </models>
    
    Layout file
    
    <customer_account_create>
    <reference name="form.additional.info">
      <block type="core/template" name="captcha_js" template="validatecaptcha/captchajs.phtml" />
      <block type="core/template" name="validate_captcha" template="validatecaptcha/index.phtml"/>
    </reference>
  </customer_account_create>

Please refer tutorials explains how to add recaptcha for magento login section.

Share this Tutorial

Leave a Reply

Your email address will not be published. Required fields are marked *