2016-09-15 6 views
1

私はこれを2時間作業していますが、何が間違っているのか分かりません。私はcURLにURL(パラメータ付き)だけを要求し、応答はJSON形式の何らかのaccess_tokenであると予想されますが、私は継続的にエラーが発生しています。curl_exec()関数はfalseを返しています。準備されたURLをブラウザのアドレスバーに直接貼り付けると適切なaccess_tokenが得られるため、URLは問題ありません。私はグラフAPI(Facebook)リクエストを作成していることを知る必要があります。ここではいくつかのコードです:単純なGET要求でcURL関数がfalseを返す

private function getAccessToken() { 
      $uri = $this->prepareTokenUri(); // getting the uri 
      echo "<strong>$uri</strong><br/>"; // printing the uri for debugging purpose 
      $this->setCurlToGet($uri); // explained below 
      $response = curl_exec($this->curl); 
      echo "<b>Here Goes Response</b>"; 
      var_dump($response); // boolean false 
      $response = json_decode($response, true); 
      $this->token_expires = $response['expires_in']; 
      $this->token_type = $response['type']; 
      return $response['access_token']; 
     } 

機能がsetCurlToGet()だけで、次を行います。

// call this function only when making a GET request 
private function setCurlToGet($url) { 
      $this->unsetCurl(); 
      $this->curl = curl_init(); 
      curl_setopt($this->curl, CURLOPT_URL, $url); 
      curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, true); 
      return $this->curl; 
     } 

unsetCurl()方法は次の通りである:私はvar_dumpedいる

private function unsetCurl() { 

      if(!is_null($this->curl)) { 
       curl_close($this->curl); 
       $this->curl = null; 
      } 
     } 

を()すべてを、 cURLリソース変数($this->curl)であり、実際にはcurlリソース変数です。 curl_exec()への呼び出しはfalseを返すので、私は理由を理解できません。繰り返しますが、URLに何も問題はないことを繰り返したいのですが、印刷されたURL(行echo "<strong>$uri</strong><br/>";)がコピーされてブラウザのアドレスバーに貼り付けられたときに、結果が必要なaccess_tokenになるためです。あなたはprepareTokenUri()が準備されていることをURIのパターンを見てみたかった場合

https://graph.facebook.com/v2.3/oauth/access_token?client_id={my-appid}&redirect_uri={response-handler-script-uri}&client_secret={app-secret-code}&code={a-long-code}

+3

apacheのサービスをリロード 'curl_error()'何も表示していますか? – AbraCadaver

+0

が理想的に機能するはずです。チェックするためにプライベートにプライベートに変更する –

+0

@AbraCadaverちょうどチェックした。 SSL証明書の問題:ローカル発行者証明書を取得できません。今、このことを解決する方法は? – Fresher

答えて

2

クイックフィックス:

は他ますcurl_setopt方法と同じエリアでごsetCurlToGet機能にこれらの行を追加します。 。

curl_setopt($this->curl, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($this->curl, CURLOPT_SSL_VERIFYPEER, 0); 

これで唯一の問題は、誰かが代わりにFacebookのの、DNSが自分のサーバーに移動させることができれば、あなたはそれがFacebookの確かであることを確認されていないことを、URLから予想されるようにということです。だから、

あなたはそれを心配している場合は、適切な修正:

1)https://curl.haxx.se/ca/cacert.pem

2からcacert.pemのダウンロードは)あなたが置く場所の正しいパスで、php.iniに以下の行を追加します。上記のファイル

curl.cainfo=/path/to/cacert.pem 

3)

関連する問題