Как добавить reCaptcha на форму контакта в Prestashop

В послед­нее вре­мя кон­такт­ные фор­мы Пре­ста­шо­па (по край­ней мере 1.6) мощ­но спа­мять­ся, при­чём исполь­зу­ет­ся код отправ­ки напря­мую в кон­трол­лер, так как там отсут­ству­ет какая-либо про­вер­ка на запол­не­ние фор­мы, про­сто поля про­ве­ря­ют­ся на валид­ность”. Мож­но решить про­бле­му встав­кой про­вер­ки Я не робот” от Гугла.

Пер­вый шаг — это полу­че­ние клю­чей для рабо­ты сер­ви­са, дела­ет­ся это на сай­те Гуг­ла, разу­ме­ет­ся https://​www​.google​.com/​r​e​c​a​p​t​c​h​a​/​admin. Выбрать необ­хо­ди­мо пер­вый вари­ант reCaptcha v2, в поле Доме­ны запол­ня­ем все доме­ны на кото­рых будут про­ве­рять­ся форма

получение ключей для reCaptcha

Вто­рой шаг — это нажать Сохра­не­ние и полу­чить клю­чи для работы.

получение ключей для reCaptcha

Тре­тий шаг — редак­ти­ру­ем фор­му в шаб­лоне сай­та Пре­ста­шо­па contact-form.html, нуж­но доба­вить в неё div с пер­вым клю­чом от Гуг­ла (при­мер из стан­дарт­но­го шаблона)

<div class="col-xs-12 col-md-9">
    <div class="form-group">
        <label for="message">{l s='Message'}</label>
        <textarea class="form-control" id="message" name="message">{if isset($message)}{$message|escape:'html':'UTF-8'|stripslashes}{/if}</textarea>
    </div>
</div>
<div class="g-recaptcha col-xs-12 col-md-9" data-sitekey="ЗДЕСЬ ЗНАЧЕНИЕ КЛЮЧ"></div>

И теперь основ­ная магия — созда­ние про­вер­ки в кон­трол­ле­ре ContactController.php, созда­ём новый файл override/controllers/front/ContactController.php со сле­ду­ю­щим содержимым:

<?php
class ContactController extends ContactControllerCore
{

    protected function verifyCaptcha($data, $ip = null) {
        $params = [
            'secret' => 'ЗДЕСЬ ЗНАЧЕНИЕ СЕКРЕТНЫЙ КЛЮЧ',
            'response' => $data
        ];

        if ($ip) {
            $params['remoteip'] = $ip;
        }

        $url = 'https://www.google.com/recaptcha/api/siteverify?' . http_build_query($params);
        $response = json_decode(file_get_contents($url));
        return $response->success;
    }

    public function postProcess()
    {
        if (Tools::isSubmit('submitMessage')) {
            $g_recaptcha_response = Tools::getValue('g-recaptcha-response');
            $response = $this->verifyCaptcha($g_recaptcha_response, Tools::getRemoteAddr());
            if (!$response)
                $this->errors[] = Tools::displayError('You must be a human.');
        }
        parent::postProcess();
    }

    public function setMedia()
    {
        parent::setMedia();
        $this->addJS('https://www.google.com/recaptcha/api.js', false);
    }
}

Чистим из админ­ки кеш сай­та и насла­жда­ем­ся отсут­стви­ем спама.

reCaptcha на форму контакта в Prestashop

Поделиться / сохранить

Comments