2011-06-21 77 views
1

我想在以下PHP代碼中使用Google通訊錄API導入某人的聯繫人。它使用OAuth 1.0協議:使用OAuth訪問Google通訊錄的問題

<?php 
    $consumer_key="www.spats.in"; 
    $secret="***********************"; 
    $mt = microtime(); 
    $rand = mt_rand(); 
    $nonce = md5($mt.$rand); 

    $url="https://www.google.com/accounts/OAuthGetRequestToken"; 
    $params="oauth_callback=www.spats.in/nssc2/gmailContactsImport.php". 
      "&oauth_consumer_key=$consumer_key". 
      "&oauth_nonce=$nonce". 
      "&oauth_signature_method=HMAC-SHA1". 
      "&oauth_timestamp=".time(). 
      "&oauth_version=1.0". 
      "&scope=https://www.google.com/m8/feeds/"; 

    $base_string = "GET&".urlencode($url).'?'.urlencode($params); 
    $signature = base64_encode(hash_hmac('sha1', $base_string, $secret, true)); 
    $params.="&oauth_signature=".$signature; 

    $result=file_get_contents($url."?".$params); 
    echo $result; 
?> 

然而,在執行PHP代碼,結果如下:

signature_invalid base_string:GET&https%3A%2F%2Fwww.google.com%2Faccounts%2FOAuthGetRequestToken&oauth_callback%3Dwww.spats.in%252Fnssc2%252FgmailContactsImport.php%26oauth_consumer_key%3Dwww.spats.in%26oauth_nonce%3D36bc2ce5f00b79300d753bb94dc924df%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1308644840%26oauth_version%3D1.0%26scope%3Dhttps%253A%252F%252Fwww.google.com%252Fm8%252Ffeeds%252F 

什麼是簽名的問題?我似乎無法弄清楚。

+0

我認爲編碼簽名兩次可能是問題[一旦使用urlencode(),第二次使用base64_encode()],所以我刪除了base64_encode()。現在它顯示錯誤400:您的客戶已發出格式錯誤或非法請求。 – aakashbhowmick

+0

這是一個類似的,或者更確切地說,你想要在[9LESSONS.com上的博客文章](http://www.9lessons.info/2011/06/import-gmail-contacts-google-oauth.html) –

回答