2011-04-03 19 views
5

विफल हो रहा है मैं ध्वनि साइट पर आधारित ध्वनि साइट पर उपयोगकर्ताओं को अधिकृत करने की कोशिश कर रहा हूं।साउंडक्लाउड (Oauth2) एपीआई एक्सेस टोकन प्राप्त करने में

यह ओथ प्रमाणीकरण का उपयोग करता है।

उपयोगकर्ता अपनी साइट पर एक बटन क्लिक करने के लिए है और Soundcloud साइट है, जहां यह लॉग करता है।

कि जहां मैं एक accessToken प्राप्त करने के लिए उपयोगकर्ता वापस अपनी साइट के लिए रीडायरेक्ट के बाद के लिए पुनः निर्देशित किया गया है।

इस संदेश के साथ विफल रहता है: अनुरोध किया गया URL HTTP कोड के साथ जवाब दिया 0.

मैं कर्ल सामान फेंक दिया गया है अगर आप इसे की जरूरत है:

[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]    [] 

कोड मैं निष्पादित करें:

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

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

Soundcloud एपीआई कोड:

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 
     ); 
    } 
} 

इस लंबी पोस्ट के लिए खेद है, आशा है कि आप लोग मेरी मदद कर सकते हैं!

उत्तर

3

समझ गया।

मुझे पता चला कि PHP द्वारा उपयोग किया गया कर्ल पुराना प्रमाणपत्र बंडल (कम से कम विंडोज़) का उपयोग करता है।

मैं से नवीनतम प्रमाणपत्र बंडल डाउनलोड किया है: http://curl.haxx.se/docs/caextract.html और निम्नलिखित cURL विकल्प कहा:

curl_setopt($ch, CURLOPT_CAINFO, 'C:/absolute/path/to/cacert.pem'); 
संबंधित मुद्दे