web-dev-qa-db-fra.com

cURL Recaptcha ne fonctionne pas PHP

Ce que j'ai :

$data = array(
            'secret' => "my-app-secret",
            'response' => "the-response"
        );

$verify = curl_init();
curl_setopt($verify, CURLOPT_URL, "https://www.google.com/recaptcha/api/siteverify");
curl_setopt($verify, CURLOPT_POST, true);
curl_setopt($verify, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($verify, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($verify);

var_dump($response);

Ce que j'ai obtenu : bool(false) (ce qui signifie que curl_exec() a échoué)

Ce que j'attends : une réponse à un objet JSON

S'il vous plaît aider. Merci.

16
Kenth John Israel

Comme vous essayez de vous connecter via SSL, vous devez ajuster vos options cURL pour le gérer. Une solution rapide pour que cela fonctionne est si vous ajoutez curl_setopt($verify, CURLOPT_SSL_VERIFYPEER, false);

Si vous définissez CURLOPT_SSL_VERIFYPEER sur false, il acceptera tous les certificats qui lui sont donnés plutôt que de les vérifier.

<?php

$data = array(
            'secret' => "my-secret",
            'response' => "my-response"
        );

$verify = curl_init();
curl_setopt($verify, CURLOPT_URL, "https://www.google.com/recaptcha/api/siteverify");
curl_setopt($verify, CURLOPT_POST, true);
curl_setopt($verify, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($verify, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($verify, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($verify);

var_dump($response);
31
davids3

Voici une méthode alternative à CURL que j'ai trouvée si cela peut aider quelqu'un. Évidemment, entrez $ secret et $ response variables pour le transmettre correctement. Désolé, la question demande une solution CURL, mais c’est la méthode la plus rapide que j’ai vue. J’ai donc pensé que cela l’ajouterait de toute façon, car je sais que cela aidera quelqu'un. :)

$response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secret."&response=".$response);
$response = json_decode($response, true);
if($response["success"] === true){
    // actions if successful
}else{
    // actions if failed
}
4
thecommonthread

C'est plus facile d'utiliser "file_get_contents" avec POST:

$postdata = http_build_query(
            array(
                'secret' => [YOUR_SECRET_KEY],
                'response' => $_POST["g-recaptcha-response"]
            )
        );

        $opts = array('http' =>
            array(
                'method'  => 'POST',
                'header'  => 'Content-type: application/x-www-form-urlencoded',
                'content' => $postdata
            )
        );

        $context  = stream_context_create($opts);

        $result = file_get_contents('https://www.google.com/recaptcha/api/siteverify', false, $context);

        $check = json_decode($result);

        if($check->success) {
            echo "validate";
        } else {
            echo "wrong recaptcha";
        }
3
Andre Rodrigues

pour ceux qui préfèrent utiliser Shell_exec curl :

    $arrayku = array();
    $arrayku['secret'] = 'Your_SECRET_KEY';
    $arrayku['response'] = trim($_POST['g-recaptcha-response']);
    $dataku = http_build_query($arrayku);
    $respon_google = Shell_exec('curl -s -L -X POST "https://www.google.com/recaptcha/api/siteverify" --data "'.$dataku.'" --max-time 10 --compressed');
    $array_respon = json_decode($respon_google, true);
    if($array_respon['success']===false){
    echo 'Wrong recaptcha'; echo PHP_EOL;
        //goto wrong_captcha;
        exit;
    }
0
Fathur Rohim