Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
то ждем ваше обращение в нашей службе тех поддержки.
По умолчанию форма заказа на "Битрикс" CAPTCHA не выводит. Причины, с одной стороны, понятны. Любое препятствие при оформлении заказа может отпугнуть посетителя, и покупка не состоится. Но, с другой стороны, незащищенная форма обязательно приманивает всяких злонамеренных личностей, стремящихся получить к сайту несанкционированный доступ. В порядке компромисса предлагаем настроить вывод CAPTCHA, чтобы потом сопоставить возможную потерю пользователей с очевидными преимуществами безопасности. Итак:
1. Скопируем шаблон компонента sale.order.ajax
2. Модифицируем файл компонента template.php
Добавим код, вызывающий форму CAPTCHA
3. Создадим файл, генерирующий новые значения CAPTCHA
Разместим в корневом каталоге сайта файл captcha.php, содержащий следующий код:
4. Добавим код на JavaScript, обновляющий CAPTCHA
Разместим в самом конце файла template.php следующий фрагмент кода:
5. Модифицируем файл init.php
Добавим в него код проверки 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"][] = 'Введите правильно "Код" с картинки'; } }
Готово!
Назад в раздел
Подписаться на новые материалы раздела: