2011-06-30 42 views
1

以下用於獲取所有電子郵件地址的Window Live聯繫人API代碼。它在登錄,註銷和其他身份驗證方面的工作很好。我可以通過Get Data函數調用收集登錄用戶的所有用戶信息,但是正在收到用戶的電子郵件散列,其餘電子郵件散列是空白的。我的通訊錄中有10個電子郵件地址。Windows Live聯繫人獲取電子郵件哈希的API錯誤 - JavaScript

如何使用此api獲取我的聯繫人的電子郵件地址?

<html> 
    <head> 
     <script src="https://js.live.net/v5.0/wl.js" type="text/javascript"></script> 
    </head> 
    <body> 

    <a href='javascript:void(0);' onclick='signUserIn();'>signUserIn</a> <br> 
    <a href='javascript:void(0);' onclick='signUserOut()'>signUserOut</a><br> 

    <a href='javascript:void(0);' onclick='loginStatus()'>Check User Status</a> 

    <a href='javascript:void(0);' onclick='getData()'>Get Data</a> 

    <script type="text/javascript" > 

     WL.init({ 
      client_id: '0000000044444444', 
      redirect_uri: 'http://domain.com/contact.php', 
      response_type: "token", 
      logging: true 
     }); 

     var scopesArr = ['wl.signin', 'wl.basic', 'wl.emails']; 

     function signUserIn() { 
      WL.login({ scope: scopesArr }); 

     } 

     function loginStatus() { 
      WL.getLoginStatus(function(response) { 
      alert("response " + response); 

      }); 
     } 

     function getData() { 
      alert("getData"); 

      WL.api(
       { 
        path: "me/contacts", 
        method: "GET", 
        scope: scopesArr 
       }, 
        function (result) { 

         if (!result.error) { 
          var resultData = result.data; 

          var emailHashes = new Array;      
          for (i = 0; i < resultData.length; i++) { 

           for (j = 0; j < resultData[i].email_hashes.length; j++) { 
            alert("resultData " + resultData[i].email_hashes[j]); 
            emailHashes[emailHashes.length] = resultData[i].email_hashes[j]; 
           } 
          } 
          var resultText = ""; 
          for (k = 0; k < emailHashes.length; k++) { 
           resultText += emailHashes[k] + "\r\n";      
          } 

          // document.getElementById("emailHashes").setAttribute("rows", emailHashes.length); 
          document.getElementById("lists").value = resultText; 
         } 
         else { 
          alert("Error getting contacts: " + result.error.message); 
         } 
      }); 

     } 

     function signUserOut() { 
      WL.logout(); 
     } 

    </script> 

    <textarea rows="10" cols="100" id="lists"></textarea> 
    </body> 
</html> 

回答

0

Microsoft不允許您通過API獲取聯繫人電子郵件。他們只發出電子郵件散列,用於匹配您的電子郵件。

對不起,打破它給你,但你是運氣不好。

我花了5天的時間試圖獲取Hotmail聯繫人,我無法弄清楚。

+1

那麼twitter是如何獲取電子郵件ID? – coderex

+0

-1這是不正確的。 @Thierry指出,如果你沒有請求正確的權限,API將只顯示你的哈希值。 –

6

我有同樣的問題,我找到解決方案,所有你需要做的是以下範圍添加到您的你的要求範圍清單:「wl.contacts_emails」這樣做

WL.login({scopes: ["wl.contacts_emails"]}); 

後,我不得不從我的配置文件中刪除我的應用程序來重置所有範圍,並再次添加我的應用程序。 (但是如果你不想問所有alerady使用你的應用的人,我可以重置祕密令牌以強制用戶再次添加你的應用)。

+0

謝謝你節省了我的時間! – Maximus

相關問題