[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
1
14 433
+7
Поблагодарить автора Отправить деньги

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

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

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

              Простите за невежество. Не совсем понял как подключить снипет. Чанк вывел всё отлично работает, но пока не проверяется. Используется форма под Formit
                Володя
                29 декабря 2014, 21:17
                0
                можно вот так:
                [[!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
                  0
                  Принцип понял, благодарю!

                  Теперь капча проверяется, но нет результатов — нет отправки и редиректа на избранную страницу, и нет ошибки о неправильной капче. Просто возврат на ту же страницу с формой. Капчу добавил в форму через чанк. Пробовал с работающей формой — тот же результат. Без проверки через указанный сниппет всё отлично отправляется. Настраивал капчу согласно вашей инструкции, получил валидный ключ с Яндекс-сервиса.
                    Володя
                    30 декабря 2014, 11:58
                    0
                    значит по порядку:
                    нет ошибки о неправильной капче
                    добавить в чанк 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
                      0
                      Всё работает!
                      Благодарю :)
                        nekto
                        04 июля 2015, 00:19
                        0
                        а вот у меня не работает… Хотя все точно так же делаю
                        tius
                        13 января 2015, 15:28
                        0
                        добавить в чанк tpl.YaCaptcha.block, я проглядел…
                        [[+fi.error.yacaptcha]]
                        Если форм несколько, то сведения об ошибке выведутся только в форме с префиксом fi.
                        Что же делать с остальными формами на странице?

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

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

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