Вход • Регистрация

reCaptcha и форма заказа в 1 клик

  • 03 августа 2019 г. , редакция: 03 августа 2019 г.
  • Здравствуйте!
    Как добавить reCaptcha для всплывающей формы заказа в 1 клик?
    На данный момент у меня получилось ее вывести, но она живет своей жизнью :)
    DIAFAN версия 6.0.9.0

    Что я делал.

    В файле: /modules/cart/cart.model.php
    Запросил в функции form_param() капчу:
    Код
    $this->result["captcha"] = $this->diafan->_captcha->get('cart_one_click');


    Вывел ее файле /custom/my/modules/cart/views/cart.view.one_click.php
    Под полями:
    Код
    echo '<div class="control">' . $result['captcha'] . '</div>';


    Куда копать дальше?
    • 04 августа 2019 г. , редакция: 04 августа 2019 г.
    • ну надо включить капчу для модуля shop в настройках.

      в таблицу {config} надо добавить запись (но это не точно ):

      Код
      module_name: cart
      name: captcha
      lang_id: 0
      value: 1
      site_id: 0


      Или запустить один раз
      Код
      $this->diafan->configmodules("captcha","cart",0,0,1);


      Может и поможет, ведь изначально капча отключена и ее надо как бы включить
      • 04 августа 2019 г. , редакция: 04 августа 2019 г.
      • Скорее всего надо еще добавить в cart.model.php в строчку 500
        Код
        $fields[] = "captcha";
        $this->result["one_click"]["captcha"] = $this->diafan->_captcha->get("cart", $this->result["one_click"]["error_captcha"]);

        if($fields)
        {
        $this->form_errors($this->result, $this->result['form_tag'], $fields);
        }

        а в шаблоне cart.view.one_click.php
        Код
        echo $result['captcha'];
        • 05 августа 2019 г. , редакция: 05 августа 2019 г.
        • Спасибо! Но этот вариант не работал.
          Забыл сказать, у меня данные формы заказа в 1 клик работают на ajax. То есть, на этапе проверки в empty_required_field нужно было проверять капчу, как я понял.
          Как я решил:

          /modules/cart/cart.model.php в функции form_param() добавил:
          Код
          $this->result["captcha"] = $this->diafan->_captcha->get("cart");

          /custom/my/modules/cart/views/cart.view.one_click.php добавил:
          Код
          echo '<div class="control">'.$result['captcha'].'</div>';

          /modules/cart/cart.action.php в функции order() добавил дополнительные параметры для капчи:
          Код
          if ($is_one_click) {
          $params[] = array(
          'name' => 'google_recaptcha',
          'type' => 'captcha',
          );
          }

          /includes/action.php в функции empty_required_field() добавил:
          Код
          if ($row["type"] == 'captcha' && $row["name"] == 'google_recaptcha') {
          $this->check_captcha();
          }

          Осталась небольшая проблемка. Для каждого товара в стр категории генерируется своя всплывающая форма. В каждой форме своя рекаптча. И все они имеют одинаковый id recaptcha_div_cart.
          Соответственно, нужно сделать уникальным каждый такой id.
          Самый очевидный способ - добавить в конце id товара.

          UPD
          В шаблоне /custom/my/modules/cart/views/cart.view.one_click.php перед выводом капчи прошелся регуляркой:
          Код
          $captcha = preg_replace('/ id="recaptcha(.*?)"/', ' id="recaptcha\1_' . $result['good_id'] . '"', $result['captcha']);
          echo '<div class="control">'.$captcha.'</div>';

          • 28 января 2020 г. , редакция: 28 января 2020 г.
          • Отличное решение, спасибо. Но при оформлении заказа под админом появляются ошибки, которые решаются проверкой типа пользователя:
            Код

            if (!$this->diafan->_users->admin) {
            ...
            }

            Для обычного пользователя и гостя такой проблемы нет
  • 03 августа 2019 г.
  • Еще думал, что капчу как элемент формы можно выбрать в админке
    Справочники -> Форма оформления заказа
    и назначить чекбоксом "Использовать в форме быстрого заказа"
    Но там ее нет
    • 06 августа 2019 г.
    • Я просто в Справочники -> Форма оформления заказа добавил поле тип Чекбокс "Я не робот" и поставил его как обязательное и для формы быстрого заказа. Пока тестирую насколько конверсия может упасть. А иначе спамеры в заказы валят.
      • 06 августа 2019 г.
      • Так поле Я не робот спамерами будет заполнено автоматически и форма отправится.

        Там надо делать проверку, что если поле отмечено,то наоборот не отправлять форму, а просто выводить сообщение, что форма отправлена,
        • 07 августа 2019 г.
        • Ну пока помогает, спама нет. И пока не придумал как по-другому. Потому что любая каптча в форме оформления заказа не желательна.
          • 07 августа 2019 г. , редакция: 07 августа 2019 г.
          • Есть еще идея. Не знаю насколько она рабочая и сколько затронет правок в шаблоне и скриптах.
            Заменить тег формы и кнопку type="submit" на div. То есть это будет вроде как не форма, но по функциональности таковой будет являться.
      • 08 августа 2019 г.
      • Ты это поле в шаблоне не выводи, а создавай его type hidden, JSом.

        Хотя спамеры возможно эмулируют браузер. Но зато конверсия не упают. Либо рекапчу вешайте скрытую просто.

Новости

  • 18 июня
  • В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
  • 24 апреля
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 

Форум