Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

Пишу готовое решение reCAPTCHA API 2.0 - с темы от СЮДА - то есть, тут инструкция есть но она для опытных людей хорошо знающих PHP - код. Я долго разбирался и выкладываю решение для новичков!

 

 

1 Заходим на сайт https://www.google.com/recaptcha/admin
Получаем ключи, которые потом будет записывать в админке в разделе "Настройки"

 

1.1 Загружаем файлы в папку captcha

2. Открываем файл \simpla\SettingsAdmin.php

добавляем:

/* ReCaptcha */
$this->settings->site_code = $this->request->post('site_code');            
$this->settings->secret_code = $this->request->post('secret_code');    

// Простые звонки

 

3. открываем файл  simpla\design\html\settings.tpl

ищем:

<h2>Интеграция с <a href="http://prostiezvonki.ru">простыми звонками</a></h2>

и перед ним вставляем:

<h2>Управление <a href="https://www.google.com/recaptcha/admin">ключами ReCaptcha API</a></h2>            
<ul>                    
    <li><label class=property>Ключ</label><input name="site_code" class="simpla_inp" type="text" value="{$settings->site_code|escape}" /></li>
    <li><label class=property>Секретный ключ</label><input name="secret_code" class="simpla_inp" type="text" value="{$settings->secret_code|escape}" /></li>            
</ul> 

4. Открываем файл \view\View.php

после:

require_once('api/Simpla.php');

вставляем:

require_once('api/Simpla.php');
require_once('captcha/autoload.php');

5. Открываем файл \view\CartView.php

после:

24: parent::__construct();

вставляем:

$response = null;
$reCaptcha = new \ReCaptcha\ReCaptcha($this->settings->secret_code);

ВМЕСТО:

60: $captcha_code =  $this->request->post('captcha_code', 'string');

вставляем:

///////////////////////////////////////
        //Re Captcha
		$captcha_code =  $this->request->post('g-recaptcha-response');
		$response = $reCaptcha->verify($captcha_code, $order->ip);
///////////////////////////////////////////

ВМЕСТО:

84: elseif($_SESSION['captcha_code'] != $captcha_code || empty($captcha_code))

вставляем:

elseif($response->getErrorCodes())

5.1. Открываем файл \view\BlogView.php

ИЩЕМ:

35: private function fetch_post($url)
	{

вставляем:

$response = null;
$reCaptcha = new \ReCaptcha\ReCaptcha($this->settings->secret_code);

ВМЕСТО:

$captcha_code =  $this->request->post('captcha_code', 'string');

вставляем:

$captcha_code =  $this->request->post('g-recaptcha-response');
$response = $reCaptcha->verify($captcha_code, $comment->ip );

ВМЕСТО:

if ($_SESSION['captcha_code'] != $captcha_code || empty($captcha_code))

вставляем:

if($response->getErrorCodes())

ИЩЕМ И УДАЛЯЕМ СТРОКУ

93: unset($_SESSION['captcha_code']);

5.2. Открываем файл \view\FeedbackView.php

ИЩЕМ:

23: $feedback = new stdClass;

перед ним вставляем:

$response = null;
$reCaptcha = new \ReCaptcha\ReCaptcha($this->settings->secret_code);

ВМЕСТО:

27: $captcha_code           = $this->request->post('captcha_code');

вставляем:

$captcha_code =  $this->request->post('g-recaptcha-response');
            $response = $reCaptcha->verify($captcha_code);

ВМЕСТО:

39: elseif(empty($_SESSION['captcha_code']) || $_SESSION['captcha_code'] != $captcha_code || empty($captcha_code))

вставляем:

elseif($response->getErrorCodes())

ИЩЕМ И УДАЛЯЕМ:

54: unset($_SESSION['captcha_code']);

5.3. Открываем файл \view\ProductView.php

ИЩЕМ:

22: $product_url = $this->request->get('product_url', 'string');

перед этой строкой вставляем:

$response = null;
$reCaptcha = new \ReCaptcha\ReCaptcha($this->settings->secret_code); 

ВМЕСТО:

59: $captcha_code =  $this->request->post('captcha_code', 'string');

вставляем:

$captcha_code =  $this->request->post('g-recaptcha-response');
$response = $reCaptcha->verify($captcha_code, $comment->ip );

ВМЕСТО:

66: if ($_SESSION['captcha_code'] != $captcha_code)

вставляем:

if($response->getErrorCodes())

ИЩЕМ И УДАЛЯЕМ:

unset($_SESSION['captcha_code']);

5.4. Открываем файл \view\RegisterView.php

ИЩЕМ:

9: $default_status = 1; // Активен ли пользователь сразу после регистрации (0 или 1)

перед этой строкой вставляем:

$response = null;
$reCaptcha = new \ReCaptcha\ReCaptcha($this->settings->secret_code);

ВМЕСТО:

$captcha_code           = $this->request->post('captcha_code');

вставляем:

$captcha_code =  $this->request->post('g-recaptcha-response');
$response = $reCaptcha->verify($captcha_code);

ВМЕСТО:

32: elseif(empty($_SESSION['captcha_code']) || $_SESSION['captcha_code'] != $captcha_code || empty($captcha_code))

вставляем:

elseif(empty($_SESSION['captcha_code']) || $_SESSION['captcha_code'] != $captcha_code || empty($captcha_code))

6. Открываем файл design\[ваш шаблон]\html\index.tpl  

добавляем:

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

7. Открываем файлы design\[ваш шаблон]\html\cart 

ВМЕСТО:

<div class="captcha"><img src="captcha/image.php?{math equation='rand(10,10000)'}" alt='captcha'/></div>
					<input class="input_captcha text-center" id="comment_captcha" type="text" name="captcha_code" maxlength="5" value="" data-format="\d\d\d\d" data-notice="Введите капчу"/>

вставляем:

<div class="g-recaptcha" data-sitekey="{$settings->site_code|escape}"></div>

7.1 - это же проделываем в  feedback post product register.tpl, - там где Вам надо заменить стандартную капчу на reCAPTCHA API 2.0

 

Не забываем зайди в админку - настройки и применить ключи!

 

Спасибо за внимание!

Ссылка на сообщение
Поделиться на другие сайты

в п4. там нужно вставлять только

require_once('captcha/autoload.php');

а не дублировать еще Simpla.php

require_once('api/Simpla.php');
require_once('captcha/autoload.php');
Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты

Куда проще было бы создать файл Recaptcha.php в папке api и подключить его в api/Simpla.php, далее использовать что-то по типу $this->recaptcha->verify($captcha_code, $order->ip);

Ссылка на сообщение
Поделиться на другие сайты

Noxter, идея хорошая, если бы вы её расписали чуть более конкретней что и куда, можно было бы и так сделать!

Ссылка на сообщение
Поделиться на другие сайты

 

в п4. там нужно вставлять только

require_once('captcha/autoload.php');

а не дублировать еще Simpla.php

require_once('api/Simpla.php');
require_once('captcha/autoload.php');

Спасибо не заметил!

Ссылка на сообщение
Поделиться на другие сайты

Пишу готовое решение reCAPTCHA API 2.0 - с темы от СЮДА - то есть, тут инструкция есть но она для опытных людей хорошо знающих PHP - код. Я долго разбирался и выкладываю решение для новичков!

 

 

1 Заходим на сайт https://www.google.com/recaptcha/admin

Получаем ключи, которые потом будет записывать в админке в разделе "Настройки"

 

1.1 Загружаем файлы в папку captcha

2. Открываем файл \simpla\SettingsAdmin.php

добавляем:

/* ReCaptcha */
$this->settings->site_code = $this->request->post('site_code');            
$this->settings->secret_code = $this->request->post('secret_code');    

// Простые звонки

 

3. открываем файл  simpla\design\html\settings.tpl

ищем:

<h2>Интеграция с <a href="http://prostiezvonki.ru">простыми звонками</a></h2>

и перед ним вставляем:

<h2>Управление <a href="https://www.google.com/recaptcha/admin">ключами ReCaptcha API</a></h2>            
<ul>                    
    <li><label class=property>Ключ</label><input name="site_code" class="simpla_inp" type="text" value="{$settings->site_code|escape}" /></li>
    <li><label class=property>Секретный ключ</label><input name="secret_code" class="simpla_inp" type="text" value="{$settings->secret_code|escape}" /></li>            
</ul> 

4. Открываем файл \view\View.php

после:

require_once('api/Simpla.php');

вставляем:

require_once('api/Simpla.php');
require_once('captcha/autoload.php');

5. Открываем файл \view\CartView.php

после:

24: parent::__construct();

вставляем:

$response = null;
$reCaptcha = new \ReCaptcha\ReCaptcha($this->settings->secret_code);

ВМЕСТО:

60: $captcha_code =  $this->request->post('captcha_code', 'string');

вставляем:

///////////////////////////////////////
        //Re Captcha
		$captcha_code =  $this->request->post('g-recaptcha-response');
		$response = $reCaptcha->verify($captcha_code, $order->ip);
///////////////////////////////////////////

ВМЕСТО:

84: elseif($_SESSION['captcha_code'] != $captcha_code || empty($captcha_code))

вставляем:

elseif($response->getErrorCodes())

5.1. Открываем файл \view\BlogView.php

ИЩЕМ:

35: private function fetch_post($url)
	{

вставляем:

$response = null;
$reCaptcha = new \ReCaptcha\ReCaptcha($this->settings->secret_code);

ВМЕСТО:

$captcha_code =  $this->request->post('captcha_code', 'string');

вставляем:

$captcha_code =  $this->request->post('g-recaptcha-response');
$response = $reCaptcha->verify($captcha_code, $comment->ip );

ВМЕСТО:

if ($_SESSION['captcha_code'] != $captcha_code || empty($captcha_code))

вставляем:

if($response->getErrorCodes())

ИЩЕМ И УДАЛЯЕМ СТРОКУ

93: unset($_SESSION['captcha_code']);

5.2. Открываем файл \view\FeedbackView.php

ИЩЕМ:

23: $feedback = new stdClass;

перед ним вставляем:

$response = null;
$reCaptcha = new \ReCaptcha\ReCaptcha($this->settings->secret_code);

ВМЕСТО:

27: $captcha_code           = $this->request->post('captcha_code');

вставляем:

$captcha_code =  $this->request->post('g-recaptcha-response');
            $response = $reCaptcha->verify($captcha_code);

ВМЕСТО:

39: elseif(empty($_SESSION['captcha_code']) || $_SESSION['captcha_code'] != $captcha_code || empty($captcha_code))

вставляем:

elseif($response->getErrorCodes())

ИЩЕМ И УДАЛЯЕМ:

54: unset($_SESSION['captcha_code']);

5.3. Открываем файл \view\ProductView.php

ИЩЕМ:

22: $product_url = $this->request->get('product_url', 'string');

перед этой строкой вставляем:

$response = null;
$reCaptcha = new \ReCaptcha\ReCaptcha($this->settings->secret_code); 

ВМЕСТО:

59: $captcha_code =  $this->request->post('captcha_code', 'string');

вставляем:

$captcha_code =  $this->request->post('g-recaptcha-response');
$response = $reCaptcha->verify($captcha_code, $comment->ip );

ВМЕСТО:

66: if ($_SESSION['captcha_code'] != $captcha_code)

вставляем:

if($response->getErrorCodes())

ИЩЕМ И УДАЛЯЕМ:

unset($_SESSION['captcha_code']);

5.4. Открываем файл \view\RegisterView.php

ИЩЕМ:

9: $default_status = 1; // Активен ли пользователь сразу после регистрации (0 или 1)

перед этой строкой вставляем:

$response = null;
$reCaptcha = new \ReCaptcha\ReCaptcha($this->settings->secret_code);

ВМЕСТО:

$captcha_code           = $this->request->post('captcha_code');

вставляем:

$captcha_code =  $this->request->post('g-recaptcha-response');
$response = $reCaptcha->verify($captcha_code);

ВМЕСТО:

32: elseif(empty($_SESSION['captcha_code']) || $_SESSION['captcha_code'] != $captcha_code || empty($captcha_code))

вставляем:

elseif(empty($_SESSION['captcha_code']) || $_SESSION['captcha_code'] != $captcha_code || empty($captcha_code))

6. Открываем файл design\[ваш шаблон]\html\index.tpl  

добавляем:

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

7. Открываем файлы design\[ваш шаблон]\html\cart 

ВМЕСТО:

<div class="captcha"><img src="captcha/image.php?{math equation='rand(10,10000)'}" alt='captcha'/></div>
					<input class="input_captcha text-center" id="comment_captcha" type="text" name="captcha_code" maxlength="5" value="" data-format="\d\d\d\d" data-notice="Введите капчу"/>

вставляем:

<div class="g-recaptcha" data-sitekey="{$settings->site_code|escape}"></div>

7.1 - это же проделываем в  feedback post product register.tpl, - там где Вам надо заменить стандартную капчу на reCAPTCHA API 2.0

 

Не забываем зайди в админку - настройки и применить ключи!

 

Спасибо за внимание!

 

Спасибо за инструкцию. Есть проблема, на странице с контактами есть форма обратной связи, при отправке сообщение пишет "Неверно введена капча" постоянно.

 

На странице регистрация не могу зарегистрироваться, отправляю форму, страница перегружается и все...

 

В чем может быть проблема?

Изменено пользователем dimbays222
Ссылка на сообщение
Поделиться на другие сайты

зайдите в файл \view\RegisterView.php

 

найдите строку:

32: elseif(empty($_SESSION['captcha_code']) || $_SESSION['captcha_code'] != $captcha_code || empty($captcha_code))

 

Замените ее на:

elseif($response->getErrorCodes()) 

 

 Это в самой инсрукции допустил ошибку! После этого должно все работать!

Изменено пользователем Nanco
Ссылка на сообщение
Поделиться на другие сайты

зайдите в файл \view\RegisterView.php

 

найдите строку:

32: elseif(empty($_SESSION['captcha_code']) || $_SESSION['captcha_code'] != $captcha_code || empty($captcha_code))

 

Замените ее на:

elseif($response->getErrorCodes()) 

 

 Это в самой инсрукции допустил ошибку! После этого должно все работать!

 

Спасибо, исправил, но проблема осталась...

Ссылка на сообщение
Поделиться на другие сайты

Спасибо, исправил, но проблема осталась...

 

потому что еще надо менять в FeedbackView для контактов а в регистрации видимо где-то еще ошибка. сравните с оригинальным файлом

Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты

потому что еще надо менять в FeedbackView для контактов а в регистрации видимо где-то еще ошибка. сравните с оригинальным файлом

 

потому что еще надо менять в FeedbackView для контактов а в регистрации видимо где-то еще ошибка. сравните с оригинальным файлом

 

Спасибо. Посмотрю.

Ссылка на сообщение
Поделиться на другие сайты
  • 5 недель спустя...

Большое спасибо.

Такой вопрос, как поставить 2 и более капч на 1 страницу?

 

меняете

<div class="g-recaptcha" data-sitekey="{$settings->site_code|escape}"></div>

на

<div class="g-recaptcha"></div>

 

и js код

<script src="https://www.google.com/recaptcha/api.js?onload=CaptchaCallback&render=explicit" async defer></script>
{literal}
<script type="text/javascript">
	var CaptchaCallback = function(){
		$('.g-recaptcha').each(function(index, el) {
		    grecaptcha.render(el, {'sitekey' : '{/literal}{$settings->site_code|escape}{literal}' });
		});
	};		
</script>
{/literal}
Ссылка на сообщение
Поделиться на другие сайты
  • 2 недели спустя...

Nanco, установил на другой сайт (шаблон), все прекрасно работает. Спасибо еще раз на инструкцию!

Изменено пользователем dimbays222
Ссылка на сообщение
Поделиться на другие сайты
  • 5 недель спустя...

Подскажите люди добрые! Сделал все по инструкции все появилось, но даже если не нажму я не робот то все равно отправляется)) т.е не работает капча! Проверил 10 раз все везде все по инструкции сделал!

Ссылка на сообщение
Поделиться на другие сайты

Так оно так и работает.

Рекапча не блокирует форму, просто выдается ошибка на уровне PHP

Может, у вас ошибки не выведены в шаблон?

Ссылка на сообщение
Поделиться на другие сайты

Так оно так и работает.

Рекапча не блокирует форму, просто выдается ошибка на уровне PHP

Может, у вас ошибки не выведены в шаблон?

Да вроде введено в шаблоне: {if $error}

                        <div role="alert" class="alert alert-danger alert-dismissible">
                            {if $error=='captcha'}
                            Неверно введена капча
                            {elseif $error=='empty_name'}
                            Введите имя
                            {elseif $error=='empty_email'}
                            Введите email
                            {elseif $error=='empty_text'}
                            Введите сообщение
                            {/if}
                        </div>
Ссылка на сообщение
Поделиться на другие сайты

Нет, проверка идет на уровне сервера.

По умолчанию гугл не блокирует форму.

Если хотите блокировать - надо извращаться с джаваскриптом

Ссылка на сообщение
Поделиться на другие сайты

А есть пример извращений через java? ))

 

через какую джава? может javascript

вы можете отслеживать валидацию через data-callback 

и блокировать/разблокировать форму. подробнее в документации https://developers.google.com/recaptcha/docs/display

Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты
  • 2 недели спустя...

Как добавить еще 1 гугл капчу на страницу..? надо 2

 

а тему почитать? уже отвечал на этот вопрос в посте http://forum.simplacms.ru/topic/12177-recaptcha-api-20-установка-simpla/?p=95931

Ссылка на сообщение
Поделиться на другие сайты
  • 10 месяцев спустя...

Разобрался, капча не работает в этой обертке. А почему - у меня не хватает опыта.

Вставил чуть выше - заработала.

 

    <span>
        <div class="podcaptcha">
        {*    <label for="comment_captcha">Вы не робот?</label>   *}
        {*    <div class="g-recaptcha" data-sitekey="{$settings->site_code|escape}"></div>   *}
     </div>
    </span>
    <br/>
Ссылка на сообщение
Поделиться на другие сайты
  • 9 месяцев спустя...

Подскажите, нет такого кода в FeedbackView

ИЩЕМ:


23: $feedback = new stdClass;
Изменено пользователем Consult
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...