2012-03-05 103 views
0

我有一個Facebook的頁面標籤的應用程序,我試圖找出訪客的頁面標籤來自哪裏。我已閱讀http://developers.facebook.com/docs/authentication/signed_request/,您可以從簽名請求中的app_data獲取這些內容,但每當我嘗試獲取簽名請求時,app_data都不在那裏。推介Url的Facebook頁面標籤

我用FB.getLoginStatus在Facebook上的標籤內時,爲了獲得簽名的請求,但 當我調試簽名的請求與http://developers.facebook.com/tools/echo我得到的錯誤「壞標記」

你signed_request很可能不會簽署我們爲XXXXX這裏APP_ID是有效載荷: { 「算法」: 「HMAC-SHA256」, 「代碼」: 「XXXX」, 「issued_at」:XXXX, 「USER_ID」: 「XXXX2」 }

我使用C#SDK和Javascript

回答

1

可以解碼與本主題中的代碼簽名的請求:通過添加

var lAppData = Convert.ToString(o.SelectToken("app_data")).Replace("\"", ""); 

到有app_data文件的 Decode Signed Request Without Authentication

if (Request.Params["signed_request"] != null) 
{ 
    string payload = Request.Params["signed_request"].Split('.')[1]; 
    var encoding = new UTF8Encoding(); 
    var decodedJson = payload.Replace("=", string.Empty).Replace('-', '+').Replace('_', '/'); 
    var base64JsonArray = Convert.FromBase64String(decodedJson.PadRight(decodedJson.Length + (4 - decodedJson.Length % 4) % 4, '=')); 
    var json = encoding.GetString(base64JsonArray); 
    var o = JObject.Parse(json); 
    var lPid = Convert.ToString(o.SelectToken("page.id")).Replace("\"", ""); 
    var lLiked = Convert.ToString(o.SelectToken("page.liked")).Replace("\"", ""); 
    var lUserId= Convert.ToString(o.SelectToken("user_id")).Replace("\"", ""); 
} 

應該很容易得到app_data文件的您需要在獲取權限時將其添加到重定向網址中。您重定向URL應該是這樣的:

http://facebook.com/YOUR_PAGE?sk=app_YOUR_APP_ID&app_data=add,whatever,parameters,you,want,here

我只能猜測,你得到這個錯誤的原因是因爲你剛剛粘貼在地址欄中,而不是由回聲工具中使用的一個您的簽名的請求。這個錯誤是因爲你的簽名請求是由你的app_id簽名的,而你試圖將它與帶有另一個app_id的echo一起使用。但是,這只是一個猜測:)

我的主要語言是PHP,但希望我能幫助:)

+0

0的值是{ 「算法」:「HMAC-SHA256」, 「過期」: 1331035200, 「issued_at」:1331029487, 「的oauth_token」: 「XXXXX」, 「頁」:{ 「ID」: 「XXXXX」, 「喜歡」:假的, 「管理員」:真 }, 「用戶」:{ 「country」:「gb」, 「locale」:「en_US」, 「age」:{ 「min」:21 } }, 「user_id」:「xxxx」 } 但正如你所看到的,仍然沒有app_data – 2012-03-06 10:26:28

+0

你有沒有添加app_data到重定向url?應用程序數據的整個想法是讓它在這些重定向上。如果可能,請在您構建登錄網址的地方提供代碼。 – 2012-03-06 10:28:20

+0

據我瞭解,app_data被編碼到已簽名的請求中。使用FB.getLoginStatus檢索簽署的請求(函數(響應)){if(response.authResponse){ //已登錄且已連接的用戶,您知道的人 window.location.href =「/?signed_request =」+窗口.response.authResponse。signedRequest; }其他{// 沒有用戶會話中使用,一個你不知道 } }); 家庭控制器處理請求。 – 2012-03-06 14:45:28