ITSagar
ITSagar

Reputation: 703

Google Recatpcha v2 Invisible not working at all says missing-input-response

I have gone through various articles over Stack as well as google and done the following implementation in Codeigniter 3. My website is running over https.

Code in head

<script src="https://www.google.com/recaptcha/api.js" async defer></script>
<script>
    function onSubmit(token) {
    document.getElementById("enquiryform").submit();
  }
</script>

Code of Form

<?php
    echo form_open('SubmitForm', array('id'=>'enquiryform'));
?>
<div class="row">
    <div class="col-sm-12 col-md-12">
            <div class="form-group">
                <textarea type="text" class="form-control" rows="5" cols="3" name="message" placeholder="Message"></textarea>
            </div>
        <div class="text-center contact-page-button">
          <button class="g-recaptcha btn btn-danger border-0" data-sitekey="my_site_key" data-callback='onSubmit'>Submit</button>
            <input type="reset" class="btn btn-danger border-0"></input>
        </div>
    </div>
</div>
<?php
    echo form_close();
?>

Code in Controller Function

$this->load->library('curl'); 
if($this->input->post('g-recaptcha-response'))
{
  $recaptchaResponse = trim($this->input->post('g-recaptcha-response'));
  $userIp=$this->input->ip_address();
  $secret='my_secret_key';
  $url="https://www.google.com/recaptcha/api/siteverify?secret=".$secret."&response;=".$recaptchaResponse."&remoteip;=".$userIp;
  $response = $this->curl->simple_get($url);
  $status= json_decode($response, true);
  //print_r($recaptchaResponse); //prints the data
  //echo "<br>";
  //print_r($url);  //prints the data
  //echo "<br>";
  //print_r($status);  //prints the data
  //echo "<br>";
  if($status['success'] == 1) {
      //True - EXECUTE SOMETHING
  } else {
      //False - What happens when user is not verified
      $data['response']="<div class='alert alert-danger'>Failed to verify that you are a Human. Please Try again.</div>";
  }

I have even tried file_get_contents method but the result is same. I always get

Array ( [success] => [error-codes] => Array ( [0] => missing-input-response ) )

I have checked the site and secret keys multiple times, they are correct. I have even placed a separate div for g-recaptcha which shows checkbox version but I still get the same errror.

What is the solution?

Upvotes: 0

Views: 471

Answers (1)

user3846235
user3846235

Reputation: 83

Problem is in your server side code. You need to send POST request instead of GET.

    $url="https://www.google.com/recaptcha/api/siteverify";
    $curl = curl_init();

    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS,"secret=".$secret."&response=".$recaptchaResponse."&remoteip=".$userIp);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

Upvotes: 1

Related Questions