Перейти к содержимому


Фото
* * * * * 2 голосов

reCAPTCHA API 2.0 установка Simpla

reCAPTCHA установка Simpla капча рекапча капча от гугл

  • Чтобы отвечать, сперва войдите на форум
23 ответов в теме

#1 Nanco

Nanco
  • Пользователь
  • 24 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Ukrain

Опубликовано 18.01.2017 - 11:03

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

 

 

1 Заходим на сайт https://www.google.c...ha</span>/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

 

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

 

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



#2 mishanya

mishanya
  • Фрилансер
  • 2 546 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 18.01.2017 - 22:46

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

require_once('captcha/autoload.php');

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

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

Изменено: mishanya, 18.01.2017 - 22:47


#3 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 6 532 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 18.01.2017 - 22:49

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

#4 Nanco

Nanco
  • Пользователь
  • 24 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Ukrain

Опубликовано 19.01.2017 - 17:48

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



#5 Nanco

Nanco
  • Пользователь
  • 24 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Ukrain

Опубликовано 19.01.2017 - 17:50

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

require_once('captcha/autoload.php');

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

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

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



#6 dimbays222

dimbays222
  • Пользователь
  • 4 сообщений
  • Версия CMS:2.x

Опубликовано 19.01.2017 - 21:50

Пишу готовое решение 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, 19.01.2017 - 21:56


#7 Nanco

Nanco
  • Пользователь
  • 24 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Ukrain

Опубликовано 20.01.2017 - 10:59

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

 

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

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

 

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

elseif($response->getErrorCodes()) 

 

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


Изменено: Nanco, 20.01.2017 - 11:01


#8 dimbays222

dimbays222
  • Пользователь
  • 4 сообщений
  • Версия CMS:2.x

Опубликовано 20.01.2017 - 16:57

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

 

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

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

 

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

elseif($response->getErrorCodes()) 

 

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

 

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



#9 mishanya

mishanya
  • Фрилансер
  • 2 546 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 21.01.2017 - 09:46

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

 

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


Изменено: mishanya, 21.01.2017 - 09:48


#10 dimbays222

dimbays222
  • Пользователь
  • 4 сообщений
  • Версия CMS:2.x

Опубликовано 24.01.2017 - 15:02

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

 

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

 

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



#11 Guga

Guga
  • Пользователь
  • 5 сообщений
  • Дизайн, Программирование, Верстка, Заказчик, Пользователь

Опубликовано 22.02.2017 - 17:28

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



#12 mishanya

mishanya
  • Фрилансер
  • 2 546 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 22.02.2017 - 23:49

Большое спасибо.
Такой вопрос, как поставить 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}


#13 dimbays222

dimbays222
  • Пользователь
  • 4 сообщений
  • Версия CMS:2.x

Опубликовано 08.03.2017 - 10:55

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


Изменено: dimbays222, 08.03.2017 - 10:56


#14 Confucius74

Confucius74
  • Пользователь
  • 4 сообщений
  • Пользователь
  • Откуда:Екатеринбург

Опубликовано 07.04.2017 - 14:10

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



#15 Kosjak76

Kosjak76
  • Модератор
  • 3 729 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Харьков, Украина

Опубликовано 07.04.2017 - 14:15

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

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

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



#16 Confucius74

Confucius74
  • Пользователь
  • 4 сообщений
  • Пользователь
  • Откуда:Екатеринбург

Опубликовано 07.04.2017 - 14:23

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

Рекапча не блокирует форму, просто выдается ошибка на уровне 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>


#17 Confucius74

Confucius74
  • Пользователь
  • 4 сообщений
  • Пользователь
  • Откуда:Екатеринбург

Опубликовано 07.04.2017 - 14:27

У меня было понимание что без нажатия я не робот сообщения и любые действия не пройдут!



#18 Kosjak76

Kosjak76
  • Модератор
  • 3 729 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Харьков, Украина

Опубликовано 07.04.2017 - 14:34

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

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

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



#19 Confucius74

Confucius74
  • Пользователь
  • 4 сообщений
  • Пользователь
  • Откуда:Екатеринбург

Опубликовано 07.04.2017 - 14:45

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



#20 mishanya

mishanya
  • Фрилансер
  • 2 546 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 07.04.2017 - 14:51

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

 

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

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

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


Изменено: mishanya, 07.04.2017 - 14:52






Также с меткой «reCAPTCHA, установка Simpla, капча, рекапча, капча от гугл»

0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых