Google 验证码 php 验证
Google reCaptcha with php validation
我正在尝试将 reCaptcha v2.0 与 php 一起使用,在服务器验证中我使用此代码:
if(isset($_POST['Direccion_Email']) AND ($_POST['enviar'])) {
if(isset($_POST['g-recaptcha-response'])){
$mensaje_error = "";
include 'config-formulario.php';
require_once __DIR__ . '/recaptcha-master/src/autoload.php';
$recaptcha = new \ReCaptcha\ReCaptcha($secret);
$resp = $recaptcha->verify($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']);
if (!$resp->isSuccess()) {
$mensaje_error .= "Control Anti SPAM no es válido <br />";
$errors = $resp->getErrorCodes();
} else {
//DO SOMETHING;
}
但是当我尝试发送一个包含姓名、电子邮件和评论的简单联系表时,是 return 这个警告:
警告:file_get_contents():SSL 操作失败,代码为 1。OpenSSL 错误消息:error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate 在 /home/diego/www/systec/scripts/recaptcha-master/src/ReCaptcha/RequestMethod/Post.php 中验证失败第 68 行
警告:file_get_contents():无法在第 68 行 /home/diego/www/systec/scripts/recaptcha-master/src/ReCaptcha/RequestMethod/Post.php 中启用加密
警告:file_get_contents(https://www.google.com/recaptcha/api/siteverify):打开流失败:第 68 行 /home/diego/www/systec/scripts/recaptcha-master/src/ReCaptcha/RequestMethod/Post.php 中的操作失败
我正在本地主机上测试这个。
任何建议。
谢谢。
@jww 的回答对我有效:
关于步骤 (1),请参阅 How do you sign Certificate Signing Request with your Certification Authority?. For (2), see How to create a self-signed certificate with openssl?。后者还向您展示了如何创建签名请求(相对于自签名证书)。它们是相同的步骤 - 唯一不同的是签名请求缺少 -x509 选项。
改变
$verify=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret={$secret}&response={$response}");
到
$ch = curl_init("https://www.google.com/recaptcha/api/siteverify?secret={$secret}&response={$response}");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$verify = curl_exec($ch);
我正在尝试将 reCaptcha v2.0 与 php 一起使用,在服务器验证中我使用此代码:
if(isset($_POST['Direccion_Email']) AND ($_POST['enviar'])) {
if(isset($_POST['g-recaptcha-response'])){
$mensaje_error = "";
include 'config-formulario.php';
require_once __DIR__ . '/recaptcha-master/src/autoload.php';
$recaptcha = new \ReCaptcha\ReCaptcha($secret);
$resp = $recaptcha->verify($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']);
if (!$resp->isSuccess()) {
$mensaje_error .= "Control Anti SPAM no es válido <br />";
$errors = $resp->getErrorCodes();
} else {
//DO SOMETHING;
}
但是当我尝试发送一个包含姓名、电子邮件和评论的简单联系表时,是 return 这个警告:
警告:file_get_contents():SSL 操作失败,代码为 1。OpenSSL 错误消息:error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate 在 /home/diego/www/systec/scripts/recaptcha-master/src/ReCaptcha/RequestMethod/Post.php 中验证失败第 68 行
警告:file_get_contents():无法在第 68 行 /home/diego/www/systec/scripts/recaptcha-master/src/ReCaptcha/RequestMethod/Post.php 中启用加密
警告:file_get_contents(https://www.google.com/recaptcha/api/siteverify):打开流失败:第 68 行 /home/diego/www/systec/scripts/recaptcha-master/src/ReCaptcha/RequestMethod/Post.php 中的操作失败
我正在本地主机上测试这个。
任何建议。
谢谢。
@jww 的回答对我有效:
关于步骤 (1),请参阅 How do you sign Certificate Signing Request with your Certification Authority?. For (2), see How to create a self-signed certificate with openssl?。后者还向您展示了如何创建签名请求(相对于自签名证书)。它们是相同的步骤 - 唯一不同的是签名请求缺少 -x509 选项。
改变
$verify=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret={$secret}&response={$response}");
到
$ch = curl_init("https://www.google.com/recaptcha/api/siteverify?secret={$secret}&response={$response}");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$verify = curl_exec($ch);