Установка на сайт reCAPTCHA от Google

12
R
На сайте с 23.07.2008
Offline
87
2651

Друзья, прошу вашей помощи.

есть простенький статический самописный сайт на html без cms и баз данных.

Есть необходимость добавить на него reCAPTCHA от Google для того, чтобы с формы отправки писем на сайте слали меньше спама.

С добавлением элементов в саму страницу html нет проблем, но вот со скриптом обработки, который вынесен в отдельный файл php есть сложности.

Изначально скрипт имел такой вид:


<?
$IP = $_SERVER['REMOTE_ADDR'];
$email = "mail@xxx.com";
$subject = "Privet";
if ($f_name <> "" and $f_mail <> "" and $f_message <> "") {

mail("$email", "$subject", "From: $f_name\nMail: $f_mail\nIP:\n$IP\nMessage:\n$f_message");
$msg = "<br><p align=center><font size=5>Вашe письмо отправлено!</font>";
} else {
$msg = "<br><p align=center><font size=5>Вашe письмо не отправлено!</font>";
}
?>
<p><? echo $msg; ?></p>

В нем все устраивает, кроме спама.

С целью заставить скрипт работать с reCAPTCHA от Google был добавлен такой кусок:


<?
if(isset($_POST['g-recaptcha-response']) && $_POST['g-recaptcha-response']) {
$secret = '000000000000000000000000';
$ip = $_SERVER['REMOTE_ADDR'];
$response = $_POST['g-recaptcha-response'];
$rsp = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=$secret&response=$response&remoteip=$ip");
$arr = json_decode($rsp, TRUE);
if($arr['success']){
$IP = $_SERVER['REMOTE_ADDR'];
$email = "mail@xxx.com";
$subject = "Privet";
if ($f_name <> "" and $f_mail <> "" and $f_message <> "") {

mail("$email", "$subject", "From: $f_name\nMail: $f_mail\nIP:\n$IP\nMessage:\n$f_message");
$msg = "<br><p align=center><font size=5>Вашe письмо отправлено!</font>";
} else {
$msg = "<br><p align=center><font size=5>Вашe письмо не отправлено!</font>";
}
}
?>
<p><? echo $msg; ?></p>

Но скрипт не хочет работать. Проходишь капчу или нет при нажатии на кнопку отправки появляется пустая страница с сообщением, что сайт неправильно обрабатывает запрос.

В чем здесь проблема? Подскажите что нет так.

Заранее спасибо

Dron1987
На сайте с 24.12.2010
Offline
104
#1

Код прям такой и отправляли, или значения на свои поменяли?

R
На сайте с 23.07.2008
Offline
87
#2
Dron1987:
Код прям такой и отправляли, или значения на свои поменяли?

Все ключи у меня проставлены правильно.

Здесь просто для примера скрипта

Оптимизайка
На сайте с 11.03.2012
Offline
396
#3
rutrut:

$rsp = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=$secret&response=$response&remoteip=$ip");

вы отправляете GET запрос в гугл, а нужен POST.

https://developers.google.com/recaptcha/docs/verify

Вот так нужно:


$context = stream_context_create([ 'http' => [ 'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query([ 'secret' => 'xxxxxxxxxx'
'response' => $_POST['g-recaptcha-response'],
'remoteip' => $_SERVER['REMOTE_ADDR']
])
]
]);

$captcha = json_decode(file_get_contents('https://www.google.com/recaptcha/api/siteverify', false, $context));

if (!$captcha) die();

if ($captcha->success) {
// do something
}
⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
R
На сайте с 23.07.2008
Offline
87
#4
Оптимизайка:
вы отправляете GET запрос в гугл, а нужен POST.
https://developers.google.com/recaptcha/docs/verify
Вот так нужно

Спасибо за помощь и подсказку

Добавил этот фрагмент в скрипт. Получилось вот так:



<?
$context = stream_context_create([ 'http' => [ 'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query([ 'secret' => 'xxxxxxxxxx'
'response' => $_POST['g-recaptcha-response'],
'remoteip' => $_SERVER['REMOTE_ADDR']
])
]
]);

$captcha = json_decode(file_get_contents('https://www.google.com/recaptcha/api/siteverify', false, $context));

if (!$captcha) die();

if ($captcha->success) {

$IP = $_SERVER['REMOTE_ADDR'];
$email = "mail@xxx.com";
$subject = "Privet";
if ($f_name <> "" and $f_mail <> "" and $f_message <> "") {

mail("$email", "$subject", "From: $f_name\nMail: $f_mail\nIP:\n$IP\nMessage:\n$f_message");
$msg = "<br><p align=center><font size=5>Вашe письмо отправлено!</font>";
} else {
$msg = "<br><p align=center><font size=5>Вашe письмо не отправлено!</font>";
}
}
?>
<p><? echo $msg; ?></p>

Но при проверки работы капчи на сайте при любых вариантах при нажатии на кнопку отправить открывается новая страница, где написано:

Страница недоступна

Сайт xxxxx.com пока не может обработать этот запрос.

Что не так?

Оптимизайка
На сайте с 11.03.2012
Offline
396
#5

Если у вас php < 5.4 то замените [ ... ] на array( .. )

Ну и посмотрите, что за ошибка конкретно возникает в логах.

Rating
На сайте с 18.11.2015
Offline
57
#6

Simple Google reCaptcha plagin

Author: Michal Novák

Яша.com Плати.com
Оптимизайка
На сайте с 11.03.2012
Offline
396
#7
Rating:
Simple Google reCaptcha plagin
Author: Michal Novák

Этот плэгин подходит для "простенького статического самописного сайта", как у ТС?

Ramzzes
На сайте с 05.10.2012
Offline
98
#8

Какой смысл велосипедить то?

https://github.com/google/recaptcha

Rating
На сайте с 18.11.2015
Offline
57
#9
Оптимизайка:
Этот плэгин подходит для "простенького статического самописного сайта", как у ТС?

Плагин работает на сложных сайтах.

Намного лучше дерьма от BestWebSoft

dimsog
На сайте с 08.08.2011
Offline
149
#10

Тут смотрели?

ihor vps -> ihc.ru
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий