Php Recaptcha请求返回Null
我正试图在我的注册表单中实现这个Recaptcha请求,但是它不起作用。当我在我的网站上成功验证Recaptcha时,cURL/JSON请求返回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_
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数据在这里}}})谢谢,但我还是不知道该把它放在哪里。你能把答案贴在突出显示的地方吗?:)'“成功”必须是布尔型的。这对我来说是有效的,我正在本地测试,SSL Verifypeer在这种情况下对我从来都不起作用。很高兴听到这个消息
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)