2014-07-03 225 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(); 
     }