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

Google reCAPTCHA报missing-input-response错误,请求排查协助

解决Google reCAPTCHA的"missing-input-response"错误

嘿,我之前也踩过这个坑!missing-input-response错误的本质就是Google验证接口没收到前端传过来的验证响应值,结合你的代码来看,主要问题出在这几个地方:

1. URL参数拼接的转义错误

你代码里拼接API地址时用了&,这是HTML里的转义字符,但后端拼接URL时应该用原始的&——不然Google的接口会把&response当成一个完整的参数名,自然识别不到真正的response参数,这是触发错误的核心原因。

2. 缺少对g-recaptcha-response的空值判断

如果用户没完成验证就提交表单,$_POST['g-recaptcha-response']会是空值,直接传去验证也会触发这个错误。

修正后的代码

我给你调整了代码,修复了这些问题,还加了参数编码避免特殊字符干扰:

function captcha(){ 
    $secret = "..."; 
    $response = $_POST['g-recaptcha-response'] ?? ''; 
    
    // 先检查用户是否完成了验证
    if(empty($response)){
        return '<p><strong>错误:</strong>请先完成reCAPTCHA人机验证</p>';
    }
    
    $remoteip = $_SERVER['REMOTE_ADDR']; 
    // 用正确的&拼接参数,同时对参数做URL编码
    $api_url = sprintf(
        "https://www.google.com/recaptcha/api/siteverify?secret=%s&response=%s&remoteip=%s",
        urlencode($secret),
        urlencode($response),
        urlencode($remoteip)
    ); 
    
    $decode = json_decode(file_get_contents($api_url), true); 
    
    if ($decode['success'] ?? false) { 
        return $decode['success']; 
    }else{ 
        $errorsCode = ""; 
        foreach ($decode['error-codes'] ?? [] as $key => $value) { 
            $errorsCode .= '<p><strong>' . $key.':</strong> '.$value.'</p>'; 
        } 
        return $errorsCode; 
    } 
}

额外的前端检查要点

除了后端,前端也要确保配置正确:

  • 必须正确引入reCAPTCHA脚本:<script src="https://www.google.com/recaptcha/api.js" async defer></script>
  • 表单里要有reCAPTCHA容器,替换成你的站点密钥:<div class="g-recaptcha" data-sitekey="你的站点密钥"></div>
  • 提交前可以在浏览器控制台用console.log(document.querySelector('[name="g-recaptcha-response"]').value)检查是否有值,确认参数能正常传到后端

你提到已经通过相关方案解决了,本质也是修复了URL拼接和参数传递的问题,以后碰到类似问题可以先从参数是否正确传递、URL是否合法这两点入手排查~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:37:27