2014-07-03 26 views
0

我已经广泛使用Yammer API来访问当前用户的内部网络。所有的API调用都已正确工作(GET和POST),原始令牌从中提取;Yammer API - 发布到外部网络

https://www.yammer.com/oauth2/access_token.json?client_id= {应用ID} & client_secret = {应用程式密钥} &代码= {存取代码}”

以及使用该标头; “授权:承载{}令牌”和“曲奇:{从HTML请求中接收饼干}

我已经得到令牌使用所有可访问的网络; 。” https://www.yammer.com/api/v1/oauth/tokens.json

访问超出了外部网络。点头已经证明麻烦了,我把标题改为“Authorization:Bearer {NetworkToken}”,虽然我能够从外部网络获取详细信息,但是我无法发布到外部网络,我总是收到'401 Unauthorized'响应'Unauthorized '请求包括删除外部网络中的消息和喜欢的消息

是否有能够读取d ata从外部网络启用POST方法?

如果我能得到任何洞察,我会非常感激! 干杯!

回答

0

我发现不少 不一致 怪癖与Yammer的API。我现在已经在整体上想出了外部网络。以下是一些可能不明确的事情;

执行POST或DELETE请求时,请不要在url中包含network_permalink!只有在您执行GET请求时才包含network_permalink。这是我的主要问题。

需要的请求标题;

Content-Type : application/x-www-form-urlencoded 
Accept : application/json 
Cookie : _workfeed_session_id=(A code that can be extracted from the response from your first request with an auth token) 
Authorization : Bearer (Access token for whichever network you wish to access) 

哦,只是FYI,要求在'所有公司'组内的线程这是网址; https://www.yammer.com/(network_permalink)/api/v1/messages/general.json

感谢您的回答!

-1

访问外部网络时,需要将authToken设置为该外部网络的authToken。

第1步 - 获取所有身份验证令牌:

yam.platform.request({ 
     url: "oauth/tokens.json", 
     type: 'GET', 
     success: function (msg) { 
      accessTokens = msg; 
      /.... 

     }, 
     error: function (msg) { 
      console.log(msg); 
      error(msg); 
     } 

第2步:设置的authToken到正确的外部网络

var currentToken = ""; 
    $.each(accessTokens, function (i,val) { 
     if (val.network_permalink == $.cookie('networkPermalink')) { 
      currentToken = val; 
     } 
    }); 
+0

谢谢;我已经有了认证令牌。因为我没有使用SDK,所以我不能直接使用它。我应该提到我正在使用C#在我添加到Web请求的字典中构建标题。我不确定应如何在网址中插入'networkPermalink',除了文档中描述的内容; www.yammer.com/{NetworkPermalink}/{ResourcePath} 我已经尝试在标题“Authorization:{NetworkToken}”中插入单个网络令牌。 – Josh

+0

仅在URL中需要NetworkPermalink。如果您有正确的令牌给予外部网络,如Peter所述,并使用“授权:承载者{NetworkToken}”,它应该可以工作。 –

+0

好的,谢谢。所以我已经尝试过(如我的问题所述)和一些替代组合。无论我不断收到'401 Unauthorized'和响应头的响应, WWW-AUTHENTICATE:Bearer realm =“www.yammer.com” 连同一些不相关的标题。 我们可以朝着解决方案迈进吗?这显然不是应该的。也许这是一个错误? – Josh

0

虽然我是工作在上个月的一个项目,我用了以下方式发布消息。

消息必须是以UTF-8格式加密的字节。 指定内容类型为“application/x-www-form-urlencoded”。

所以,一个例子将是:

HttpWebRequest a = (HttpWebRequest)WebRequest.Create(postUrl); 
a.Headers.Add("Authorization", "Bearer" + authToken); 
a.Method = "POST"; 
byte[] message = Encoding.UTF8.GetBytes("body=" + message + "&replied_to_id=" + threadID); 
     a.ContentType = "application/x-www-form-urlencoded"; 
     a.ContentLength = message.Length; 
     using (var postStream = request.GetRequestStream()) 
     { 
      postStream.Write(message, 0, message.Length); 
     } 
     HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
     using (var postStreamForResponse = response.GetResponseStream()) 
     { 
      StreamReader postReader = new StreamReader(postStreamForResponse); 
      string results = postReader.ReadToEnd(); 
      postReader.Close(); 
     }