+7 495 008 8452 пн.-пт. 10:00 – 17:00
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


По умолчанию форма заказа на "Битрикс" CAPTCHA не выводит. Причины, с одной стороны, понятны. Любое препятствие при оформлении заказа может отпугнуть посетителя, и покупка не состоится. Но, с другой стороны, незащищенная форма обязательно приманивает всяких злонамеренных личностей, стремящихся получить к сайту несанкционированный доступ. В порядке компромисса предлагаем настроить вывод CAPTCHA, чтобы потом сопоставить возможную потерю пользователей с очевидными преимуществами безопасности. Итак:

1. Скопируем шаблон компонента sale.order.ajax

2. Модифицируем файл компонента template.php

Добавим код, вызывающий форму CAPTCHA

<?if($_POST["is_ajax_post"] != "Y")
      {
         ?>                  
            </div>
            <input type="hidden" name="confirmorder" id="confirmorder" value="Y">
            <input type="hidden" name="profile_change" id="profile_change" value="N">
            <input type="hidden" name="is_ajax_post" id="is_ajax_post" value="Y">

            <? 
                      // Получаем код капчи
               $code = $APPLICATION->CaptchaGetCode();
            ?>
            
            <div class="captcha-holder">
               <label for="object-20">Введите символы:</label> 
                     <?// Изображение капчи?>
               <img src="/bitrix/tools/captcha.php?captcha_sid=<?=$code;?>" alt="CAPTCHA" width="110" height="33" class="captcha_pic" />       
                  <?// Обновление капчи?>
               <a href="#" rel="nofollow" class="update-captcha"> </a> 
                     <?// Скрытое поле капчи?>
               <input type="hidden" name="captcha_sid" value="<?=$code;?>" /> 
                     <?// Поле для ввода капчи пользователем?>
               <input type="text" id="object-20" class="form-text" name="captcha_word" value="" />
            </div><!-- captcha-holder -->            
         
            <div class="description"><span>*</span> Поля, необходимые для заполнения</div>
            <div class="btn-holder">
               <input type="button" name="submitbutton" onClick="submitForm('Y');" value="<?=GetMessage("SOA_TEMPL_BUTTON")?>" class="form-submit">
            </div><!-- btn-holder -->

            </fieldset>
         </form>
         <?if($arParams["DELIVERY_NO_AJAX"] == "N"):?>
            <script type="text/javascript" src="/bitrix/js/main/cphttprequest.js"></script>
            <script type="text/javascript" src="/bitrix/components/bitrix/sale.ajax.delivery.calculator/templates/.default/proceed.js"></script>
         <?endif;?>
         <?
      }


3. Создадим файл, генерирующий новые значения CAPTCHA

Разместим в корневом каталоге сайта файл captcha.php, содержащий следующий код:

<?if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])
    AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') 
    {    
        require_once($_SERVER['DOCUMENT_ROOT']. "/bitrix/modules/main/include/prolog_before.php");
              
   if($_POST['captcha'] == 'yes')
   {
      echo $code = $APPLICATION->CaptchaGetCode();
   }
   else
      die();                                       
} 
else 
   die();

?>


4. Добавим код на JavaScript, обновляющий CAPTCHA

Разместим в самом конце файла template.php следующий фрагмент кода:

<script>
$(document).ready(function() {
      $('.update-captcha').on('click', function(){
      $.ajax({
         url: '/captcha.php',
         type: 'post',
         data: 'captcha=yes',
         success: function(data){
            $('#ORDER_FORM .captcha_pic').attr('src', '/bitrix/tools/captcha.php?captcha_sid=' + data);
            $('#ORDER_FORM input[name="captcha_sid"]').val(data);
         }
      });
         
      return false;
      });
      
      $('.form-submit').on('click', function(){
         $.ajax({
            url: '/captcha.php',
            type: 'post',
            data: 'captcha=yes',
            success: function(data){
               $('#ORDER_FORM .captcha_pic').attr('src', '/bitrix/tools/captcha.php?captcha_sid=' + data);
               $('#ORDER_FORM input[name="captcha_sid"]').val(data);
            }
         });
      });
      
   });
</script>


5. Модифицируем файл init.php

Добавим в него код проверки CAPTCHA

AddEventHandler("sale", "OnSaleComponentOrderOneStepProcess", array("MyClass", "OnSaleComponentOrderOneStepProcessHandler"));  
 
class MyClass
{
   function OnSaleComponentOrderOneStepProcessHandler(&$arResult, &$arUserResult)
   {   
      global $APPLICATION;
   
      if($arUserResult["CONFIRM_ORDER"] == "Y" && !$APPLICATION->CaptchaCheckCode($_POST['captcha_word'], $_POST['captcha_sid']))   
         $arResult["ERROR"][] = 'Введите правильно "Код" с картинки';

   }
}



Готово!

Назад в раздел

Подписаться на новые материалы раздела:












CAPTCHA