网站reCAPTCHA Enterprise返回invalid-input-response问题求助
解决reCAPTCHA Enterprise "invalid-input-response" 错误
代码问题排查与修复
1. 前端脚本重复引入+缺少响应值存储
你当前的前端代码重复引入了enterprise.js,会导致加载冲突;同时未将验证码响应值存入表单,后端无法获取有效校验参数。修改后的前端代码:
<script> var onloadCallback = function() { grecaptcha.enterprise.render('html_element', { 'sitekey' : '<?php echo G_RECAPTCHA_SITE_KEY?>', 'callback' : function(response) { // 将验证码响应值存入隐藏字段,供表单提交时传递给后端 document.getElementById('g-recaptcha-response').value = response; }, 'theme' : 'dark' }); }; </script> <form method="POST"> <!-- 新增隐藏字段存储验证码响应值 --> <input type="hidden" id="g-recaptcha-response" name="g-recaptcha-response"> ... <div id="html_element"></div> <button type="submit">提交</button> </form> <!-- 仅保留这一行带初始化参数的脚本引入 --> <script src="https://www.google.com/recaptcha/enterprise.js?onload=onloadCallback&render=explicit" async defer></script>
2. 后端使用错误验证接口+请求方式错误
reCAPTCHA Enterprise不使用普通reCAPTCHA的/api/siteverify接口,必须调用专属的Enterprise验证端点,且需用POST请求传递参数。修改后的后端代码:
if(isset($_POST['g-recaptcha-response'])){ $captcha = $_POST['g-recaptcha-response']; } if(!$captcha){ // 无验证码响应,返回错误 return false; } $secretKey = G_RECAPTCHA_SECRET_KEY; // 替换[你的项目ID]为Google Cloud Console中的reCAPTCHA Enterprise项目ID $verifyUrl = 'https://recaptchaenterprise.googleapis.com/v1/projects/[你的项目ID]/assessments?key=' . urlencode($secretKey); // 构建请求体 $requestBody = json_encode([ 'event' => [ 'token' => $captcha, 'siteKey' => G_RECAPTCHA_SITE_KEY, 'remoteIp' => $_SERVER['REMOTE_ADDR'] // 可选但建议添加,提升校验准确性 ] ]); $options = [ 'http' => [ 'header' => "Content-Type: application/json\r\n", 'method' => 'POST', 'content' => $requestBody ] ]; $context = stream_context_create($options); $response = file_get_contents($verifyUrl, false, $context); $responseData = json_decode($response, true); // Enterprise通过风险评分判断验证结果(通常取0.5为阈值,可根据需求调整) if(!isset($responseData['riskAnalysis']['score']) || $responseData['riskAnalysis']['score'] < 0.5) { var_dump($responseData); return false; } // 验证成功 return true;
账户配置排查
- 确认密钥对为reCAPTCHA Enterprise类型,普通reCAPTCHA v2/v3密钥无法兼容Enterprise验证。
- 检查Google Cloud Console:项目已启用reCAPTCHA Enterprise API,且密钥对应的域名/IP已添加到允许列表。
- 确认后端使用的API密钥(或服务账号)拥有调用
assessments接口的权限。
内容的提问来源于stack exchange,提问作者Gergő S
相关产品推荐
相关产品推荐

