Jump to content

Recommended Posts

Пишу готовое решение 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

 

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

 

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

Link to post
Share on other sites

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

require_once('captcha/autoload.php');

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

require_once('api/Simpla.php');
require_once('captcha/autoload.php');
Edited by mishanya
Link to post
Share on other sites

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

Link to post
Share on other sites

 

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

require_once('captcha/autoload.php');

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

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

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

Link to post
Share on other sites

Пишу готовое решение 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

 

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

 

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

 

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

 

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

 

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

Edited by dimbays222
Link to post
Share on other sites

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

 

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

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

 

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

elseif($response->getErrorCodes()) 

 

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

Edited by Nanco
Link to post
Share on other sites

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

 

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

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

 

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

elseif($response->getErrorCodes()) 

 

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

 

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

Link to post
Share on other sites

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

 

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

Edited by mishanya
Link to post
Share on other sites

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

 

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

 

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

Link to post
Share on other sites
  • 5 weeks later...

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

Такой вопрос, как поставить 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}
Link to post
Share on other sites
  • 2 weeks later...
  • 5 weeks later...

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

Link to post
Share on other sites

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

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

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

Link to post
Share on other sites

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

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

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

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

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

Link to post
Share on other sites

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

 

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

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

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

Edited by mishanya
Link to post
Share on other sites
  • 2 weeks later...
  • 10 months later...

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

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

 

    <span>
        <div class="podcaptcha">
        {*    <label for="comment_captcha">Вы не робот?</label>   *}
        {*    <div class="g-recaptcha" data-sitekey="{$settings->site_code|escape}"></div>   *}
     </div>
    </span>
    <br/>
Link to post
Share on other sites
  • 9 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...