2012-03-05 104 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