Yammer API - 发布到外部网络

时间:2014-07-03 03:16:31

标签: rest cookies oauth yammer

我广泛使用Yammer API来访问当前用户的内部网络。所有API调用都已正常工作(GET和POST),原始令牌是从;

中提取的

https://www.yammer.com/oauth2/access_token.json?client_id= {App ID}& client_secret = {App Secret}& code = {Access Code}”

并使用标题; “授权:持票人{令牌}”和“Cookie:{从HTML请求收到的Cookie}}。

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

超出这一点访问外部网络已证明很麻烦。我将标题更改为“授权:承载{NetworkToken}”。虽然我能够从外部网络获取详细信息,但我无法POST到外部网络。我总是收到'401 Unauthorized'回复。 “未授权”请求包括删除外部网络中的消息和喜欢消息。

在能够从外部网络读取数据和启用POST方法之间还有另一步吗?

如果我能对此有所了解,我将非常感激! 干杯!

3 个答案:

答案 0 :(得分:0)

访问外部网络时,您需要将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;
        }
    });

答案 1 :(得分: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();
        }

答案 2 :(得分:0)

我用Yammer API发现了很多不一致怪癖。我现在已经找到了外部网络。以下是一些可能不太清楚的事情;

在执行POST或DELETE请求时,请不要在网址中包含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)

哦,只是仅供参考,要求'All Company'组中的线程,这是网址; https://www.yammer.com/(network_permalink)/api/v1/messages/general.json

感谢您的回答!