2011-04-03 17 views
5

Sitemdeki kullanıcıları bir Soundcloud oturumu temel alarak yetkilendirmeye çalışıyorum.Soundcloud (Oauth2) API erişim belirteci alınıyor

Oauth kimlik doğrulamasını kullanır.

kullanıcı sitemde bir düğmeyi tıklamak vardır ve giriş yapan Soundcloud sitesinde. Ben bir accessToken almak zorunda nerede kullanıcı geri siteme yönlendirildi sonra

yönlendirilir.

Bu

iletisiyle başarısız olur:

[data]; False 
[info][url]     : https://api.soundcloud.com/oauth2/token 
     [content_type]   ; NULL 
     [http_code]    : 0 
     [header_size]   : 0 
     [request_size]   : 0 
     [filetime]    : -1 
     [ssl_verify_result]  : 0 
     [redirect_count]   : 0 
     [total_time]    : 0.031 
     [namelookup_time]  : 0 
     [connect_time]   : 0.031 
     [pretransfer_time]  : 0 
     [size_upload]   : 0 
     [size_download]   : 0 
     [speed_download]   : 0 
     [speed_upload]   : 0 
     [download_content_length]: -1 
     [upload_content_length] : -1 
     [starttransfer_time]  : 0 
     [redirect_time]   : 0 
     [certinfo]    [] 

kod ı çalıştırın::

İstenen URL de gerekirse ben bukle şeyler terk ettim 0.

HTTP kodu ile yanıt verdi

$soundcloud = new SoundcloudModel('*****', '*****', '*****'); 

    try { 
     $accessToken = $soundcloud->accessToken($this->request['code']); 
    } catch (Services_Soundcloud_Invalid_Http_Response_Code_Exception $e) { 
     exit($e->getMessage()); 
    } 

Soundcloud API kodu:

protected function _getAccessToken($postData, $curlOptions = array()) 
{ 
    $options = array(CURLOPT_POST => true, CURLOPT_POSTFIELDS => $postData); 
    $options += $curlOptions; 
    $response = json_decode(
     $this->_request($this->getAccessTokenUrl(), $options), 
     true 
    ); 

    if (array_key_exists('access_token', $response)) { 
     $this->_accessToken = $response['access_token']; 

     return $response; 
    } else { 
     return false; 
    } 
} 

protected function _request($url, $curlOptions = array()) 
{ 
    $ch = curl_init($url); 
    $options = $this->_curlOptions; 
    $options += $curlOptions; 

    if (array_key_exists(self::CURLOPT_OAUTH_TOKEN, $options)) { 
     $includeAccessToken = $options[self::CURLOPT_OAUTH_TOKEN]; 
     unset($options[self::CURLOPT_OAUTH_TOKEN]); 
    } else { 
     $includeAccessToken = true; 
    } 

    if (array_key_exists(CURLOPT_HTTPHEADER, $options)) { 
     $options[CURLOPT_HTTPHEADER] = array_merge(
      $this->_buildDefaultHeaders(), 
      $curlOptions[CURLOPT_HTTPHEADER] 
     ); 
    } else { 
     $options[CURLOPT_HTTPHEADER] = $this->_buildDefaultHeaders(
      $includeAccessToken 
     ); 
    } 

    curl_setopt_array($ch, $options); 

    $data = curl_exec($ch); 
    $info = curl_getinfo($ch); 

    print_r(array('ch'=>$ch, 'data'=>$data, 'info'=>$info)); 

    curl_close($ch); 

    $this->_lastHttpResponseHeaders = $this->_parseHttpHeaders(
     substr($data, 0, $info['header_size']) 
    ); 
    $this->_lastHttpResponseBody = substr($data, $info['header_size']); 
    $this->_lastHttpResponseCode = $info['http_code']; 

    if ($this->_validResponseCode($this->_lastHttpResponseCode)) { 
     return $this->_lastHttpResponseBody; 
    } else { 
     throw new Services_Soundcloud_Invalid_Http_Response_Code_Exception(
      null, 
      0, 
      $this->_lastHttpResponseBody, 
      $this->_lastHttpResponseCode 
     ); 
    } 
} 

Bu uzun yazı için özür dilerim, umarım bana yardımcı olabilirsiniz!

cevap

3

Anladım.

PHP tarafından kullanılan cURL'nin eski bir sertifika paketini (en azından Windows'ta) kullandığını öğrendim.

Ben en son sertifika paket indirdiğiniz: http://curl.haxx.se/docs/caextract.html ve aşağıdaki cURL seçeneği eklendi:

curl_setopt($ch, CURLOPT_CAINFO, 'C:/absolute/path/to/cacert.pem'); 
İlgili konular