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
相关产品推荐
相关产品推荐

