2017-01-26 10 views
2

私は、cURLリクエストを使用してサーバーに送信されたreCaptchaコードを検証しようとしています。これまでのところ、これはコードです:cURLを使用してphpからGoogleのreCaptchaコードを検証する

function verifyReCaptcha($conn,$recaptchaCode){ 
    $curl = curl_init("https://www.google.com/recaptcha/api/siteverify"); 
    $data = ["secret"=>"XXXXXX","response"=>$recaptchaCode]; 
    curl_setopt_array($curl, array(
     CURLOPT_RETURNTRANSFER => 1, 
     CURLOPT_HTTPHEADER => array('Accept: application/json'), 
     CURLOPT_POST => 1, 
     CURLOPT_POSTFIELDS => $data)); 
    $resp = curl_exec($curl); 
    curl_close($curl); 
    if ($resp == NULL){ 
     echo "Error: ".curl_errno($curl); 
    } else { 
     echo $resp; 
    } 
} 

私は取得していますという応答がありnull、それが与えるエラーが時には空白0、です。だから、私は完全にここに迷っている。適切に動作するようにコード化する方法は?

私はreCaptcha hereのドキュメントに従っています。

EDIT:私はすでにhereのソリューションを試してみましたが、それは私のためには機能しません。

+0

'CURLOPT_POSTFIELDS => $ data'を' CURLOPT_POSTFIELDS => http_build_query($ data)) 'に変更してみてください。配列はapplication/x-www-form-urlencodedではなくmultipart/form-data投稿を行うので、 – drew010

答えて

1

私は関連する質問を読んで、file_get_contentsを使用してそれを行うことができました。だから私は解答として、私のように孤立しているかもしれない人のために、私の解決策を投稿します。

function verifyReCaptcha($conn,$recaptchaCode){ 
    $postdata = http_build_query(["secret"=>"XXXXXX","response"=>$recaptchaCode]); 
    $opts = ['http' => 
     [ 
      '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); 
    return $check->success; 
} 

hereからほぼそのまま抽出されます。

関連する問題