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

关于reCAPTCHA2配置的问题:密钥无效及服务端部署困惑

reCAPTCHA v2 配置问题解决指南

一、data-site-key 无效密钥问题

data-site-key必须填写Site Key,Secret Key是服务端专用的,填到前端肯定报错。如果用了Site Key还是提示invalid,检查这几点:

  • 域名匹配:在Google reCAPTCHA控制台创建密钥时,把你当前使用的域名(比如localhost、你的线上域名)添加到「允许的域名」列表,不要带http://或https://。
  • 密钥复制错误:直接从控制台复制Site Key,避免手动输入时多打空格或漏字符。
  • 密钥类型对应:确保你创建的是reCAPTCHA v2的密钥,不是v3或其他类型的,不同版本密钥不通用。

二、服务端部署步骤(以PHP为例)

1. 前端表单配置

确保页面正确引入reCAPTCHA脚本,并在表单中添加验证组件:

<form method="POST" action="你的后端处理页面.php">
    <!-- 你的其他表单字段 -->
    <div class="g-recaptcha" data-site-key="你的Site Key"></div>
    <button type="submit">提交</button>
</form>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>

2. 后端验证逻辑

当用户提交表单时,后端需要调用Google的验证接口确认用户是否通过reCAPTCHA:

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // 替换成你的Secret Key
    $secret_key = "你的Secret Key";
    // 获取前端传来的验证响应
    $captcha_response = $_POST['g-recaptcha-response'];
    // 获取用户IP(可选,但建议添加)
    $user_ip = $_SERVER['REMOTE_ADDR'];

    // 构造验证请求
    $verify_url = "https://www.google.com/recaptcha/api/siteverify";
    $post_data = http_build_query([
        'secret' => $secret_key,
        'response' => $captcha_response,
        'remoteip' => $user_ip
    ]);

    // 发送POST请求
    $context = stream_context_create([
        'http' => [
            'method' => 'POST',
            'header' => 'Content-Type: application/x-www-form-urlencoded',
            'content' => $post_data
        ]
    ]);
    $verify_result = file_get_contents($verify_url, false, $context);
    $result_data = json_decode($verify_result);

    // 处理验证结果
    if ($result_data->success) {
        // 验证通过,执行你的业务逻辑(比如保存表单数据)
        echo "验证通过,表单已提交!";
    } else {
        // 验证失败,提示用户
        echo "reCAPTCHA验证失败,请重试!错误信息:" . implode(", ", $result_data->{'error-codes'});
    }
}
?>

其他后端语言通用逻辑

不管用Node.js、Python还是Java,核心步骤都是:

  • 获取前端提交的g-recaptcha-response参数
  • 向https://www.google.com/recaptcha/api/siteverify发送POST请求,携带secret(你的Secret Key)、response(前端传来的值)
  • 解析返回的JSON,判断success字段是否为true

注意事项

  • 绝对不要把Secret Key暴露在前端代码中,只能放在服务端,否则会被恶意利用。
  • 本地测试时,务必在控制台添加localhost到允许域名,否则验证会失败。
  • 如果返回错误码,可以参考Google官方文档的错误码说明排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 07:22:48