Jump to content

[2.*] reCAPTCHA API 2.0 (капча от гугл)


Recommended Posts

Так и не нашол ответа по 5-тому пункту.

Я пока поставил на регистрацию. Работает

 

 

 

View.php

<?PHP

require_once('View.php');

class RegisterView extends View
{
  function fetch()
  {
      $default_status = 1; // Активен ли пользователь сразу после регистрации (0 или 1)
		
      if($this->request->method('post') && $this->request->post('register'))
      {
         $response = null;
         $reCaptcha = new \ReCaptcha\ReCaptcha($this->settings->secret_code);
            
         $name			= $this->request->post('name');
         $email			= $this->request->post('email');
         $password		= $this->request->post('password');
			
         $captcha_code   = $this->request->post('g-recaptcha-response');
         $response = $reCaptcha->verify($captcha_code, $order->ip);
			
         $this->design->assign('name', $name);
         $this->design->assign('email', $email);
			
         $this->db->query('SELECT count(*) as count FROM __users WHERE email=?', $email);
         $user_exists = $this->db->result('count');

         ...

 

 

 

 

 

 

register.tpl

<form method="post">
  <fieldset class="form">
    <div class="form-group">
      <label class="form-group__label" for="register-name">Имя</label>
      <input id="register-name" class="form-field form-group__input" type="text" name="name" data-format=".+" data-notice="Введите имя" value="{$name|escape}" maxlength="255" />
    </div>

    <div class="form-group">
      <label class="form-group__label" for="register-email">Email</label>
      <input id="register-email" class="form-field form-group__input" type="text" name="email" data-format="email" data-notice="Введите email" value="{$email|escape}" maxlength="255" />
    </div>

    <div>
      <label class="form-group__label" for="register-password">Пароль</label>
      <input id="register-password" class="form-field form-group__input" type="password" name="password" data-format=".+" data-notice="Введите пароль" value="" />
    </div> 
						
    <div class="g-recaptcha" data-sitekey="{$settings->site_code|escape}"></div>

    <input type="submit" class="button reg-btn" name="register" value="Зарегистрироваться" />

  </fieldset>
</form>

 

 

 

Link to post
Share on other sites
  • Replies 92
  • Created
  • Last Reply

Top Posters In This Topic

 

 

Новая капча (reCAPTCHA 2.0) взамен старой капчи от Simpla CMS

 

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

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

вставляем:

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

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

добавляем:

class *НАЗВАНИЕ МОДУЛЯ* extends View
{
$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, $order->ip);

*ищем:

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

*заменяем на: 

elseif($response->getErrorCodes())

------ ИНФОРМАЦИЯ -----------------------------------------------------------------------------------------------------------------------

* в некоторых случаях будет

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

​заменяем на:

elseif($response->getErrorCodes())  

или 

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

​заменяем на:

if($response->getErrorCodes())

------ ИНФОРМАЦИЯ -----------------------------------------------------------------------------------------------------------------------

 

удаляем (если есть):

unset($_SESSION['captcha_code']); 

 

 

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

добавляем:

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

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

ищем:

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

заменяем на:

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

Большое спасибо. Все просто отлично работает!!!

 

Link to post
Share on other sites

Я понимаю что проблема может быть руках но в 5 пункте делаю все по списку на главной странице все хорошо она работает когда захожу в карточку товара то сайт не работает

 

Прошу помощи т.к. понять не могу из-за чего

Link to post
Share on other sites

может кому пригодится. Сделал тоже самое но для vqmod

 


установка:

1) распаковать содержимое архива в папку vqmod/mod

2) пройти по ссылке ВАШ_САЙТ/vqmod/recaptcha/install

3) выполнить пункты 1 и 7 из инструкции

 

 

 

recaptcha.zip

Edited by yr4ik
Link to post
Share on other sites

Всем привет

Выдает ошибку

Parse error: syntax error, unexpected T_FUNCTION, expecting ')' in /home/playboy/public_html/captcha/autoload.php on line 8

 

Все делал по инструкции, проверил еще раз, Кто то может подсказать где ошибка ?

капча родная не работает изначально, может сама сборка говно ?

Edited by playboy
Link to post
Share on other sites

Всем привет

Выдает ошибку

Parse error: syntax error, unexpected T_FUNCTION, expecting ')' in /home/playboy/public_html/captcha/autoload.php on line 8

 

Все делал по инструкции, проверил еще раз, Кто то может подсказать где ошибка ?

капча родная не работает изначально, может сама сборка говно ?

 

Полагаю у вас наверное php < 5.3 версии

Link to post
Share on other sites

Сделал по инструкции в первом посте - всё заработало.

 

 

Но теперь комментарии к товарам оставляются без модерации, подскажите куда копать?

Link to post
Share on other sites

Выдаёт такую ошибку

Parse error: syntax error, unexpected '$response' (T_VARIABLE), expecting function (T_FUNCTION) in /home/www/view/FeedbackView.php on line 75

Скажите что сделал не так?

 

 

все не так.

 

class FeedbackView extends View
{
$response = null;
$reCaptcha = new \ReCaptcha\ReCaptcha($this->settings->secret_code); 
}

class FeedbackView extends View уже вверху есть зачем вы дублируете это 

 

нужно было вставить

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

перед

$feedback = new stdClass;
Link to post
Share on other sites

Выдаёт такую ошибку

Fatal error: Uncaught exception 'RuntimeException' with message 'No secret provided' in /home/captcha/ReCaptcha/ReCaptcha.php:61 Stack trace: #0 /home/view/RegisterView.php(9): ReCaptcha\ReCaptcha->__construct(NULL) #1 /home/view/IndexView.php(92): RegisterView->fetch() #2 /home/index.php(18): IndexView->fetch() #3 {main} thrown in /home/captcha/ReCaptcha/ReCaptcha.php on line 61

Разобрался, не ввел ключи в админке  :unsure:

Edited by Julius123
Link to post
Share on other sites

Еще пытаюсь поставить но второй магазин на котором стоит Okay

Там например в RegisterView строка выглядит так:

} elseif($this->settings->captcha_register && (($_SESSION['captcha_code'] != $captcha_code || empty($captcha_code)) || empty($_SESSION['captcha_code']))) {  
                $this->design->assign('error', 'captcha');

заменяю на:

elseif($response->getErrorCodes())

и при отправке формы ошибка

Fatal error: Call to a member function getErrorCodes() on null in /home/view/RegisterView.php on line 37
Link to post
Share on other sites

 

Еще пытаюсь поставить но второй магазин на котором стоит Okay

Там например в RegisterView строка выглядит так:

} elseif($this->settings->captcha_register && (($_SESSION['captcha_code'] != $captcha_code || empty($captcha_code)) || empty($_SESSION['captcha_code']))) {  
                $this->design->assign('error', 'captcha');

заменяю на:

elseif($response->getErrorCodes())

и при отправке формы ошибка

Fatal error: Call to a member function getErrorCodes() on null in /home/view/RegisterView.php on line 37

У вас не создана функция getErrorCodes

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

Друзья, подключил на локальном. reCAPTCHA выходит. отправляю например комментарии к товару, то после нажатие Отправить выдает предупреждение :

Warning: file_get_contents() [function.file-get-contents]: Unable to find the wrapper "https" - did you forget to enable it when you configured PHP? in W:\home\plama.loc\www\captcha\ReCaptcha\RequestMethod\Post.php on line 68

Warning: file_get_contents(https://www.google.com/recaptcha/api/siteverify) [function.file-get-contents]: failed to open stream: Invalid argument in W:\home\plama.loc\www\captcha\ReCaptcha\RequestMethod\Post.php on line 68

Warning: Cannot modify header information - headers already sent by (output started at W:\home\plama.loc\www\captcha\ReCaptcha\RequestMethod\Post.php:68) in W:\home\plama.loc\www\view\ProductView.php on line 275

Warning: Cannot modify header information - headers already sent by (output started at W:\home\plama.loc\www\captcha\ReCaptcha\RequestMethod\Post.php:68) in W:\home\plama.loc\www\index.php on line 33

и там где форма пишет:

                        Неверно введена капча
 
это с чем связано? быть может из-за того что сайт на локальном?
Edited by DarAmal
Link to post
Share on other sites

на локальном не сработало, а вот после переноса на хостинг тоже не сразу заработало.

файлы, что были ранее описаны настроил немного по другому. Потом все пошло как надо.

Если кому надо, вот нужные файлы:

SettingsAdmin.php

View.php

BlogView.php

CartView.php

FeedbackView.php

ProductView.php

RegisterView.php

Link to post
Share on other sites
  • 1 month later...

У меня тоже проблема, как и в одном предыдущем посте.


Сделал по инструкции - всё заработало.


Но теперь комментарии к товарам и отзывы оставляются без модерации, подскажите куда копать?


 


HELP!

Link to post
Share on other sites

странно, такого не должно быть.

 

ситуация такая: модерации требует только первая запись. ее одобряю и для остальных уже модерация ненужна, добавляются записи сами.

Link to post
Share on other sites

ситуация такая: модерации требует только первая запись. ее одобряю и для остальных уже модерация ненужна, добавляются записи сами.

ну по идее - такое изначально было в Simpla.

Link to post
Share on other sites

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...