我有一个Facebook页面选项卡应用程序,我正在尝试找出页面选项卡的访问者来自哪里。我已经在http://developers.facebook.com/docs/authentication/signed_request/上看到您可以在已签名的请求中从app_data获取这些内容,但每当我尝试获取已签名的请求时,app_data都不存在。
我在Facebook上的标签内使用了FB.getLoginStatus来获取签名请求,但是 当我使用http://developers.facebook.com/tools/echo调试已签名的请求时,我收到错误“Bad Signature”
您的signed_request可能未使用我们的app_id xxxxx签名以下是有效负载: { “算法”:“HMAC-SHA256”, “code”:“xxxx”, “issued_at”:xxxx, “user_id”:“xxxx2” }
我正在使用带有Javascript的C#SDK
答案 0 :(得分:1)
您可以使用本主题中的代码解码已签名的请求: 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应该很容易var lAppData = Convert.ToString(o.SelectToken("app_data")).Replace("\"", "");
要获得标签应用的app_data,您需要在获取权限时将其添加到重定向网址。您可以重定向网址,例如:
http://facebook.com/YOUR_PAGE?sk=app_YOUR_APP_ID&app_data=add,whatever,parameters,you,want,here
我只能猜测出现此错误的原因是因为您只是将已签名的请求粘贴到地址栏中而不是回显工具使用的请求中。该错误是因为您的签名请求是由您的app_id签名的,并且您正在尝试将其与包含另一个app_id的echo一起使用。但这只是猜测:)
我的主要语言是PHP,但希望我能够提供帮助:)