Как реализовать базовое использование Google reCaptcha v3

У меня есть сайт Wordpress, и я хочу защитить пользовательскую контактную форму с помощью Google reCaptcha v3. К сожалению, мой код кажется неправильным, и я не смог найти проблему, пожалуйста, помогите.

Это моя форма

<?php
 // reCAPTCHA v3
 define('SITE_KEY', 'Key');
 define('SECRET_KEY', 'SCRT_KEY');

 echo '<script src = "https://www.google.com/recaptcha/api.js?render=' . SITE_KEY . '"></script>';
?>

<form action = "<?php echo get_home_url(); ?>/sent" method = "POST" id = "footer-form">

 <!--INPUT FIELDS HERE-->
 <input type = "hidden" id = "g-recaptcha-response" name = "g-recaptcha-response" />

 <button class = "button_1" type = "submit">
  Send
 </button>

</form>

<script>
 grecaptcha.ready(function() {
  grecaptcha.execute("KEY IS HERE", {action: "homepage"})
  .then(function(token) {
   console.info(token);
   document.getElementById("g-recaptcha-response").value=token;
  });
 });
</script>

Моя форма отправляет сообщения в этот php-файл

// reCAPTCHA v3
define('SITE_KEY', 'KEY');
define('SECRET_KEY', 'SCRT_KEY');

$Response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret = ".SECRET_KEY."&response = {$_POST['g-recaptcha-response']}");
$Return = json_decode($Response);

if ($Return->success == true && $Return->score > 0.5){
 EMAIL CODE HERE
}

вот об этом.. первая часть, похоже, работает, потому что мое значение поля g-recaptcha получило токен сеанса

но $Response всегда ложный (я думаю, что file_get_contents не работает?)

Я надеюсь, что кто-нибудь сможет мне помочь, но я не хочу использовать плагин. Спасибо

Этот код адаптирован из этого руководства:

https://thewikihow.com/video_61QBrGpwQGg?si=TU3BUsN1RXN9jpmq

У этого парня была та же проблема, но решения не было:

Ошибка успеха Google recaptcha v3

Вероятно, вам следует использовать cURL вместо file_get_contents, это более настраиваемо и надежно.

aynber 22.05.2024 20:37

@aynber К сожалению, я не думаю, что это действительно так… хочу придерживаться базового php

Felix 23.05.2024 16:40

Использование реализации PHP cURL по-прежнему остается базовым PHP. Он более портативен, поскольку некоторые серверы allow_url_fopen отключены, что не позволяет file_get_contents получать данные URL.

aynber 23.05.2024 19:29

file_get_contents, используемый с URL-адресами HTTP, вернет false, если код состояния HTTP ответа указывает на ошибку. В этом случае вам нужно будет передать контекст HTTP-потока с установленным для ignore_errors значением true, чтобы получить доступ к телу ответа.

CBroe 27.05.2024 13:51

И file_get_contents с URL-адресом HTTP будет использовать метод запроса GET, но конечная точка проверки требует запроса POST. Вы можете использовать file_get_contents для выполнения запросов POST, но для этого также требуется контекст HTTP-потока, явно указывающий, какой method использовать.

CBroe 27.05.2024 13:56
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
184
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема заключалась в том, что у file_get_contents() отсутствовал контекст...

Google Api принимает только запросы POST. Нужен stream_context_create()...

Другие вопросы по теме