Подключение Google ReCapcha в PS 1.7 без модуля

Надо было установить версию 0.4.0.9 и обновить до 2.0.2, только тогда капча проявилась, но нарисовалась другая проблема, отправляет письмо даже если не нажать "Я не робот" то есть можно отправить без капчи, у кого так же?
 
Не ставится, как уже говорил в посте, который вы процитировали.

Что не ставится то? я там скинул ссылку на летну где рассказано что и как нужно делать - модули ставить никакие и не нужно. Ручками прописать нужно. Делов на 3 минуты. Если есть конкретные вопросы - пишите, подскажу.
 
Что не ставится то? я там скинул ссылку на летну где рассказано что и как нужно делать - модули ставить никакие и не нужно. Ручками прописать нужно. Делов на 3 минуты. Если есть конкретные вопросы - пишите, подскажу.
Там инструкция, которая включает в себя установку модуля EICAPTCHA. Он и не ставится.
 
Там инструкция, которая включает в себя установку модуля EICAPTCHA. Он и не ставится.

Ладно, я понял что описать лучше сразу все, заодно и себе на проект поставлю:
1. Идем на сайт гугла - регистрируем новую рекапчу2 и получаем ключи.
2. Подключаем JS в head.tpl используемого шаблона
у меня стоит шаблон трансформер вот путь до этого файла - ваш_сайт/themes/transformer/templates/_partials (у вас путь может быть другим, в зависимости от шаблона)
- в head.tpl нужно добавить строку:
HTML:
<script src='https://www.google.com/recaptcha/api.js'></script>
Можно в любое место, но лучше в самый конец перед закрывающим тегом.
3. Выводим капчу в форме обратной связи
В файле contactform.tpl путь: ваш_сайт/themes/transformer/modules/contactform/views/templates/widget (у вас путь может быть другим, в зависимости от шаблона)
Вставляем
HTML:
<div class="text-right g-recaptcha" data-sitekey="ваш Ключ с сайта капчи (который слева)"></div>
я добавил перед закрывающим тегом </section>
4. Добавляем обработку капчи в ContactController.php
Добавляем в файле ContactController.php путь ваш_сайт/controllers/front
Код:
parent::initContent();
       
        $this->setTemplate('contact');
        function SiteVerify($url){
                $curl = curl_init();
                curl_setopt($curl, CURLOPT_URL, $url);
                curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
                $curlData = curl_exec($curl);
                curl_close($curl);
                return $curlData;
            }

            $recaptcha = Tools::getValue('g-recaptcha-response');

            if(!empty($recaptcha)){
                $google_url="https://www.google.com/recaptcha/api/siteverify";
                $secret='Ваш Секретный ключ с сайта капчи (который справа)';
                $ip=$_SERVER['REMOTE_ADDR'];
                $url=$google_url."?secret=".$secret."&response=".$recaptcha."&remoteip=".$ip;
                $res=SiteVerify($url);
                $res= json_decode($res, true);
         
                if(!$res['success']){
                  exit();
                }
            }
            else{
              $this->errors[] = Tools::displayError('Отметьте галочкой, что Вы не робот, пожалуйста');
            }
вставляем сразу после $this->setTemplate('contact');
Это строка 41

Профит! Идем на сайт, переходим на страницу с контактной формой и проверяем работу:
Видим что капча висит, кстати забыл сказать что вывести ее лучше где то рядом с кнопкой и потом поправить стилями для красоты
Скрытое содержимое доступно для зарегистрированных пользователей!

Проверяем форму на отправку без галочки капчи:
Скрытое содержимое доступно для зарегистрированных пользователей!

Ну и проверяем с галочкой ;)
Скрытое содержимое доступно для зарегистрированных пользователей!
 
Ладно, я понял что описать лучше сразу все, заодно и себе на проект поставлю:

Если ecapcha поставить, то два первых пункта не нужно, надо только в ContactController.php внести изменения. У меня правда сразу при входе не страницу отправки сообщения появляется предупреждающая надпись про робота, у всех так?

Скрытое содержимое доступно для зарегистрированных пользователей!
 
Последнее редактирование:
Ладно, я понял что описать лучше сразу все, заодно и себе на проект поставлю:
1. Идем на сайт гугла - регистрируем новую рекапчу2 и получаем ключи.
2. Подключаем JS в head.tpl используемого шаблона
у меня стоит шаблон трансформер вот путь до этого файла - ваш_сайт/themes/transformer/templates/_partials (у вас путь может быть другим, в зависимости от шаблона)
- в head.tpl нужно добавить строку:
HTML:
<script src='https://www.google.com/recaptcha/api.js'></script>
Можно в любое место, но лучше в самый конец перед закрывающим тегом.
3. Выводим капчу в форме обратной связи
В файле contactform.tpl путь: ваш_сайт/themes/transformer/modules/contactform/views/templates/widget (у вас путь может быть другим, в зависимости от шаблона)
Вставляем
HTML:
<div class="text-right g-recaptcha" data-sitekey="ваш Ключ с сайта капчи (который слева)"></div>
я добавил перед закрывающим тегом </section>
4. Добавляем обработку капчи в ContactController.php
Добавляем в файле ContactController.php путь ваш_сайт/controllers/front
Код:
parent::initContent();
      
        $this->setTemplate('contact');
        function SiteVerify($url){
                $curl = curl_init();
                curl_setopt($curl, CURLOPT_URL, $url);
                curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
                $curlData = curl_exec($curl);
                curl_close($curl);
                return $curlData;
            }

            $recaptcha = Tools::getValue('g-recaptcha-response');

            if(!empty($recaptcha)){
                $google_url="https://www.google.com/recaptcha/api/siteverify";
                $secret='Ваш Секретный ключ с сайта капчи (который справа)';
                $ip=$_SERVER['REMOTE_ADDR'];
                $url=$google_url."?secret=".$secret."&response=".$recaptcha."&remoteip=".$ip;
                $res=SiteVerify($url);
                $res= json_decode($res, true);
        
                if(!$res['success']){
                  exit();
                }
            }
            else{
              $this->errors[] = Tools::displayError('Отметьте галочкой, что Вы не робот, пожалуйста');
            }
вставляем сразу после $this->setTemplate('contact');
Это строка 41

Профит! Идем на сайт, переходим на страницу с контактной формой и проверяем работу:
Видим что капча висит, кстати забыл сказать что вывести ее лучше где то рядом с кнопкой и потом поправить стилями для красоты

Проверяем форму на отправку без галочки капчи:

Ну и проверяем с галочкой ;)

Спасибо, теперь уже на что-то похоже, НО:
1) Постоянно сверху формы присутствует красная плашка, мол, подтвердите;
2) Сама капча функционирует (без галки не шлётся, с галкой шлётся), но выводит ещё одну красную плашку, несмотря на то, что всё отсылается, соответственно, создаётся впечатление, что капча не пройдена.
20rs5rn.jpg

У меня шаблон Warehouse, пути к файлам те же самые, их содержание, видимо, тоже примерно одинаковое.
 
Спасибо, теперь уже на что-то похоже, НО:
1) Постоянно сверху формы присутствует красная плашка, мол, подтвердите;
2) Сама капча функционирует (без галки не шлётся, с галкой шлётся), но выводит ещё одну красную плашку, несмотря на то, что всё отсылается, соответственно, создаётся впечатление, что капча не пройдена.

У меня шаблон Warehouse, пути к файлам те же самые, их содержание, видимо, тоже примерно одинаковое.

Да у меня то же самое, +еще проблема, спам письма на почту не приходят, но остаются в разделе "Клиентская служба", то есть там весь этот спам накапливается, вроде надо какие то классы к кнопке 'отправить' добавить.
 
  • Нравится
Реакции: sche
Такая же история.
Извините! Не следил за темой, к сожалению.

забыл написать последний пункт - проверки капчи в файле по пути: /modules/contactform/ contactform.php

замените этот код:
Код:
if (Tools::isSubmit('submitMessage')) {
           
            {$this->sendMessage();}

на этот:
Код:
if (Tools::isSubmit('submitMessage')) {
           
            if (($gcaptcha = (int)(Tools::getValue('g-recaptcha-response'))) == 0) {
                        $this->errors[] = $this->trans('Please complete reCaptcha', array(), 'Admin.Login.Notification');
                        }
           
            else {$this->sendMessage();}

Еще раз простите акаянного, читаю форум мельком...
 
Извините! Не следил за темой, к сожалению.

забыл написать последний пункт - проверки капчи в файле по пути: /modules/contactform/ contactform.php

замените этот код:
Код:
if (Tools::isSubmit('submitMessage')) {
          
            {$this->sendMessage();}

на этот:
Код:
if (Tools::isSubmit('submitMessage')) {
          
            if (($gcaptcha = (int)(Tools::getValue('g-recaptcha-response'))) == 0) {
                        $this->errors[] = $this->trans('Please complete reCaptcha', array(), 'Admin.Login.Notification');
                        }
          
            else {$this->sendMessage();}

Еще раз простите акаянного, читаю форум мельком...

Такая же ситуация, даже после добавления вашего кода. Надпись о капче "Отметьте галочкой, что Вы не робот, пожалуйста"
не исчезает.
Тема warehouse, преста 17.2.4,
 
Назад
Сверху