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

Google ReCaptcha V2在PHP表单中始终返回false求助

解决Google ReCaptcha V2验证失败的问题

我帮你排查了代码里的问题,核心错误其实很明显,再给你补充几个本地开发的注意事项:

1. 最关键的变量名错误

你声明了$recaptcha_secret = "";,但拼接API请求URL的时候用的是未定义的$secret变量!这会导致请求里的secret参数是空值,Google的验证接口自然会返回失败。

2. 修正后的代码示例

<?php
$arrContextOptions = array(
    "ssl" => array(
        "verify_peer" => false,
        "verify_peer_name" => false,
    ),
);

if ($_SERVER["REQUEST_METHOD"] === "POST") {
    // 先验证其他表单字段的正确性...

    // 验证ReCaptcha
    $recaptcha_secret = "你的实际私钥"; // 这里替换成你的ReCaptcha私钥
    $response_token = $_POST['g-recaptcha-response'];
    
    // 注意用正确的变量名,同时对参数做URL编码避免特殊字符问题
    $verify_url = "https://www.google.com/recaptcha/api/siteverify?secret=" . urlencode($recaptcha_secret) . "&response=" . urlencode($response_token);
    $response = file_get_contents($verify_url, false, stream_context_create($arrContextOptions));
    $response_data = json_decode($response, true);

    if ($response_data["success"] === true) {
        echo "Logged In Successfully";
    } else {
        // 开发阶段可以打印错误码排查问题,上线后记得移除
        print_r($response_data['error-codes']);
        echo "You are a robot";
    }
}
?>

3. 本地开发额外排查点

  • 检查前端表单是否正确发送了g-recaptcha-response字段:可以在后台用var_dump($_POST)查看这个字段是否存在且有值。
  • 确认ReCaptcha后台配置:虽然localhost默认被允许,但还是要去Google ReCaptcha控制台确认你的站点列表里添加了localhost或127.0.0.1。
  • 尽量不要关闭SSL验证:你当前的verify_peer=false只是临时 workaround,本地开发可以用XAMPP/WAMP这类自带SSL证书的环境,上线前一定要改回来避免安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:41:58