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

HTML/PHP集成Google reCaptcha v2始终验证失败问题求助

问题根因

  • 核心逻辑错误:混淆了服务端PHP和客户端JS的执行顺序
    PHP是在页面从服务端返回给浏览器前就执行完成的,你将验证码校验的PHP代码写在前端JS的点击事件函数中,页面加载阶段PHP就会尝试读取$_POST['g-recaptcha-response'],此时用户还未完成验证码验证、也未触发提交操作,该POST参数完全不存在,$recaptcha为空,必然验证失败。此外你在JS代码块中嵌入PHP的exit(),会直接在服务端渲染阶段终止页面输出,后续内容无法正常返回给浏览器。
  • 表单配置缺失:当前form标签未设置method="post"属性,也未指定后端提交地址,即使用户正常提交,表单数据也无法正常传给后端验证逻辑。
  • 潜在配置问题:需确认你使用的前端站点密钥(data-sitekey)和服务端SECRET KEY是reCaptcha后台同一套凭证生成的,且当前站点域名已添加到reCaptcha后台的可信域名列表中。

修正方案

1. 拆分后端验证逻辑

单独创建submit.php处理表单提交逻辑:

<?php
function reCaptcha($recaptcha){
    $secret = "你的SECRET KEY";
    $ip = $_SERVER['REMOTE_ADDR'];

    $postvars = array("secret"=>$secret, "response"=>$recaptcha, "remoteip"=>$ip);
    $url = "https://www.google.com/recaptcha/api/siteverify";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postvars);
    $data = curl_exec($ch);
    curl_close($ch);

    return json_decode($data, true);
}

// 接收表单提交的验证码参数
$recaptcha = $_POST['g-recaptcha-response'] ?? '';
$res = reCaptcha($recaptcha);
if(!$res['success']) {
    // 验证失败跳转回原页面,也可以自定义错误提示
    header('Location: 你的表单页面地址?error=captcha_fail');
    exit();
}

// 验证成功,后续处理你的表单业务逻辑
// ... 业务代码
header('Location: 提交成功跳转地址');
exit();
?>

2. 修正前端页面代码

<!-- 头部引入保持不变 -->
<script src="https://www.google.com/recaptcha/api.js" async defer></script>

<!-- Body区域表单修正 -->
<form id="captcha" name="Captcha" method="post" action="submit.php">
    <div class="g-recaptcha" data-sitekey="你的站点KEY"></div>
    <?php if (isset($_GET['error']) && $_GET['error'] == 'captcha_fail'):?>
    <p style="color:red">验证码验证失败,请重试</p>
    <?php endif;?>
    <input id="submitForm" name="submitForm" class="submit_text" type="submit" value="Submit"/>    
</form>
<!-- 原有的JS点击事件代码完全删除,不需要额外写JS逻辑,走默认表单提交即可 -->

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:09:02