我拼命想让自己的形式发挥作用。
但是我在验证recaptcha服务器端时遇到了问题 我一直在四处寻找,并在我的表格上进行了一千次测试,我知道它没有通过重新接收的步骤,但无法弄明白。
这是我的代码:
//variable :
$recaptcha = $_POST['g-recaptcha-response'];
//test captcha
if($recaptcha != '')
{
$secret = " MY KEY HERE";
$ip = $_SERVER['REMOTE_ADDR'];
$var = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secret."&response=".$recaptcha."&remoteip=".$ip);
$array = json_decode($var,true);
//check if captcha ok then check fields empty
if($array['success'])
如果您发现任何错误,请告诉我。
谢谢。
(事实上我删除了我的安全密钥)
答案 0 :(得分:1)
在我的测试中,我遇到了两个你可能遇到的问题。
remoteip
参数是可选的。当我删除它时,一切正常。原因如下:我在防火墙后面的私有IP上使用客户端和服务器计算机进行测试,因此我服务器上的$_SERVER['REMOTE_ADDR']
值为192.168.x.x. Google看到了我的NAT防火墙的公共IP,因此这是siteverify
试图匹配的内容。
您只能检查给定的response
一次。如果您尝试再次检查,它将始终失败。因此,在测试过程中,您需要每次都使用新的。
此外,您可以使用以下方法简化PHP代码:
"...siteverify?secret=$secret&response=$recaptcha");
答案 1 :(得分:0)
试试这个: $ secret =“YOUR-SECRET-KEY”;
$verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret=' . $secret . '&response=' . $_POST['g-recaptcha-response']);
$googleResponse = json_decode($verifyResponse);
if ($googleResponse->success)
{
$captchaVerified = true;
}