可以解码与本主题中的代码签名的请求:通过添加
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