Nanco Опубликовано 18 января, 2017 Жалоба Поделиться Опубликовано 18 января, 2017 Пишу готовое решение reCAPTCHA API 2.0 - с темы от СЮДА - то есть, тут инструкция есть но она для опытных людей хорошо знающих PHP - код. Я долго разбирался и выкладываю решение для новичков! 1 Заходим на сайт https://www.google.com/recaptcha/adminПолучаем ключи, которые потом будет записывать в админке в разделе "Настройки" 1.1 Загружаем файлы в папку captcha2. Открываем файл \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 Не забываем зайди в админку - настройки и применить ключи! Спасибо за внимание! Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 18 января, 2017 Жалоба Поделиться Опубликовано 18 января, 2017 (изменено) в п4. там нужно вставлять только require_once('captcha/autoload.php'); а не дублировать еще Simpla.php require_once('api/Simpla.php'); require_once('captcha/autoload.php'); Изменено 18 января, 2017 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 18 января, 2017 Жалоба Поделиться Опубликовано 18 января, 2017 Куда проще было бы создать файл Recaptcha.php в папке api и подключить его в api/Simpla.php, далее использовать что-то по типу $this->recaptcha->verify($captcha_code, $order->ip); Цитата Ссылка на сообщение Поделиться на другие сайты
Nanco Опубликовано 19 января, 2017 Автор Жалоба Поделиться Опубликовано 19 января, 2017 Noxter, идея хорошая, если бы вы её расписали чуть более конкретней что и куда, можно было бы и так сделать! Цитата Ссылка на сообщение Поделиться на другие сайты
Nanco Опубликовано 19 января, 2017 Автор Жалоба Поделиться Опубликовано 19 января, 2017 в п4. там нужно вставлять только require_once('captcha/autoload.php'); а не дублировать еще Simpla.php require_once('api/Simpla.php'); require_once('captcha/autoload.php'); Спасибо не заметил! Цитата Ссылка на сообщение Поделиться на другие сайты
dimbays222 Опубликовано 19 января, 2017 Жалоба Поделиться Опубликовано 19 января, 2017 (изменено) Пишу готовое решение reCAPTCHA API 2.0 - с темы от СЮДА - то есть, тут инструкция есть но она для опытных людей хорошо знающих PHP - код. Я долго разбирался и выкладываю решение для новичков! 1 Заходим на сайт https://www.google.com/recaptcha/adminПолучаем ключи, которые потом будет записывать в админке в разделе "Настройки" 1.1 Загружаем файлы в папку captcha2. Открываем файл \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 Не забываем зайди в админку - настройки и применить ключи! Спасибо за внимание! Спасибо за инструкцию. Есть проблема, на странице с контактами есть форма обратной связи, при отправке сообщение пишет "Неверно введена капча" постоянно. На странице регистрация не могу зарегистрироваться, отправляю форму, страница перегружается и все... В чем может быть проблема? Изменено 19 января, 2017 пользователем dimbays222 Цитата Ссылка на сообщение Поделиться на другие сайты
Nanco Опубликовано 20 января, 2017 Автор Жалоба Поделиться Опубликовано 20 января, 2017 (изменено) зайдите в файл \view\RegisterView.php найдите строку: 32: elseif(empty($_SESSION['captcha_code']) || $_SESSION['captcha_code'] != $captcha_code || empty($captcha_code)) Замените ее на: elseif($response->getErrorCodes()) Это в самой инсрукции допустил ошибку! После этого должно все работать! Изменено 20 января, 2017 пользователем Nanco Цитата Ссылка на сообщение Поделиться на другие сайты
dimbays222 Опубликовано 20 января, 2017 Жалоба Поделиться Опубликовано 20 января, 2017 зайдите в файл \view\RegisterView.php найдите строку: 32: elseif(empty($_SESSION['captcha_code']) || $_SESSION['captcha_code'] != $captcha_code || empty($captcha_code)) Замените ее на: elseif($response->getErrorCodes()) Это в самой инсрукции допустил ошибку! После этого должно все работать! Спасибо, исправил, но проблема осталась... Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 21 января, 2017 Жалоба Поделиться Опубликовано 21 января, 2017 (изменено) Спасибо, исправил, но проблема осталась... потому что еще надо менять в FeedbackView для контактов а в регистрации видимо где-то еще ошибка. сравните с оригинальным файлом Изменено 21 января, 2017 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
dimbays222 Опубликовано 24 января, 2017 Жалоба Поделиться Опубликовано 24 января, 2017 потому что еще надо менять в FeedbackView для контактов а в регистрации видимо где-то еще ошибка. сравните с оригинальным файлом потому что еще надо менять в FeedbackView для контактов а в регистрации видимо где-то еще ошибка. сравните с оригинальным файлом Спасибо. Посмотрю. Цитата Ссылка на сообщение Поделиться на другие сайты
Guga Опубликовано 22 февраля, 2017 Жалоба Поделиться Опубликовано 22 февраля, 2017 Большое спасибо.Такой вопрос, как поставить 2 и более капч на 1 страницу? Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 22 февраля, 2017 Жалоба Поделиться Опубликовано 22 февраля, 2017 Большое спасибо.Такой вопрос, как поставить 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} Цитата Ссылка на сообщение Поделиться на другие сайты
dimbays222 Опубликовано 8 марта, 2017 Жалоба Поделиться Опубликовано 8 марта, 2017 (изменено) Nanco, установил на другой сайт (шаблон), все прекрасно работает. Спасибо еще раз на инструкцию! Изменено 8 марта, 2017 пользователем dimbays222 Цитата Ссылка на сообщение Поделиться на другие сайты
Confucius74 Опубликовано 7 апреля, 2017 Жалоба Поделиться Опубликовано 7 апреля, 2017 Подскажите люди добрые! Сделал все по инструкции все появилось, но даже если не нажму я не робот то все равно отправляется)) т.е не работает капча! Проверил 10 раз все везде все по инструкции сделал! Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 7 апреля, 2017 Жалоба Поделиться Опубликовано 7 апреля, 2017 Так оно так и работает.Рекапча не блокирует форму, просто выдается ошибка на уровне PHPМожет, у вас ошибки не выведены в шаблон? Цитата Ссылка на сообщение Поделиться на другие сайты
Confucius74 Опубликовано 7 апреля, 2017 Жалоба Поделиться Опубликовано 7 апреля, 2017 Так оно так и работает.Рекапча не блокирует форму, просто выдается ошибка на уровне 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> Цитата Ссылка на сообщение Поделиться на другие сайты
Confucius74 Опубликовано 7 апреля, 2017 Жалоба Поделиться Опубликовано 7 апреля, 2017 У меня было понимание что без нажатия я не робот сообщения и любые действия не пройдут! Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 7 апреля, 2017 Жалоба Поделиться Опубликовано 7 апреля, 2017 Нет, проверка идет на уровне сервера.По умолчанию гугл не блокирует форму.Если хотите блокировать - надо извращаться с джаваскриптом Цитата Ссылка на сообщение Поделиться на другие сайты
Confucius74 Опубликовано 7 апреля, 2017 Жалоба Поделиться Опубликовано 7 апреля, 2017 А есть пример извращений через java? )) Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 7 апреля, 2017 Жалоба Поделиться Опубликовано 7 апреля, 2017 (изменено) А есть пример извращений через java? )) через какую джава? может javascriptвы можете отслеживать валидацию через data-callback и блокировать/разблокировать форму. подробнее в документации https://developers.google.com/recaptcha/docs/display Изменено 7 апреля, 2017 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
Consult Опубликовано 15 апреля, 2017 Жалоба Поделиться Опубликовано 15 апреля, 2017 Как добавить еще 1 гугл капчу на страницу..? надо 2 Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 15 апреля, 2017 Жалоба Поделиться Опубликовано 15 апреля, 2017 Как добавить еще 1 гугл капчу на страницу..? надо 2 а тему почитать? уже отвечал на этот вопрос в посте http://forum.simplacms.ru/topic/12177-recaptcha-api-20-установка-simpla/?p=95931 Цитата Ссылка на сообщение Поделиться на другие сайты
teplogaz Опубликовано 15 февраля, 2018 Жалоба Поделиться Опубликовано 15 февраля, 2018 Капча встала, коды ввел. Вижу капчу - но не ставится галка.Что я упустил? Цитата Ссылка на сообщение Поделиться на другие сайты
teplogaz Опубликовано 15 февраля, 2018 Жалоба Поделиться Опубликовано 15 февраля, 2018 Разобрался, капча не работает в этой обертке. А почему - у меня не хватает опыта.Вставил чуть выше - заработала. <span> <div class="podcaptcha"> {* <label for="comment_captcha">Вы не робот?</label> *} {* <div class="g-recaptcha" data-sitekey="{$settings->site_code|escape}"></div> *} </div> </span> <br/> Цитата Ссылка на сообщение Поделиться на другие сайты
Consult Опубликовано 11 декабря, 2018 Жалоба Поделиться Опубликовано 11 декабря, 2018 (изменено) Подскажите, нет такого кода в FeedbackViewИЩЕМ: 23: $feedback = new stdClass; Изменено 11 декабря, 2018 пользователем Consult Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.