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

PHP环境下Google Invisible reCAPTCHA无响应,求排查问题(附客户端代码)

排查PHP环境下Google Invisible reCAPTCHA失效问题

别着急,我帮你一步步拆解可能的问题点,从客户端到后端逐一排查:

一、客户端代码的核心遗漏点

你提供的客户端代码有几个关键细节需要补全或确认:

  1. 必须引入reCAPTCHA核心脚本
    你没提到是否加载了Google的官方脚本,这是触发验证的基础!需要在<head>里添加:

    <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script>
    

    注意要带上onload=onloadCallback和render=explicit参数,这样才能触发你定义的回调函数。

  2. 提交按钮的配置要正确
    你调用grecaptcha.render('submit', ...),这里的submit是按钮的ID吗?按钮不能用普通的<button type="submit">,得改成:

    <button id="submit" type="button">提交表单</button>
    

    用type="button"避免表单直接提交,让Invisible reCAPTCHA接管点击事件。

  3. onSubmit函数要补充表单提交逻辑
    你现在的函数只打印了日志,没有实际提交表单!需要加上:

    var onSubmit = function(token) {
        console.log('success!');
        document.getElementById('你的表单ID').submit(); // 替换成你实际的表单ID
    };
    

二、后端PHP验证的关键步骤

很多人会忽略后端验证,这才是reCAPTCHA的安全核心,你需要在mail-script.php里添加验证逻辑:

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 检查是否收到reCAPTCHA响应令牌
    if (!isset($_POST['g-recaptcha-response'])) {
        die('请完成人机验证');
    }

    // 准备验证请求参数
    $secretKey = '你的Secret Key'; // 替换成Google后台获取的Secret Key
    $responseToken = $_POST['g-recaptcha-response'];
    $userIp = $_SERVER['REMOTE_ADDR'];

    // 向Google发送验证请求
    $url = 'https://www.google.com/recaptcha/api/siteverify';
    $data = [
        'secret' => $secretKey,
        'response' => $responseToken,
        'remoteip' => $userIp
    ];

    $options = [
        'http' => [
            'header' => "Content-type: application/x-www-form-urlencoded\r\n",
            'method' => 'POST',
            'content' => http_build_query($data)
        ]
    ];

    $context = stream_context_create($options);
    $result = file_get_contents($url, false, $context);
    $response = json_decode($result);

    // 判断验证结果
    if ($response->success) {
        // 验证通过,执行邮件发送逻辑
        echo '验证通过,邮件已发送';
    } else {
        // 验证失败,可输出具体错误原因
        die('人机验证失败,请重试');
    }
}
?>

三、容易忽略的全局配置检查

  • Site Key和Secret Key要配对:确保客户端用的Site Key和后端用的Secret Key来自Google reCAPTCHA后台的同一个项目。
  • 域名要加入白名单:在Google后台,必须把当前网站的域名(比如localhost或线上域名)添加到允许列表,否则验证会直接失败。
  • reCAPTCHA类型要选对:创建项目时要选择「Invisible reCAPTCHA v2」,不要选普通reCAPTCHA v2或v3。

你可以按上面的步骤逐一排查,应该能快速定位问题!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:51:38