可以解碼與本主題中的代碼簽名的請求:通過添加
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的值是{ 「算法」:「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
你有沒有添加app_data到重定向url?應用程序數據的整個想法是讓它在這些重定向上。如果可能,請在您構建登錄網址的地方提供代碼。 – 2012-03-06 10:28:20
據我瞭解,app_data被編碼到已簽名的請求中。使用FB.getLoginStatus檢索簽署的請求(函數(響應)){if(response.authResponse){ //已登錄且已連接的用戶,您知道的人 window.location.href =「/?signed_request =」+窗口.response.authResponse。signedRequest; }其他{// 沒有用戶會話中使用,一個你不知道 } }); 家庭控制器處理請求。 – 2012-03-06 14:45:28