我之所以写,是因为这个网站上的任何问题都没有真正帮助我弄清楚为什么 reCaptcha 没有得到验证。我在我的页面上使用了两个 reCaptcha 的 V2 和 Invisible。不幸的是,我正在使用的项目非常古老,虽然它看起来像是 ASP.NET MVC,但我没有看到任何控制器或模型,所以我不知道它到底是用什么写的。我正在重建ASP.NET WebForms 中的项目,我有 reCaptcha 完美地工作。问题是我必须对旧网站使用 JavaScript,直到我发布新网站,这不会再过几个月。
这是我的表格:
<form id="form" action="?" method="post">
<fieldset>
<div class="form-group">
<div class="row">
<div class="col-md-12">
@* RECAPTCHA V2 WIDGET *@
<div id="captcha2" class="g-recaptcha"
data-sitekey="6LdOZWkUAAAAAE1EhMyhMPF5IwM3lflaeyZ2VWaB"></div>
<br />
@* MESSAGE FROM RECAPTCHA *@
<div id="msg" class="msg-error error"></div>
<br>
@* SUBMIT BUTTON FOR VALIDATION & RECAPTCHA *@
<input id="submit" type="submit" name="buttonSubmit" class="btn btn-success btn-large"
value="Submit Information Request" />
<input type="hidden" name="registerDate" value="@DateTime.Now" />
</div>
</div>
</div>
@* RECAPTCHA INVISIBLE WIDGET *@
<div id="captchaI" class="g-recaptcha"
data-sitekey="6LduaWkUAAAAAHp0EU5JXdTIszKR-g2AZfDqmLiv"
data-callback="submit"
data-size="invisible">
</div>
</fieldset>
这是我的 JavaScript:
<script>
$('#submit').click(function () {
//var obj =
//{
// secret: "MY_PRIVATE_KEY",
// response: grecaptcha.getResponse()
//};
//var json = JSON.stringify(obj);
//window.location = "https://www.google.com/recaptcha/api/siteverify?" + json;
//var respJSON = '{"success": true | false, "challenge_ts": timestamp, "hostname":string}';
//var respObj = JSON.parse(respJSON);
//alert(respObj.success + "\n" + respObj.challenge_ts + "\n" + respObj.hostname);
//--------------------------------------------------------------------
alert("NO JSON\n" + grecaptcha.getResponse()); //I GET A HASHED RESPONSE
var response = grecaptcha.getResponse();
var stringy = JSON.stringify("STRINGIFY\n" + response);
alert(stringy); //I GET A HASHED RESPONSE
var parsy = JSON.parse("PARSED" + response);
alert(parsed); //I GET NOTHING
//--------------------------------------------------------------------
//var pk = 'MY_PRIVATE_KEY';
//var url = "https://www.google.com/recaptcha/api/siteverify?secret=";
//$.post(url,
// {
// "secret": pk,
// "response": "&response=" + response
// },
// function (response) {
// alert(response);
// });
//alert(response);
//JSON.stringify(response);
//alert(response);
//$('#msg').prepend(response);
//if (!response) {
// $('#msg').text("No Response from Captcha.");
//}
});
如您所见,我将 jQuery 与 JSON 结合使用。我尝试以多种方式从 reCaptcha 中提取响应,通常在 #msg div 中发布消息,但那里没有显示任何内容。
我知道Google Developers reCaptcha Guide 是怎么说的,但它对如何实际实现这一点帮助不大。请提供帮助,因为没有其他解决方案通过 siteverify 验证响应,使用由于代理控制而我无法使用的 PHP,或者在开发人员指南的情况下,没有帮助。