Php Recaptcha请求返回Null

Php Recaptcha请求返回Null,php,json,curl,recaptcha,Php,Json,Curl,Recaptcha,我正试图在我的注册表单中实现这个Recaptcha请求,但是它不起作用。当我在我的网站上成功验证Recaptcha时,cURL/JSON请求返回null 我尝试在JSON请求的“error codes:上使用var\u dump,它只返回null;而在中,它表明它显然意味着在JSON请求中输出两个项目 提前感谢,我还没有对JSON/cURL做过很多工作,所以请对我放松 这是我的密码: PHP Api说:方法:POST,您正在发送“GET”请求。 选中上的CURLOPT_POST和CURLOPT_

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

我尝试在JSON请求的
“error codes:
上使用
var\u dump
,它只返回null;而在中,它表明它显然意味着在JSON请求中输出两个项目

提前感谢,我还没有对JSON/cURL做过很多工作,所以请对我放松

这是我的密码:

PHP


Api说:方法:POST,您正在发送“GET”请求。 选中上的
CURLOPT_POST
CURLOPT_POSTFIELDS
选项

编辑: 我刚刚检查了API,它也可以与GET一起工作。我没有看到你的代码中有任何错误。您能否将您的功能临时更改为:

   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);

        if (!$curlData) {
            throw new \Exception('Curl error: ' . curl_error($curl));
        }
        curl_close($curl);


        return $curlData;
    }

下面是我的代码,运行时没有问题:

客户端:

<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();
}

工作!:)

您的问题可能与SSL证书有关。 您可以将此行放在curl忽略它的位置:

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false)

但是,您可以在本地主机上测试这一点,但在上载网站时,最好删除SSL证书和这一行。

它说我在哪里使用GET请求?我什么时候可以实现'CURLOPT_POSTFIELDS',我不熟悉这个,所以我真的不知道该怎么做。默认请求是
GET
,您没有指定请求类型=>您正在发出GET请求。查看文档和示例,至少有3种方法可以指定POST字段。如果您查看我的POST指定代码,我看不出我做错了什么。你能详细说明一下吗?你的卷发要求应该是邮寄的<代码>curl_setopt($curl,CURLOPT_POST,1)和post选项也
curl\u setopt($curl,CURLOPT\u POSTFIELDS,{{您的post数据在这里}}})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();
}
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false)