Что я имею :
$data = array( 'secret' => "my-app-secret", 'response' => "the-response" ); $verify = curl_init(); curl_setopt($verify, CURLOPT_URL, "https://www.google.com/recaptcha/api/siteverify"); curl_setopt($verify, CURLOPT_POST, true); curl_setopt($verify, CURLOPT_POSTFIELDS, http_build_query($data)); curl_setopt($verify, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($verify); var_dump($response);
Что я получил : bool(false)
(что означает, что curl_exec()
не удалось)
Что я ожидаю : ответ объекта JSON
Пожалуйста помоги. Благодарю.
Поскольку вы пытаетесь подключиться через SSL, вам необходимо настроить параметры cURL для его обработки. Быстрое исправление, чтобы заставить это работать, если вы добавите curl_setopt($verify, CURLOPT_SSL_VERIFYPEER, false);
Установка CURLOPT_SSL_VERIFYPEER
в false приведет к тому, что он примет любой сертификат, предоставленный ему, а не проверит их.
<?php $data = array( 'secret' => "my-secret", 'response' => "my-response" ); $verify = curl_init(); curl_setopt($verify, CURLOPT_URL, "https://www.google.com/recaptcha/api/siteverify"); curl_setopt($verify, CURLOPT_POST, true); curl_setopt($verify, CURLOPT_POSTFIELDS, http_build_query($data)); curl_setopt($verify, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($verify, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($verify); var_dump($response);
Вот альтернативный метод cURL, который я нашел, если он кому-то помогает. Очевидно, вводить переменные $ secret и $ response, чтобы передать их правильно. Извините, вопрос задает cURL-решение, но это самый быстрый метод, который я видел, поэтому я думал, что он добавит его в любом случае, потому что я знаю, что это поможет кому-то там. 🙂
$response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secret."&response=".$response); $response = json_decode($response, true); if($response["success"] === true){ // actions if successful }else{ // actions if failed }
Легче использовать «file_get_contents» с помощью POST:
$postdata = http_build_query( array( 'secret' => [YOUR_SECRET_KEY], 'response' => $_POST["g-recaptcha-response"] ) ); $opts = array('http' => array( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $postdata ) ); $context = stream_context_create($opts); $result = file_get_contents('https://www.google.com/recaptcha/api/siteverify', false, $context); $check = json_decode($result); if($check->success) { echo "validate"; } else { echo "wrong recaptcha"; }