salesforce - 谷歌验证码 : Unable to validate in time

标签 salesforce recaptcha

REQ_PARAM_NAME::validated-captcha
REQ_PARAM_VALUE::Pair(false,Unable to validate in time. Response is assumed correct. 101781)

为什么我会收到来自 Google 的这条消息?

提交表单前勾选v2 reCaptcha复选框,但服务器验证返回上述结果并被拒绝(Salesforce表单拒绝)。

** 编辑 **

该网站是一个 wordpress 网站。这是我需要在 header 中添加的代码:

<script src="https://www.google.com/recaptcha/api.js"></script> 
<script> function timestamp() {   var response = document.getElementById("g-recaptcha-response"); if (response == null || response.value.trim() == "") {var elems = JSON.parse(document.getElementsByName("captcha_settings")[0].value);elems["ts"] = JSON.stringify(new Date().getTime());document.getElementsByName("captcha_settings")[0].value = JSON.stringify(elems); } } setInterval(timestamp, 500); 
</script>

表单没有什么特别的,只是提交给Salesforce,所以我不自己验证验证码:

<form action="https://webto.salesforce.com/servlet/servlet..." method=POST">
<input  id="email" maxlength="80" name="email" size="20" type="text" />
<input type=hidden name='captcha_settings' value='{"keyname":"LOGIS_CO","fallback":"true","orgId":"00YXZ000000XYZ","ts":""}'>
<!-- some other fields -->
<div class="g-recaptcha" data-sitekey="xyz..."></div>
<br><input type="submit" name="submit">

结果消息“...无法及时验证。假定响应正确。101781)”是 Salesforce 支持人员给我的。所以 Salesforce 表单确实收到了发布的表单,并且他们验证了验证码结果。

最后,Salesforce 验证生成的发布表单,他们得到 validated-captcha = false,无法及时验证。假定响应是正确的。 101781. 他们拒绝了该帖子。所以 Salesforce 支持人员要求我自己检查此验证码错误消息...

最佳答案

tl;dr 当访问者的系统时钟滞后时,表单无法通过 SF 验证,可能被认为是延迟提交,因此错误 Unable to validate in time 发生了。


当我填写并提交表单时,虽然我没有 SF 设置,但我可以使用浏览器的开发人员工具检查发送到 SF 服务器的内容。

除了通常的字段外,captcha_settings 字段中还有一个额外的信息被发送到名为 ts 的 SF 服务器,这是一个使用客户端系统用 JavaScript 计算的时间戳日期。

timestamp

不难猜到是用来验证的。

所以我决定创建一个 SF 帐户,幸运的是有一个 30 天的试用选项。创建帐户后,我创建了一个带有自动回复模板的网络案例表单,简单地说 Case Successfully Created in Salesforce

为我的测试域获取了一个 reCAPTCHA v2 token ,并将表单的 HTML 标记放在那里并开始测试。

我提交了 9-10 次表单,没有问题。所有案例均已创建,我收到了每个案例的电子邮件。

然后我将系统时钟调慢了两个小时,提交了 2-3 次表单。表单和之前一样发送成功,但是这次没有任何反应。我没有收到任何电子邮件。

然后我将系统时钟调整回正确的时间,一切又开始正常工作了。

您可以通过将计算机的系统时钟调慢几个小时来重现该问题。

综上所述,这是顺丰必须解决的问题。依赖于客户端的系统时间,这不是验证过程的可靠来源,绝对是一个糟糕的选择。您可能想将此问题告知他们。

在 SF 做某事之前,作为一种解决方法,我认为依赖第 3 方时间戳服务是可以的。

如果您考虑到这一点,您可以用以下内容替换 header 中的脚本标签。

<script src="https://www.google.com/recaptcha/api.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> 
<script>
    var currentTimestamp;

    $.getJSON( "http://icanhazepoch.com/", function( data ) {
        currentTimestamp = data * 1000;

        setInterval(timestamp, 500);
    });

    function timestamp() {
        currentTimestamp += 500;

        var response = document.getElementById("g-recaptcha-response");
        if (response == null || response.value.trim() == "") {
            var elems = JSON.parse(document.getElementsByName("captcha_settings")[0].value);
            elems["ts"] = JSON.stringify(currentTimestamp);
            document.getElementsByName("captcha_settings")[0].value = JSON.stringify(elems);
        }
    }
</script>

通过这种方式,将使用从服务获取的时间戳而不是客户端的系统时钟,每 500 毫秒递增一次。

希望对你有帮助。

关于salesforce - 谷歌验证码 : Unable to validate in time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58138707/

相关文章:

ruby-on-rails - 未在 Rails 中为此组织启用 REST API(使用 databasedotcom gem 的 Salesforce API)

python - 将 Salesforce 报告导出为 CSV

css - 没有图像剪切的响应式重新验证

javascript - Google reCaptcha - 如何获得 g-recaptcha-response - 没有 FORM TAG

asp.net - https ://api-secure. recaptcha.net/上的 recaptcha https 问题

authentication - APEX 中的 Salesforce UserInfo session 类型

node.js - 使用 puppeteer 抓取动态站点

recaptcha - 有没有办法在recaptcha 2中设置tabindex?

javascript - 使用 Jquery 进行 Google recapcha 验证

salesforce - 创建我自己的 API