You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Recaptcha v3始终返回无效响应,Opencart环境求助排查

Google Recaptcha v3 无效响应问题修复方案

根据你提供的调试信息和代码,问题集中在后端token获取错误、域名不匹配、前端表单提交逻辑缺失这几个点,以下是针对性修复步骤:

一、错误码对应问题分析

从$resp的错误列表可以明确问题根源:

  • invalid-input-response:后端验证的是无效token值
  • hostname-mismatch:后端指定的域名与实际站点域名拼写不一致
  • action-mismatch/score-threshold-not-met:均为token无效导致的连带错误

二、控制器代码修复

1. 正确获取前端提交的token

原代码直接用字符串'token'传入验证方法,需改为获取POST表单中的token字段:

// 错误写法
->verify('token', $_SERVER['REMOTE_ADDR'])

// 正确写法(添加空值判断避免报错)
->verify($_POST['token'] ?? '', $_SERVER['REMOTE_ADDR'])

2. 修正域名拼写

调试信息中显示站点域名为my_syte.com,但控制器里写的是my_site.com,需统一为实际域名:

->setExpectedHostname('my_syte.com') // 与调试信息、Google后台配置的域名完全一致

3. 修复逻辑判断错误

原代码中评分判断逻辑颠倒,需调整为验证成功且评分达标时跳转成功页:

if (!$resp->isSuccess()) {
    $this->error_msg = 'ReCaptcha验证失败:' . implode(', ', $resp->getErrorCodes());
} else {
    if ($resp->getScore() >= 0.5) { // 符合阈值要求才跳转
        header('Location: success.htm');
        exit();
    } else {
        $this->error_msg = '验证评分过低,疑似机器人操作';
    }
}

三、.tpl模板代码修复

1. 替换占位符为实际站点密钥

将脚本中的site_key替换为你在Google Recaptcha后台获取的v3站点密钥:

<!-- 错误写法 -->
<script src='https://www.google.com/recaptcha/api.js?render=site_key' ></script>

<!-- 正确写法 -->
<script src='https://www.google.com/recaptcha/api.js?render=你的实际v3站点密钥' ></script>

2. 绑定提交按钮点击事件

原代码的onClick函数未绑定到提交按钮,需给按钮添加触发事件:

<!-- 错误写法 -->
<input type="submit" name="btnSubmit" id="submit" value="<?php echo $button_send; ?>" class="btn" />

<!-- 正确写法 -->
<input type="submit" name="btnSubmit" id="submit" value="<?php echo $button_send; ?>" class="btn" onclick="onClick(event)" />

3. 完善表单提交逻辑

获取token后需手动提交表单,否则仅设置token但不会触发表单提交:

function onClick(e) {
    e.preventDefault();
    grecaptcha.ready(function() {
        grecaptcha.execute('你的实际v3站点密钥', {action: 'homepage'}).then(function(token) {
            console.log(token);
            document.getElementById('token').value = token;
            // 添加表单提交逻辑
            document.querySelector('form').submit();
        });
    });
}

四、额外注意事项

  1. 确保Google Recaptcha后台配置的域名与实际站点完全一致(包括是否带www、是否为HTTPS)
  2. 确认siteKey和secret是v3版本的密钥,不要与v2密钥混淆
  3. 测试时打开浏览器控制台,检查token是否正常生成并传递到后端

内容的提问来源于stack exchange,提问作者Den4ik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 14:12:04