[YaCaptcha] - яндекс каптча.

Сервис Яндекс.Чистый веб предназначен для борьбы со спамом в текстовых сообщениях, размещаемых пользователями и автоматическими роботами на страницах сайтов, форумов и пр.
Сервис позволяет обнаруживать спам-сообщения и формировать графическую CAPTCHA для отклонения запросов от роботов.

Реализовано три метода — обнаружение спама, получение CAPTCHA, проверка введённой CAPTCHA.
Для удобства все оформлено в пакет [YaCaptcha].

Простейший пример работы с [ajaxForm] тут demo.vgrish.ru/yacaptcha.html

настройки пакета
— Идентификатор id каптчи
— Ключ API «Чистый Веб»
— Идентификатор id сообщения если проводилась его проверка на спам
— Тип каптчи
— Адрес сервиса



чанк tpl.YaCaptcha.block
Доступны параметры:
— captchaType — тип каптчи
— link — адрес запроса на каптчу
— onlyCaptcha — показывать сразу каптчу (да)



пример сниппета
// подключаем 'yacaptcha'
$yacaptcha = $modx->getService('yacaptcha');
// значение каптчи с формы передаем в конфиг
$yacaptcha->config['captcha'] = $_POST['yacaptcha'];
// проверка
$yacaptcha->afterValidate();
// если каптча неверна то
if ($yacaptcha->getIsCaptchaRequired()) {
    return $AjaxForm->error('Неправильная каптча', array('yacaptcha' => 'Неправильная каптча'));
}


Спасибо за внимание.
Пакет доступен в репо Simple Dream на бесплатной основе.
Володя
Володя
26 декабря 2014, 06:17
modx.pro
16 383
Поблагодарить автора Отправить деньги

Комментарии: 38

Виталий
26 декабря 2014, 10:57
Выложил в Магазин: store.simpledream.ru/packages/content/yacaptcha.html

Кстати, интересный аналог от Гугл недавно появился: www.google.com/recaptcha/intro/index.html
    Андрей
    Андрей
    27 декабря 2014, 00:59
    Оу, Google на высоте, как всегда)
      Aртур Чикин
      27 декабря 2014, 23:07
      Не давно? Да он уже стар как мамонт по меркам современного веба так как появился еще в 2012.
        Максим Кузнецов
        28 декабря 2014, 00:07
        Сама капча — да. Но сейчас там, вроде как, достаточно просто на галочку нажать..) Сильно не вникал, но данная версия действительно довольно молодая.
          Виталий
          28 декабря 2014, 00:51
          Recaptcha 2 — декабрь 2014
        Alexander V
        26 декабря 2014, 12:21
        В чём преимущество перед Cool PHP captcha?
          Володя
          26 декабря 2014, 13:56
          не пользовался этой каптчей, не могу знать о преимуществах. О яндекс каптче можно почитать по ссылке в начале поста.
            Alexander V
            26 декабря 2014, 17:32
            Да вроде то же самое…
              Володя
              26 декабря 2014, 17:42
              ну значит никаких )
          Сергей Скат
          26 декабря 2014, 12:25
          Володя, ты чето обезумел в последнее время, один офигенный компанент за другим клепаешь ))))) Спасибо, уже пригодился ))
            Scorp Satex
            26 декабря 2014, 15:32
            Спасибо большое!
            Александр
            29 декабря 2014, 20:01
            Здравствуйте!

            Простите за невежество. Не совсем понял как подключить снипет. Чанк вывел всё отлично работает, но пока не проверяется. Используется форма под Formit
              Володя
              29 декабря 2014, 21:17
              можно вот так:
              [[!AjaxForm?
              &form=`tpl.AjaxForm.example.my`
              
              &hooks=`yaCaptchaСheck,email,redirect`
              &emailTpl=`sentEmailTpl`
              &emailSubject=`сообщение`
              &emailTo=`mail@mail.ru`
              &redirectTo=`1`
              
              ]]
              и в сниппете yaCaptchaСheck сделать проверку
              <?php
              // подключаем 'yacaptcha'
              $yacaptcha = $modx->getService('yacaptcha');
              // значение каптчи с формы передаем в конфиг
              $yacaptcha->config['captcha'] = $fields['yacaptcha'];
              // проверка
              $yacaptcha->afterValidate();
              // если каптча неверна то
              if ($yacaptcha->getIsCaptchaRequired()) {
                  $hook->addError('yacaptcha','Неправильная каптча');
                  return false;
              }
                Александр
                30 декабря 2014, 11:51
                Принцип понял, благодарю!

                Теперь капча проверяется, но нет результатов — нет отправки и редиректа на избранную страницу, и нет ошибки о неправильной капче. Просто возврат на ту же страницу с формой. Капчу добавил в форму через чанк. Пробовал с работающей формой — тот же результат. Без проверки через указанный сниппет всё отлично отправляется. Настраивал капчу согласно вашей инструкции, получил валидный ключ с Яндекс-сервиса.
                  Володя
                  30 декабря 2014, 11:58
                  значит по порядку:
                  нет ошибки о неправильной капче
                  добавить в чанк tpl.YaCaptcha.block, я проглядел…
                  <span class="error_yacaptcha">[[+fi.error.yacaptcha]]</span>
                  нет отправки и редиректа на избранную страницу
                  хук для формит должен возвращать либо false — ошибка, либо true — все хорошо и идет дальнейшая обработка.
                  поэтому добавь в пример, в самый конец
                  return true;
                  будет вот так
                  <?php
                  // подключаем 'yacaptcha'
                  $yacaptcha = $modx->getService('yacaptcha');
                  // значение каптчи с формы передаем в конфиг
                  $yacaptcha->config['captcha'] = $fields['yacaptcha'];
                  // проверка
                  $yacaptcha->afterValidate();
                  // если каптча неверна то
                  if ($yacaptcha->getIsCaptchaRequired()) {
                      $hook->addError('yacaptcha','Неправильная каптча');
                      return false;
                  }
                  return true;
                  и думаю будет работать…
                    Александр
                    30 декабря 2014, 12:54
                    Всё работает!
                    Благодарю :)
                      nekto
                      04 июля 2015, 00:19
                      а вот у меня не работает… Хотя все точно так же делаю
                      tius
                      13 января 2015, 15:28
                      добавить в чанк tpl.YaCaptcha.block, я проглядел…
                      [[+fi.error.yacaptcha]]
                      Если форм несколько, то сведения об ошибке выведутся только в форме с префиксом fi.
                      Что же делать с остальными формами на странице?

                      Спасибо.
                Boris Akimenko
                25 января 2015, 01:08
                Привет!
                Нашел баг.
                Если Якапчу использовать с AjaxForm, как в примере, и выставить в вызове AjaxForm проверку полей &validate=`email:required,message:required`, то в случае не заполнения одного из полей, после попытки неудачной отправки формы, будет постоянно выдаваться ошибка "[FormIt] Произошла ошибка при попытке отправить почту. Could not instantiate mail function." То есть после первой неудачной попытки из-за незаполненного поля, форма больше не отправится до перезагрузки страницы.
                Если из формы капчу убрать, то всё норм работает.
                  Володя
                  25 января 2015, 01:11
                  срок жизни каптчи ровно одна проверка… это особенность якапчти
                    Boris Akimenko
                    25 января 2015, 01:39
                    Код сбрасывается и новая картинка появляется, но если вводить новый код сообщение не отправляется и код снова обновляется и так до бесконечности :)
                  tius
                  28 января 2015, 10:08
                  Повторю свой вопрос:

                  добавить в чанк tpl.YaCaptcha.block, я проглядел…
                  [[+fi.error.yacaptcha]]
                  Если форм несколько, то сведения об ошибке выведутся только в форме с префиксом fi.
                  Что же делать с остальными формами на странице?

                  Спасибо.
                    Володя
                    28 января 2015, 10:27
                    я не понимаю ваш вопрос… и в чем проблема тоже.
                      tius
                      28 января 2015, 10:30
                      На странице несколько форм, все с разными плейсхолдерами.
                      К примеру, [[+fo.error.yacaptcha]] — ничего не покажет, а сообщение об ошибке сработает только в форме с плейсхолдером +fi.
                        Володя
                        28 января 2015, 10:39
                        незнаю. Формит вообще не пользуюсь, разбираться нет времени.
                    Константин
                    11 марта 2015, 15:05
                    Прикольная штука, особенно если бы она работала, было бы вообще отлично!
                      nekto
                      08 мая 2015, 01:27
                      при вызове чанка с капчей получаю 500 (Internal Server Error)… Ключ создан. В чем может быть ошибка, подскажите пожалуйста?
                        Володя
                        08 мая 2015, 08:51
                        не знаю, если можешь кинь доступы на vgrish@gmail.com — посмотрю…
                          nekto
                          12 мая 2015, 00:44
                          А yacaptcha_captcha_id можно оставлять стандартным или нужно менять, скажите пожалуйста?
                            Володя
                            12 мая 2015, 08:00
                            Это идентификатор каптчи в сессии — можно не трогать, можно поменять…
                      Александр Н
                      04 ноября 2015, 17:58
                      при установке ругается кажется на то, что не может подтянуть pdoTools, хотя тот стоит
                        Алексей
                        19 ноября 2016, 07:20
                        А где найти пакет? В магазине его почему-то нет…
                          Володя
                          19 ноября 2016, 10:20
                          Сервис Яндекс.Чистый веб был закрыт. Каптча соответсвенно не работает.
                            Алексей
                            20 ноября 2016, 14:29
                            а какие сейчас альтернативы, не в курсе? чем можно заменить?
                        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                        38