2014-01-27 11 views
1

我想使用Fitbit API獲取「request token」方法的cURL請求。問題是它不顯示任何東西,只是一個空白的屏幕。然而,這個過程假設給我一個「訪問令牌」,我可以使用它來生成一個登錄URL來驗證用戶身份並授予我的應用訪問權限。使用PHP cURL的Fitbit oAuth - 請求令牌返回空白屏幕

我知道這裏有oAuth php類,但我的服務器不支持oAuth所以只能使用cURL。請幫忙!提前謝謝了。

<?php 
define('FITBIT_KEY', '<consumer key from fitbit website>'); 
define('FITBIT_SECRET', '<consumer secret from fitbit website>'); 

function buildBaseString($baseURI, $method, $params) 
{ 
    $r = array(); 
    ksort($params); 
    foreach($params as $key=>$value){ 
     $r[] = "$key=" . rawurlencode($value); 
    }    

    return $method."&" . rawurlencode($baseURI) . '&' . rawurlencode(implode('&', $r)); //return complete base string 
} 

function buildAuthorizationHeader($oauth) 
{ 
    $r = 'Authorization: OAuth '; 
    $values = array(); 
    foreach($oauth as $key=>$value) 
     $values[] = "$key=\"" . rawurlencode($value) . "\""; 

    $r .= implode(', ', $values); 
    return $r; 
} 

$url = "http://api.fitbit.com/oauth/request_token"; 

$oauth = array('oauth_consumer_key' => FITBIT_KEY, 
       'oauth_consumer_secret' => FITBIT_SECRET, 
       'oauth_nonce' => time(), 
       'oauth_signature_method' => 'HMAC-SHA1', 
       'oauth_timestamp' => time(), 
       'oauth_version' => '1.0', 
       'oauth_callback' => 'http://h1.servy.net/zerocuisine/index.php'); 
$base_info = buildBaseString($url, 'GET', $oauth); 
$composite_key = rawurlencode(FITBIT_SECRET) . '&'; 
$oauth_signature = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true)); 
$oauth['oauth_signature'] = $oauth_signature; 

$header = array(buildAuthorizationHeader($oauth), 'Expect:'); 
$options = array(CURLOPT_HTTPHEADER => $header, 
        CURLOPT_HEADER => false, 
        CURLOPT_URL => $url, 
        CURLOPT_RETURNTRANSFER => true, 
        CURLOPT_SSL_VERIFYPEER => false); 

$feed = curl_init(); 
curl_setopt_array($feed, $options); 
$json = curl_exec($feed); 
curl_close($feed); 

$fitbit_data = json_decode($json); 

echo '<pre>'.print_r($fitbit_data,true).'</pre>'; ?> 

回答

0

這裏有兩個問題導致空白屏幕。您在$ url中使用了http而不是https。對於fitbit令牌請求,需要使用https。你還在不是json數組的字符串上運行json_decode。 $ json中的數據是http身體響應中的一個字符串。

這裏是我詳細運行,以使其充分工作。

相反的:

$url = "http://api.fitbit.com/oauth/request_token"; 

用途:

$url = "https://api.fitbit.com/oauth/request_token"; 

同時刪除:

$fitbit_data = json_decode($json); 

變化:

echo '<pre>'.print_r($json,true).'</pre>'; ?> 

要:

echo '<pre>'. $json .'</pre>'; ?> 

這將離開你的成功的響應:

<pre>oauth_token=93bf6ded129fcfa2b687ce6e625477af&oauth_token_secret=c9cc547ca6dd484f73763e23b0987121&oauth_callback_confirmed=true</pre> 

顯示到瀏覽器中。

P.S.請務必將其重製爲Oauth 2.0。 OAuth 1.0a支持將於2016年4月12日從Fitbit Web API中刪除。