获取电子邮件哈希时的Windows Live Contacts API错误 - JavaScript

时间:2011-06-30 17:53:58

标签: windows api contacts msn import-contacts

以下用于获取所有电子邮件地址的Window Live Contacts API的代码。它在登录,注销和其他身份验证中工作正常。我可以通过Get Data函数调用收集登录用户的所有用户信息,但是我收到了用户的电子邮件哈希值,其余的电子邮件哈希值都是空白的。我的联系簿中有10个电子邮件地址。

如何使用此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>

2 个答案:

答案 0 :(得分:6)

我遇到了同样的问题并且找到了解决方案,您需要做的就是将以下范围添加到您要求的范围列表中:“wl.contacts_emails”

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

完成后,我不得不从我的个人资料中删除我的应用程序以重置所有范围并再次添加我的应用程序。 (但如果你不想问所有alerady使用你的应用程序的人,我可以重置秘密令牌以强制用户再次添加你的应用程序。)

答案 1 :(得分:0)

Microsoft不允许您通过API获取联系人电子邮件。他们只发出用于匹配您电子邮件的电子邮件哈希值。

很抱歉打破你,但你运气不好。

我花了5天时间试图获取Hotmail联系人,但我无法理解。