Проверьте reCaptcha V2: всегда ложь - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь имплантировать reCaptcha V2 от Google на моем сайте (разработан на PHP и Wordpress).

Я пытаюсь проверить, проверял ли пользователь эту капчу перед отправкой.

И вот мое подтверждение:

<?php

if(isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])){
  $privatekey = $secret;
  $captcha = $_POST['g-recaptcha-response'];
  $url = 'https://www.google.com/recaptcha/api/siteverify';
  $data = array(
      'secret' => $privatekey,
      'response' => $captcha,
      'remoteip' => $_SERVER['REMOTE_ADDR']
  );

  $curlConfig = array(
      CURLOPT_URL => $url,
      CURLOPT_POST => true,
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_POSTFIELDS => $data
  );

  $ch = curl_init();
  curl_setopt_array($ch, $curlConfig);
  $response = curl_exec($ch);
  curl_close($ch);
  $jsonResponse = json_decode($response);
  if ($jsonResponse->success == true) {
            $succMsg = 'Your contact request have submitted successfully.';
            echo "<script>alert(\"OK\")</script>";
  }
  else {
      $errMsg = 'Robot verification failed, please try again.';
            echo "<script>alert(\"KO ROBOT\")</script>";
    }
}
else{

  $errMsg = 'Please click on the reCAPTCHA box.';
    echo "<script>alert(\"KO CLICK ON BOX\")</script>";
}
?>

Когда я перезагружаю страницу, или когда я отправляю без проверенной капчи, или когда я проверял капчу, она всегда отображает: "KO ROBOT"

Я пробовал также с "file_get_contents" вместо curl, но у меня было предупреждение об ошибке SSL.

Спасибо.

ОБНОВЛЕНИЕ:

Когда я делаю это:

var_dump($jsonResponse);

У меня есть это на моей странице:

object (stdClass) # 4028 (2) {["success"] => bool (false) ["коды ошибок"] => array (1) {[0] => string (20) "invalid-input-secret "}}

ОБНОВЛЕНИЕ 2:

Теперь у меня есть это, после проверки моего секретного ключа:

object (stdClass) # 4028(2) {["success"] => bool (false) ["коды ошибок"] => array (1) {[0] => string (20) "timeout-or-duplicate"}}

1 Ответ

0 голосов
/ 09 мая 2018

попробуйте с этим, просто замените секретный ключ.

<?php
$response   = isset($_POST["g-recaptcha-response"]) ? $_POST['g-recaptcha-response'] : null;
$privatekey = "YOUR PRIVATE KEY";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.google.com/recaptcha/api/siteverify");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
    'secret' => $privatekey,
    'response' => $response,
    'remoteip' => $_SERVER['REMOTE_ADDR']
));

$resp = json_decode(curl_exec($ch));
curl_close($ch);

if ($resp->success) {

} else {

    //failed return mess
}
?>
...