Всем привет. Прошу помощи. После перехода с версии 7.4 на 8 php на битрикс. Отвалилась на всем сайте капча. На всех формах ошибка капчи. Всю голову уже сломал что не так. Вот одна из форм. Код (Text): <?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); if (isset($_POST['g-recaptcha-response'])) { $url_to_google_api = "https://www.google.com/recaptcha/api/siteverify"; $secret_key = '*******'; $query = $url_to_google_api . '?secret=' . $secret_key . '&response=' . $_POST['g-recaptcha-response'] . '&remoteip=' . $_SERVER['REMOTE_ADDR']; $data = json_decode(file_get_contents($query)); if ($data->success) { $el=new CIBlockElement; $PROP[43]=$_POST['ID']; $PROP[42]=$_POST['EMAIL']; $name=$_POST['NAME'].' | '.$_POST['PHONE'].' | '.$_POST['EMAIL'].' | Запрос на заправку картриджей (слайдер)'; $arLoadProductArray = Array( "MODIFIED_BY" => 1, // элемент изменен текущим пользователем "IBLOCK_SECTION_ID" => false, // элемент лежит в корне раздела "IBLOCK_ID" => 18, "PROPERTY_VALUES"=> $PROP, "NAME" => $name, "DETAIL_TEXT" => $_POST['TEXT'], "ACTIVE" => "Y", ); $PRODUCT_ID = $el->Add($arLoadProductArray); } } ?> <div class="pop-ok-text"> <? if ($PRODUCT_ID>0){ $arEventFields['TITLE']='Запрос на заправку картриджей (слайдер)'; $arEventFields['HTML']="Имя: {$_POST['NAME']}<br>Телефон:{$_POST['PHONE']}<br>{$_POST['EMAIL']}<br>{$_POST['TEXT']}"; CEvent::SendImmediate(96, s1, $arEventFields, "N", 49); ?>Заявка принята, спасибо!<?}else{?>Ошибка капчи, повторите еще раз.<?}?> </div> <div class="pop-ok-btn"> <a href="javascript:void(0);" onclick='location.reload();' class="btn js-pop-close">Ок</a> </div> формы везде идентичные, но хоть убей срабатывает только ложное событие else --- Добавлено --- Secret-key установлен. Потер для вопроса сюда --- Добавлено --- Upd в самой форме recaptcha есть, она даже выдает задания и проходит проверку. Но при нажатии кнопки “отправить» ошибка капчи. как мне кажется сама то капча работает, но по какой то причине условие product_id>0 становится ложным --- Добавлено --- Upd Пробовал show ($product_id); Переменная пустая
Дело возможно не связано с капчей, а с другим подключенным функционалом. Может $PRODUCT_ID не был добавлен, а может ещё что. Гадать можно вечно PHP: <?php declare(strict_types = 1); error_reporting(-1); Очисти журнал ошибок, перезагрузи сервер, вставь код в скрипт и потом почитай журнал ошибок php
Upd Пробовал show ($ Из ошибки понятно, что не задана переменная, но не знаю как ее задать?((( По разному уже перепробовал. Warning: Undefined variable $PRODUCT_ID in /sites/mega-zapravka.ru/ajax/zapravka.php on line 31
буду кэпом, значит $data->success отдает false Запускаешь сайт на том же домене, что и в настройках google recaptcha ?
Ну тебе как минимум INSERT нужно "запихнуть" в блок PHP: if ($data->success) { //- INSERT } //- И else { //- captcha error } А потом разбираться с капчей ... Попробуй курлом обратиться PHP: $recaptcha = trim($_POST['g-recaptcha-response']); $curl = curl_init(); $postfields = array( 'secret' => 'secret key', 'response' => $recaptcha, ); $options = array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => 'https://www.google.com/recaptcha/api/siteverify', CURLOPT_POST => 1, CURLOPT_POSTFIELDS => http_build_query($postfields), CURLOPT_SSL_VERIFYPEER => 0 ); curl_setopt_array($curl, $options); $response = json_decode(curl_exec($curl), true); И проверка ниже PHP: if ( empty( $recaptcha ) ) { $error = 'Пожалуйста, подтвердите, что вы не робот!'; } elseif ( !$response["success"] ) { $error = 'Проверка капчи не пройдена'; }