Recaptcha v2无响应返回Verification failed错误 代码问题排查求助
Recaptcha v2 验证失败问题修复方案
- 验证码资源未加载
HTML代码中缺失reCAPTCHA v2的JS依赖,导致验证码组件无法正常渲染,用户无法完成校验,g-recaptcha-response参数为空直接触发验证失败。需在页面</head>标签前添加如下代码:
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
密钥配置不匹配
确认以下两点配置正确:- 代码中填写的
siteKey和secretKey为同一份reCAPTCHA v2申请的密钥,不要和v3版本密钥混用 - reCAPTCHA后台绑定的域名与当前代码运行的域名完全一致,本地测试需要将
localhost、127.0.0.1加入后台域名白名单
- 代码中填写的
验证接口调用方式错误
reCAPTCHA官方要求使用POST请求调用校验接口,且file_get_contents易受服务器配置限制无法发起外站请求,导致验证流程中断。将原有校验部分代码替换为curl实现的POST请求:
// 替换原有file_get_contents调用逻辑 $secretKey = '你的真实secretKey'; $responseKey = $_POST['g-recaptcha-response'] ?? ''; $userIP = $_SERVER['REMOTE_ADDR']; $postData = [ 'secret' => $secretKey, 'response' => $responseKey, 'remoteip' => $userIP ]; $ch = curl_init('https://www.google.com/recaptcha/api/siteverify'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); $response = curl_exec($ch); curl_close($ch); $response = json_decode($response);
- 代码拼写错误
邮件发送部分变量名拼写错误,定义的邮件头变量为$headers,调用mail()函数时传入的参数为$header,少了末尾的s,会导致邮件发送失败。同时需要补充HTML邮件格式声明,避免邮件内容显示为源码:
// 修改邮件头配置 $headers = "From: $email\r\n"; $headers .= "Content-Type: text/html; charset=UTF-8\r\n"; // 修改mail函数调用参数 if(mail($to, $subject,$msgBody,$headers)){
- 错误屏蔽导致无法定位问题
代码开头error_reporting(0)屏蔽了所有运行错误,调试阶段建议注释该行,开启错误提示可快速定位是服务器网络问题、配置问题还是代码逻辑问题。
内容的提问来源于stack exchange,提问作者jack lee
相关产品推荐
相关产品推荐

