Solved: Google reCAPTCHA always returns “false” as a response to AJAX call

I have explained how to use Google reCAPTCHA in another post. Google returns “true” or “false” in “success” parameter as a response to your AJAX call.

After your implementation, you might be constantly getting “false” value in this parameter. The response looks like this in your browser trace:

{
“success”: false,
“error-codes”: [
     “missing-input-response”,
     “missing-input-secret”
      ]
}

Issue

You might be sending “secret” and “response” parameters as hash map. Your code may look like this:

$.ajax({
     type: "POST",
     url: "https://www.google.com/recaptcha/api/siteverify",
     data: {
     secret: "YOUR-SECRET-KEY",
     response: captchaResult
},
contentType: "application/json; charset=utf-8",
dataType: "json",
failure: function (response) {
     alert(response.d);
},
success: function (response) {
     googleCallResult = response.success;
}
}).done(function () {
     // Do stuff with googleCallResult
});

Solution

Google reCAPTCHA expects parameters to be sent in the URL instead of hash map. So you need to add “secret” and “response” parameters into the URL. Here is the edited code:

$.ajax({
     type: "POST",
     url: "https://www.google.com/recaptcha/api/siteverify?secret=YOUR-SITE-KEY&response=" + captchaResult,
     contentType: "application/json; charset=utf-8",
     dataType: "json",
     failure: function (response) {
     alert(response.d);
},
success: function (response) {
     googleCallResult = response.success;
}
}).done(function () {
     // Do stuff with googleCallResult
});

How to add captcha to your website? (How to use Google reCAPTCHA?)

Automated applications (bots, robots) can perform brute force attacks to your contact forms or registration pages. These attacks may cause a leakage in confidential information as well as service outage.

The crucial approach to prevent automated applications to mess up with your web forms is that using captcha verification. There are several third party services to implement captcha in your website. I will briefly explain how to use Google’s service called Google reCAPTCHA.

How to use Google reCAPTCHA?

  1. Sign up and create a new record
  2. It will give you a SITE KEY and SECRET KEY. You will use these values below
  3. Add this line before the closing </head> tag in HTML page:
    <script src='https://www.google.com/recaptcha/api.js'></script>
  4. Add this line where you want the reCAPTCHA widget to appear (Make sure to replace YOUR-SITE-KEY with your own site key):
    <div class="g-recaptcha" data-sitekey="YOUR-SITE-KEY"></div>
  5. Once user clicks the submit button in your page, make this AJAX call in your JavaScript function (Make sure to replace YOUR-SECRET-KEY with your own secret ):

    var captchaResult = grecaptcha.getResponse();
    var googleCallResult;
    
    $.ajax({
         type: "POST",
         url: "https://www.google.com/recaptcha/api/siteverify?secret=YOUR-SECRET-KEY&response=" + captchaResult,
         contentType: "application/json; charset=utf-8",
         dataType: "json",
         failure: function (response) {
              alert(response.d);
    },
    success: function (response) {
         // if googleCallResult equals "true", captcha verification
         // is successful. It equals "false" if verification fails
         googleCallResult = response.success;
    }
    }).done(function () {
         // Do stuff with googleCallResult
    });
  6. That’s all! By using the variable “googleCallResult“, you can build your logic in your page. This variable will have “true” if the captcha verification is successful.

.

Call a function as soon as  the user verifies captcha

  1. Add “data-callback” attribute to your div class (Make sure to replace YOUR-SITE-KEY with your own site key):
    <div class="g-recaptcha" data-sitekey="YOUR-SITE-KEY" data-callback='captchaSuccessful'></div>
  2. Add your JavaScript function. This function will be called once user verify the captcha
    function captchaSuccessful() {
         // Do stuff here
    }

.

More info about Google reCAPTCHA:
https://developers.google.com/recaptcha/intro

How to fix “Declaration expected”, “Syntax error”, and “Statement cannot appear outside of a method” errors that appear in a non-sense way in Visual Studio

There might be several different reasons for the generic errors below to appear.

Declaration expected
Syntax error
Statement cannot appear outside of a method

In my case, Visual Studio IntelliSense seemed to be showing these errors in every single line in my code-behind (cs) pages. Including the Page declaration in the ASPX page.

Solution

Follow the steps below until you solve the issue. If a step solves the problem, you don’t have to continue with the next step.

  1. Make sure to specify default language in your web.config (<compilation defaultLanguage=”C#”>)
  2. Specify default language in the beginning of your ASPX files (<%@ Page Language=”C#” %>)
  3. Page declarative must be the first line in your ASPX files. There shouldn’t be any lines including comments before your Page declarative (<%@ Page … %>
  4. Exclude the file from the project. Compile. Include it back
  5. Restart Visual Studio and recompile your code

Source: http://stackoverflow.com/questions/5978839/visual-studio-website-lots-of-random-errors-but-still-building