Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Lync UCWA-创建应用程序出现HTTP 409:冲突错误_Javascript_Api_Rest_Lync_Ucwa - Fatal编程技术网

Javascript Lync UCWA-创建应用程序出现HTTP 409:冲突错误

Javascript Lync UCWA-创建应用程序出现HTTP 409:冲突错误,javascript,api,rest,lync,ucwa,Javascript,Api,Rest,Lync,Ucwa,在过去的几天里,我一直在尝试使用微软的UCWAAPI(RESTAPI)为我们的Lync服务开发一个应用程序。为了让应用程序正常工作:我首先必须使用POST请求将其提交到API,并发送到特定的URL。首先,我必须向服务器进行身份验证,我通过向API发布用户名和密码凭据来实现这一点。然后,我获得一个访问令牌,通过在每个请求的头中发布该令牌,我可以使用该令牌向API发出进一步的请求。我已经能够让访问令牌工作,但是当我试图通过向发布HTTP请求来注册应用程序时:事情将开始出错 所有这些都是通过一个Jav

在过去的几天里,我一直在尝试使用微软的UCWAAPI(RESTAPI)为我们的Lync服务开发一个应用程序。为了让应用程序正常工作:我首先必须使用POST请求将其提交到API,并发送到特定的URL。首先,我必须向服务器进行身份验证,我通过向API发布用户名和密码凭据来实现这一点。然后,我获得一个访问令牌,通过在每个请求的头中发布该令牌,我可以使用该令牌向API发出进一步的请求。我已经能够让访问令牌工作,但是当我试图通过向发布HTTP请求来注册应用程序时:事情将开始出错

所有这些都是通过一个JavaScript文件与iFrame一起工作来完成的,以绕过同源策略

这就是我的代码当前的样子:

<!DOCTYPE html>
<html lang="no">
    <head>
        <meta charset="UTF-8" />
        <title>PresInfoDisp</title>
    </head>
    <body>
        <iframe src="https://lyncextws.company.com/Autodiscover/XFrame/XFrame.html" id="xFrame" style="display: none;"></iframe>
        <script type="text/javascript" src="jquery.js"></script>
        <script type="text/javascript">

        var access_token;

        var stage = 0;

        // CONNECT AND AUTHENTICATE WITH LYNC UCWA SERVICE
        function connectAndAuthenticate() {

            stage = 1;

            var request = { 
              accepts: 'application/json', 
              type: 'POST', 
              url: 'https://lyncextws.company.com/WebTicket/oauthtoken',
              data: 'grant_type=password&username=alexander@domain.company.com&password=somePassword'
            }; 
            document.getElementById('xFrame').contentWindow.postMessage(JSON.stringify(request), 'https://lyncextws.company.com/WebTicket/oauthtoken');
        }

        // REQUEST A USER RESOURCE
        function getUserResourceAuthRequest() {

            stage = 0;

            var request = { 
              accepts: 'application/json', 
              type: 'GET', 
              url: 'https://lyncextws.company.com/Autodiscover/AutodiscoverService.svc/root/oauth/user?originalDomain=company.com'
            }; 
            document.getElementById('xFrame').contentWindow.postMessage(JSON.stringify(request), 'https://lyncextws.company.com/Autodiscover/AutodiscoverService.svc/root/oauth/user?originalDomain=company.com');

        }

        function getUserResource() {

            stage = 2;

            var request = { 
              accepts: 'application/json', 
              type: 'GET', 
              url: 'https://lyncextws.company.com/Autodiscover/AutodiscoverService.svc/root/oauth/user?originalDomain=company.com',
              headers: {Authorization: "Bearer "+access_token}
            }; 
            document.getElementById('xFrame').contentWindow.postMessage(JSON.stringify(request), 'https://lyncextws.company.com/Autodiscover/AutodiscoverService.svc/root/oauth/user?originalDomain=company.com');

        }

        // REGISTER APPLICATION RESOURCE
        function registerApplication() {

            stage = 3;

            var request = { 
              accepts: 'application/json', 
              type: 'POST', 
              url: 'https://lyncextws.company.com/ucwa/oauth/v1/applications',
              headers: {Authorization: "Bearer "+access_token},
              data: {'userAgent': 'InfoDisp1',  'endpointId' : '2d9dc28d-4673-4035-825c-feb64be28e4e', 'culture': 'en-US'}
            }; 
            document.getElementById('xFrame').contentWindow.postMessage(JSON.stringify(request), 'https://lyncextws.company.com/ucwa/oauth/v1/applications');

        }

        // GRAB A LIST OF CONTACTS
        function listContacts() {

            stage = 4;

            var request = { 
              accepts: 'application/json', 
              type: 'GET', 
              url: 'https://lyncextws.company.com/ucwa/oauth/v1/applications',
              headers: {Authorization: "Bearer "+access_token}
            }; 
            document.getElementById('xFrame').contentWindow.postMessage(JSON.stringify(request), 'https://lyncextws.company.com/ucwa/v1/applications');

        }

        this.receiveMessage = function(message) { 

            switch(stage) {
                case 1:

                    var beforeReplace = message.data.replace("/\\/g", "");
                    var json = jQuery.parseJSON(beforeReplace);
                    var json2 = jQuery.parseJSON(json.responseText);
                    access_token = json2.access_token;
                    console.log(json2.access_token);
                    console.log(message);

                    getUserResource();

                    break;
                case 0:
                    console.log(message);

                    connectAndAuthenticate();

                    break;

                case 2:

                    var beforeReplace = message.data.replace("/\\/g", "");
                    var json = jQuery.parseJSON(beforeReplace);
                    var json2 = jQuery.parseJSON(json.responseText);
                    console.log(json2._links.applications.href);

                    window.setTimeout(function(){registerApplication()}, 5000);

                    break;
                case 3:

                    console.log(message);

                    break;
                case 4:



                break;
            }


        }; 
        window.addEventListener('message', this.receiveMessage, false);


        $(window).load(function() {
            getUserResourceAuthRequest();
            //console.log(access_token);
        });

        </script>
    </body>
</html>

预信息显示
var访问令牌;
var阶段=0;
//使用LYNC UCWA服务进行连接和身份验证
函数connectAndAuthenticate(){
阶段=1;
var请求={
接受:“application/json”,
键入:“POST”,
网址:'https://lyncextws.company.com/WebTicket/oauthtoken',
数据:“授权类型=密码和用户名”=alexander@domain.company.com&password=somePassword'
}; 
document.getElementById('xFrame').contentWindow.postMessage(JSON.stringify(request),'https://lyncextws.company.com/WebTicket/oauthtoken');
}
//请求用户资源
函数getUserResourceAuthRequest(){
阶段=0;
var请求={
接受:“application/json”,
键入:“GET”,
网址:'https://lyncextws.company.com/Autodiscover/AutodiscoverService.svc/root/oauth/user?originalDomain=company.com'
}; 
document.getElementById('xFrame').contentWindow.postMessage(JSON.stringify(request),'https://lyncextws.company.com/Autodiscover/AutodiscoverService.svc/root/oauth/user?originalDomain=company.com');
}
函数getUserResource(){
阶段=2;
var请求={
接受:“application/json”,
键入:“GET”,
网址:'https://lyncextws.company.com/Autodiscover/AutodiscoverService.svc/root/oauth/user?originalDomain=company.com',
标头:{授权:“承载”+访问令牌}
}; 
document.getElementById('xFrame').contentWindow.postMessage(JSON.stringify(request),'https://lyncextws.company.com/Autodiscover/AutodiscoverService.svc/root/oauth/user?originalDomain=company.com');
}
//注册应用程序资源
函数注册表应用程序(){
阶段=3;
var请求={
接受:“application/json”,
键入:“POST”,
网址:'https://lyncextws.company.com/ucwa/oauth/v1/applications',
标头:{授权:“承载”+访问令牌},
数据:{'userAgent':'InfoDisp1','endpointId':'2d9dc28d-4673-4035-825c-feb64be28e4e','culture':'en-US'}
}; 
document.getElementById('xFrame').contentWindow.postMessage(JSON.stringify(request),'https://lyncextws.company.com/ucwa/oauth/v1/applications');
}
//抓取联系人列表
函数listContacts(){
阶段=4;
var请求={
接受:“application/json”,
键入:“GET”,
网址:'https://lyncextws.company.com/ucwa/oauth/v1/applications',
标头:{授权:“承载”+访问令牌}
}; 
document.getElementById('xFrame').contentWindow.postMessage(JSON.stringify(request),'https://lyncextws.company.com/ucwa/v1/applications');
}
this.receiveMessage=函数(消息){
开关(级){
案例1:
var beforeplace=message.data.replace(“/\\\/g”,”);
var json=jQuery.parseJSON(beforeplace);
var json2=jQuery.parseJSON(json.responseText);
access_token=json2.access_token;
log(json2.access\u令牌);
控制台日志(消息);
getUserResource();
打破
案例0:
控制台日志(消息);
connectAndAuthenticate();
打破
案例2:
var beforeplace=message.data.replace(“/\\\/g”,”);
var json=jQuery.parseJSON(beforeplace);
var json2=jQuery.parseJSON(json.responseText);
log(json2._links.applications.href);
setTimeout(函数(){registerApplication()},5000);
打破
案例3:
控制台日志(消息);
打破
案例4:
打破
}
}; 
window.addEventListener('message',this.receiveMessage,false);
$(窗口)。加载(函数(){
getUserResourceAuthRequest();
//console.log(访问令牌);
});
当我运行这段代码时:最后一个ajax查询返回错误409:Conflict,它应该返回201:Created

这是我的浏览器(Google Chrome)的输出:

401:Unauthorized错误应该发生,但409冲突不应该发生。所以我的问题是: 有人能发现为什么我得到的是409错误而不是应该得到的201错误吗?

来自微软的示例代码似乎运行良好,但我不想使用它,因为我需要很长时间才能熟悉它

如果有丢失的数据,请重新输入
data: {'userAgent': 'InfoDisp1',  'endpointId' : '2d9dc28d-4673-4035-825c-feb64be28e4e', 'culture': 'en-US'} 
data: "{'userAgent': 'InfoDisp1',  'endpointId' : '2d9dc28d-4673-4035-825c-feb64be28e4e', 'culture': 'en-US'}" 
curl -v --data "{'userAgent': 'test', 'endpointId': '54321', 'culture':'en-US', 'instanceID':'testinstance'}" --header 'Content-Type: application/json' --header 'Authorization: Bearer cwt=AAEBHAEFAAAAAAA..' 'https://lyncserver.com/ucwa/oauth/v1/applications'