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

Google reCAPTCHA无回调问题:服务器端$response为空求助

解决Google reCAPTCHA服务器端$response为空的问题

嘿,我看了你的问题和代码,本地运行正常但服务器上$response始终为空,大概率是服务器环境限制或者代码里的小细节没处理好,给你几个排查和修复的方向:

  • 检查allow_url_fopen配置是否开启
    很多共享主机或服务器会禁用allow_url_fopen,这会导致file_get_contents无法发起外部HTTP请求。你可以在代码开头加一行测试:

    var_dump(ini_get('allow_url_fopen'));
    

    如果输出bool(false),要么联系主机服务商开启这个配置,要么换成cURL来请求Google API(cURL不受这个配置限制)。这里给你一个cURL的替代实现:

    $api_url = 'https://www.google.com/recaptcha/api/siteverify?secret=' . $secret_key . '&response='.$_POST['g-recaptcha-response'];
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $api_url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    curl_close($ch);
    
  • 修复API URL里的语法错误
    你的代码里API URL用了&,这是HTML转义后的实体,在PHP的URL拼接里应该直接用&,&会被Google的API当成参数名的一部分,导致请求无效、返回空内容。把这部分改成:

    $api_url = 'https://www.google.com/recaptcha/api/siteverify?secret=' . $secret_key . '&response='.$_POST['g-recaptcha-response'];
    
  • 检查服务器防火墙/安全组规则
    有些服务器的防火墙会阻止对外请求到Google的域名。你可以登录服务器,用命令行测试能不能访问reCAPTCHA API:

    curl https://www.google.com/recaptcha/api/siteverify
    

    如果返回连接超时或拒绝,需要调整防火墙规则,允许服务器向www.google.com发起出站HTTPS请求(端口443)。

  • 修复secret_key的引号错误
    看你的代码里$secret_key = secret';少了开头的单引号,正确写法应该是$secret_key = 'secret';。虽然本地可能因为错误级别低没报错,但服务器的错误日志里大概率会有变量未定义的提示,这会导致请求时secret参数为空,Google返回无效响应。

  • 添加错误排查日志
    在服务器上开启PHP错误日志,或者在代码里临时添加错误捕获,方便精准定位问题:

    $response = file_get_contents($api_url);
    var_dump($response); // 查看实际返回内容
    var_dump(error_get_last()); // 查看file_get_contents的错误信息
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:19:48