Salesforce Google reCaptcha:无法及时验证

Salesforce Google reCaptcha:无法及时验证,salesforce,recaptcha,Salesforce,Recaptcha,请求参数名称::验证码 REQ_参数值::Pair(错误,无法及时验证。假定响应 正确。101781) 为什么我会从谷歌收到这条消息 v2 reCaptcha复选框在提交表单之前被选中,但服务器验证返回上述结果并被拒绝(Salesforce表单拒绝) **编辑** 该网站是wordpress网站。下面是我需要添加到标题中的代码: <script src="https://www.google.com/recaptcha/api.js"></script> <scr

请求参数名称::验证码
REQ_参数值::Pair(错误,无法及时验证。假定响应 正确。101781)

为什么我会从谷歌收到这条消息

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

**编辑**

该网站是wordpress网站。下面是我需要添加到标题中的代码:

<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>

函数timestamp(){var response=document.getElementById(“g-recaptcha-response”);if(response==null | | | response.value.trim()==“”){var elems=JSON.parse(document.getElementsByName(“captcha_设置”)[0]。value);elems[“ts”]=JSON.stringify(新日期().getTime();document.getElementsByName(“captcha(设置”)[0]。value=JSON.stringify(elems);}}}setInterval(时间戳,500);
该表单没有什么特别之处,但已提交给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">

tl;dr当访客的系统时钟滞后时,SF无法验证表单,可能被视为延迟提交,因此错误
无法及时验证


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

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

不难猜测,它正被用于验证

所以我决定创建一个SF帐户,幸运的是有一个30天的试用期。创建帐户后,我创建了一个带有自动响应模板的web to case表单,上面简单地说,
在Salesforce中成功创建了案例

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

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

然后我将系统时钟向后拨了两个小时,提交了2-3次表单。表单像以前一样成功发送,但这次没有发生任何事情。我没有收到任何电子邮件

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

您可以通过将计算机的系统时钟向后设置几个小时来重现该问题

总之,这是SF必须解决的问题。依赖客户端的系统时间(这不是验证过程的可靠来源)绝对是一个错误的选择。您可能希望将此问题告知他们

在SF做点什么之前,作为一种解决方法,我认为依赖第三方时间戳服务是可以的

如果您这样考虑,可以用以下方法替换页眉中的脚本标记。


var当前时间戳;
$.getJSON(“http://icanhazepoch.com/,函数(数据){
currentTimestamp=数据*1000;
设置间隔(时间戳,500);
});
函数时间戳(){
currentTimestamp+=500;
var response=document.getElementById(“g-recaptcha-response”);
if(response==null | | response.value.trim()==“”){
var elems=JSON.parse(document.getElementsByName(“验证码设置”)[0].value);
elems[“ts”]=JSON.stringify(currentTimestamp);
document.getElementsByName(“验证码设置”)[0]。value=JSON.stringify(elems);
}
}
通过这种方式,从服务获得的时间戳将通过每500毫秒递增的方式使用,而不是客户端的系统时钟


我希望它能对您有所帮助。

tl;dr当访问者的系统时钟滞后时,SF无法验证表单,可能被视为延迟提交,因此会发生无法及时验证的错误


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

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

不难猜测,它正被用于验证

所以我决定创建一个SF帐户,幸运的是有一个30天的试用期。创建帐户后,我创建了一个带有自动响应模板的web to case表单,上面简单地说,
在Salesforce中成功创建了案例

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

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

然后我将系统时钟向后拨了两个小时,提交了2-3次表单。表单像以前一样成功发送,但这次没有发生任何事情。我没有收到任何电子邮件

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

您可以通过将计算机的系统时钟向后设置几个小时来重现该问题

总之,这是SF必须解决的问题。依赖客户端的系统时间(这不是验证过程的可靠来源)绝对是一个错误的选择。您可能希望将此问题告知他们

在SF做点什么之前,作为一种解决方法,我认为依赖第三方时间戳服务是可以的

如果您这样考虑,可以用以下方法替换页眉中的脚本标记。


var当前时间戳;
$.getJSON(“http://icanhazepoch.com/,函数(数据){
currentTimestamp=数据*1000;
塞特涅瓦