php - Recaptcha 请求返回 Null

标签 php json curl recaptcha

我正在尝试将此 Recaptcha 请求实现到我的注册表单中,但它不起作用。当我在我的网站上成功验证 Recaptcha 时,cURL/JSON 请求返回 null

我尝试在 JSON 请求的 "error-codes": 上使用 var_dump,它只返回 null;而在 this document说明很明显是要在JSON请求中输出两项。

提前致谢,我没有用 JSON/cURL 做太多工作,所以请放轻松。

这是我的代码:

PHP

<?php

    if($_SERVER["REQUEST_METHOD"] == "POST") {
        $recaptcha = $_POST['g-recaptcha-response'];
        if(!empty($recaptcha)) {

            function getCurlData($url) {
                $curl = curl_init();
                curl_setopt($curl, CURLOPT_URL, $url);
                curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
                curl_setopt($curl, CURLOPT_TIMEOUT, 10);
                curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16");
                $curlData = curl_exec($curl);
                curl_close($curl);
                return $curlData;
            }

            $google_url = "https://www.google.com/recaptcha/api/siteverify";
            $secret = 'You will never know >:D';
            $ip = $_SERVER['REMOTE_ADDR'];
            $url = $google_url . "?secret=" . $secret . "&response=" . $recaptcha . "&remoteip=" . $ip;
            $res = getCurlData($url);
            $res = json_decode($res, true);

            // var_dumping returns null
            var_dump($res);

            //reCaptcha success check 
            if($res['success'] == true) {
                echo "Recaptcha was successfully validated";
            } else {
                echo "Recaptcha was not validated, please try again";
            }
        } else {
            echo "You didn't validate the Recaptcha";
        }
    }
?>

HTML

<form action="home.php" method="post">
    <div class="g-recaptcha" data-sitekey="I removed it for this post"></div>
    <input class="btn btn-primary" type="submit" name="submit" value="SIGN UP" />
</form>

最佳答案

这是我的代码运行没有问题:

客户端:

<div class="g-recaptcha" data-sitekey="PUBLIC_KEY"></div>

服务器端:

if (isset($_POST['g-recaptcha-response'])) {
    $captcha = $_POST['g-recaptcha-response'];
    $privatekey = "SECRET_KEY";
    $url = 'https://www.google.com/recaptcha/api/siteverify';
    $data = array(
        'secret' => $privatekey,
        'response' => $captcha,
        'remoteip' => $_SERVER['REMOTE_ADDR']
    );

    $curlConfig = array(
        CURLOPT_URL => $url,
        CURLOPT_POST => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POSTFIELDS => $data
    );

    $ch = curl_init();
    curl_setopt_array($ch, $curlConfig);
    $response = curl_exec($ch);
    curl_close($ch);
}

$jsonResponse = json_decode($response);

if ($jsonResponse->success === true) {
    doSomething();
}
else {
    doSomeOtherThing();
}

工作 here ! :)

关于php - Recaptcha 请求返回 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28804482/

相关文章:

php - 如何正确使用 PHP 监听传入的套接字连接?

json - 如何使用 Go 将 JSON 文件解析为结构

jquery - Javascript 字符串化对象

curl - 如何使用 curl 使用 "Content-Type: multipart/related"上传一个图像文件

php - 如何让这个 jquery 邮政编码地址检索器与 cURL 一起工作?

php - 管理员确认后登录

php - jquery masonry/isotope 内容周围的边框(没有空格)

php - 循环内的 SQL 查询

java - 获取反序列化器中的属性类型( jackson )

php - 如何使用 cURL 和 PHP 抓取 LinkedIn 公司页面? No CSRF token found in headers 错误