2011-06-30 38 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

相关问题