За последние 24 часа нас посетили 37690 программистов и 8114 роботов. Сейчас ищут 1699 программистов ...

Не работает recaptcha

Тема в разделе "PHP для новичков", создана пользователем sh00r00p, 19 фев 2023.

  1. sh00r00p

    sh00r00p Активный пользователь

    С нами с:
    22 апр 2014
    Сообщения:
    6
    Симпатии:
    0
    Всем привет.
    Прошу помощи.
    После перехода с версии 7.4 на 8 php на битрикс. Отвалилась на всем сайте капча.
    На всех формах ошибка капчи.
    Всю голову уже сломал что не так.
    Вот одна из форм.
    Код (Text):
    1. <?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
    2. if (isset($_POST['g-recaptcha-response']))
    3. {
    4.     $url_to_google_api = "https://www.google.com/recaptcha/api/siteverify";
    5.     $secret_key = '*******';
    6.     $query = $url_to_google_api . '?secret=' . $secret_key . '&response=' . $_POST['g-recaptcha-response'] . '&remoteip=' . $_SERVER['REMOTE_ADDR'];
    7.     $data = json_decode(file_get_contents($query));
    8.     if ($data->success)
    9.     {
    10. $el=new CIBlockElement;
    11.  
    12. $PROP[43]=$_POST['ID'];
    13. $PROP[42]=$_POST['EMAIL'];
    14. $name=$_POST['NAME'].' | '.$_POST['PHONE'].' | '.$_POST['EMAIL'].' | Запрос на заправку картриджей (слайдер)';
    15. $arLoadProductArray = Array(
    16.   "MODIFIED_BY"    => 1, // элемент изменен текущим пользователем
    17.   "IBLOCK_SECTION_ID" => false,          // элемент лежит в корне раздела
    18.   "IBLOCK_ID"      => 18,
    19.   "PROPERTY_VALUES"=> $PROP,
    20.   "NAME"           => $name,
    21.   "DETAIL_TEXT"    => $_POST['TEXT'],
    22.   "ACTIVE"         => "Y",
    23.   );
    24.  
    25. $PRODUCT_ID = $el->Add($arLoadProductArray);
    26.     }
    27. }
    28. ?>
    29.  
    30. <div class="pop-ok-text">
    31.     <? if ($PRODUCT_ID>0){
    32. $arEventFields['TITLE']='Запрос на заправку картриджей (слайдер)';
    33. $arEventFields['HTML']="Имя: {$_POST['NAME']}<br>Телефон:{$_POST['PHONE']}<br>{$_POST['EMAIL']}<br>{$_POST['TEXT']}";
    34. CEvent::SendImmediate(96, s1, $arEventFields, "N", 49);
    35. ?>Заявка принята, спасибо!<?}else{?>Ошибка капчи, повторите еще раз.<?}?>
    36. </div>
    37. <div class="pop-ok-btn">
    38.     <a href="javascript:void(0);" onclick='location.reload();' class="btn js-pop-close">Ок</a>
    39. </div>
    формы везде идентичные, но хоть убей срабатывает только ложное событие else
    --- Добавлено ---
    Secret-key установлен. Потер для вопроса сюда :)
    --- Добавлено ---
    Upd в самой форме recaptcha есть, она даже выдает задания и проходит проверку. Но при нажатии кнопки “отправить» ошибка капчи.

    как мне кажется сама то капча работает, но по какой то причине условие product_id>0 становится ложным
    --- Добавлено ---
    Upd
    Пробовал show ($product_id);
    Переменная пустая
     
  2. Survivor

    Survivor Новичок

    С нами с:
    8 фев 2023
    Сообщения:
    93
    Симпатии:
    19
    Дело возможно не связано с капчей, а с другим подключенным функционалом.
    Может $PRODUCT_ID не был добавлен, а может ещё что. Гадать можно вечно :)

    PHP:
    1. <?php
    2. declare(strict_types = 1);
    Очисти журнал ошибок, перезагрузи сервер, вставь код в скрипт и потом почитай журнал ошибок php
     
  3. sh00r00p

    sh00r00p Активный пользователь

    С нами с:
    22 апр 2014
    Сообщения:
    6
    Симпатии:
    0
    Upd
    Пробовал show ($
    Из ошибки понятно, что не задана переменная, но не знаю как ее задать?(((
    По разному уже перепробовал.
    Warning: Undefined variable $PRODUCT_ID in /sites/mega-zapravka.ru/ajax/zapravka.php on line 31
     
  4. yanuzay

    yanuzay Активный пользователь

    С нами с:
    28 мар 2018
    Сообщения:
    503
    Симпатии:
    58
    буду кэпом, значит $data->success отдает false

    Запускаешь сайт на том же домене, что и в настройках google recaptcha ?
     
  5. sh00r00p

    sh00r00p Активный пользователь

    С нами с:
    22 апр 2014
    Сообщения:
    6
    Симпатии:
    0
    Да конечно, домен тот же)
     
  6. Survivor

    Survivor Новичок

    С нами с:
    8 фев 2023
    Сообщения:
    93
    Симпатии:
    19
    Ну тебе как минимум INSERT нужно "запихнуть" в блок
    PHP:
    1.     if ($data->success)
    2.     {
    3.          //- INSERT
    4.     }
    5.     //- И
    6.     else
    7.     {
    8.          //- captcha error
    9.     }
    А потом разбираться с капчей ...


    Попробуй курлом обратиться
    PHP:
    1.          
    2.  
    3.          $recaptcha           = trim($_POST['g-recaptcha-response']);  
    4.          $curl = curl_init();
    5.  
    6.          $postfields = array(
    7.           'secret'   => 'secret key',
    8.           'response' => $recaptcha,
    9.          );
    10.  
    11.          $options = array(
    12.            CURLOPT_RETURNTRANSFER => 1,
    13.            CURLOPT_URL => 'https://www.google.com/recaptcha/api/siteverify',
    14.            CURLOPT_POST => 1,
    15.            CURLOPT_POSTFIELDS => http_build_query($postfields),
    16.            CURLOPT_SSL_VERIFYPEER => 0
    17.          );
    18.  
    19.         curl_setopt_array($curl, $options);
    20.         $response = json_decode(curl_exec($curl), true);
    И проверка ниже
    PHP:
    1.         if ( empty( $recaptcha ) )
    2.         {
    3.           $error = 'Пожалуйста, подтвердите, что вы не робот!';
    4.         }
    5.         elseif ( !$response["success"]  )
    6.         {
    7.            $error = 'Проверка капчи не пройдена';
    8.         }
     
    #6 Survivor, 19 фев 2023
    Последнее редактирование: 19 фев 2023