正在更新,因为我已将实现更改为某种(某种程度上)更成功。
我正在尝试在我们的系统中实现“隐形Recaptcha”。我们正在使用动态生成的表单,因此,我走了以编程方式调用挑战的途径。我有以下代码来获取API:
<script src="https://www.google.com/recaptcha/api.js?render=explicit" async defer></script>
就在绘制表格之前,我要输入验证码div
:
form.fields.push({
html: '<div id="g-recaptcha-div" class="g-recaptcha" data-sitekey="<mykey>" data-callback="myCallback" data-size="invisible"></div>',
type: 'html'
});
绘制表单后,我将调用render函数:
recaptcha_id = grecaptcha.render(
'g-recaptcha-div',
{
'data-callback': _settings.form.submit
}
);
出现表单时,他的“受reCAPTCHA保护”徽标框显示在我的提交按钮上方。
在我的Submit函数中,我进行了一些表单验证,然后“执行” reCaptcha:
grecaptcha.execute(recaptcha_id);
然后继续我的提交。到目前为止,就在我看到reCaptcha挑战(“用店面挑选图像”)后,此时g-recaptcha-response
值已插入到表单提交中,并且在传递给我的{ {1}}功能。
但是,大多数情况下,我看不到挑战,PHP
参数中没有任何内容,因此我的g-recaptcha-response
验证失败。几个问题:
1)我对挑战不会一直出现的假设是Google逻辑仅在“条件合适”时才要求它。如果是这种情况,当没有显示该参数时我该怎么办,此时PHP
参数没有值-假设没有值意味着可以,我此时只是忽略它?
2)有什么方法可以“迫使”挑战出现,甚至只是让我对整个工作过程感觉更好,并测试我对响应的处理方式?
3)我尝试过在g-recaptcha-response
之后调用grecaptcha.getResponse(recaptcha_id)
,但是没有返回任何内容。对我来说,在客户端中处理reCaptcha会更容易/更好。
任何答案表示赞赏。由于这个问题已经存在了一段时间,因此我可以将其重新提交为新的“问题”。