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

PHP实现Google Recaptcha v2验证后提交原有表单的方法咨询

实现步骤

1. 修改HTML表单

把原表单的action指向你的Recaptcha验证PHP文件,同时新增一个隐藏字段保存原action地址,再加入Recaptcha v2的验证组件:

<form method="POST" action="recaptcha-verify.php">
    <!-- 保留原表单的所有字段(包括隐藏字段) -->
    <input type="hidden" name="original_action" value="原表单的action地址,比如https://example.com/original-handler.php">
    <input type="hidden" name="原隐藏字段1" value="值1">
    <input type="hidden" name="原隐藏字段2" value="值2">
    <!-- 其他可见表单字段 -->
    <input type="text" name="username" placeholder="用户名">
    
    <!-- 加入Google Recaptcha v2验证框 -->
    <div class="g-recaptcha" data-sitekey="你的Site Key"></div>
    <script src="https://www.google.com/recaptcha/api.js"></script>
    
    <button type="submit">提交</button>
</form>

2. 编写Recaptcha验证及表单转发的PHP文件(recaptcha-verify.php)

先完成Recaptcha的有效性验证,验证通过后,把所有表单数据(包括原隐藏字段)转发到原action地址:

<?php
// 1. 验证Recaptcha响应
$secretKey = "你的Secret Key";
$response = $_POST['g-recaptcha-response'] ?? '';
$remoteIp = $_SERVER['REMOTE_ADDR'];

// 向Google发送验证请求
$verifyUrl = "https://www.google.com/recaptcha/api/siteverify";
$verifyData = [
    'secret' => $secretKey,
    'response' => $response,
    'remoteip' => $remoteIp
];

$ch = curl_init($verifyUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $verifyData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$verifyResult = curl_exec($ch);
curl_close($ch);

$responseKeys = json_decode($verifyResult, true);

// 2. 验证成功则转发表单数据到原action
if ($responseKeys["success"] === true) {
    // 获取原action地址
    $originalAction = $_POST['original_action'] ?? '';
    if (empty($originalAction)) {
        die("原action地址无效");
    }

    // 收集所有表单字段,排除Recaptcha相关和原action字段
    $formData = [];
    foreach ($_POST as $key => $value) {
        if ($key !== 'g-recaptcha-response' && $key !== 'original_action') {
            $formData[$key] = $value;
        }
    }

    // 使用CURL转发POST请求到原action
    $ch = curl_init($originalAction);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $formData);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 跟随跳转
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); // 直接输出原action的响应给用户
    curl_exec($ch);
    curl_close($ch);
} else {
    // 验证失败,返回错误提示
    echo "Recaptcha验证失败,请重试!";
    // 可以在这里添加返回表单页面的链接
    echo '<br><a href="javascript:history.back()">返回表单</a>';
}
?>

注意事项

  • 替换代码中的你的Site Key和你的Secret Key为你在Google Recaptcha控制台获取的密钥。
  • 确保服务器支持CURL扩展,如果不支持,可以用file_get_contents结合流上下文来发送请求(CURL稳定性更强)。
  • 原表单的所有字段(包括隐藏字段)会被完整转发,不需要额外修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 11:17:56