【问题标题】:Referral Url's on Facebook Page tabFacebook页面选项卡上的推荐网址
【发布时间】:2012-03-05 18:34:18
【问题描述】:

我有一个 Facebook 页面标签应用程序,我正在尝试找出页面标签的访问者来自哪里。我在http://developers.facebook.com/docs/authentication/signed_request/ 上读到,您可以从签名请求中的 app_data 获取这些内容,但每当我尝试获取签名请求时,app_data 都不存在。

我在 Facebook 的选项卡内使用 FB.getLoginStatus 获取签名请求,但是 当我使用http://developers.facebook.com/tools/echo 调试签名请求时,我收到错误“错误签名”

您的 signed_request 可能未使用我们的 app_id 为 xxxxx 签名以下是有效负载: { “算法”:“HMAC-SHA256”, “代码”:“xxxx”, "issued_at": xxxx, “user_id”:“xxxx2” }

我正在使用带有 Javascript 的 C# SDK

【问题讨论】:

    标签: c# facebook signed


    【解决方案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,您需要在获取权限时将其添加到重定向 url。你重定向 url 应该是这样的:

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

    我只能猜测您收到此错误的原因是因为您只是将已签名的请求粘贴到了地址栏中,而不是 echo 工具使用的那个。该错误是因为您的签名请求由您的 app_id 签名,并且您尝试将它与具有另一个 app_id 的 echo 一起使用。但这只是猜测:)

    我的主要语言是 PHP,但希望我能提供帮助 :)

    【讨论】:

    • O 的值为 { "algorithm": "HMAC-SHA256", "expires": 1331035200, "issued_at": 1331029487, "oauth_token": "xxxxx", "page": { " id": "xxxxx", "liked": false, "admin": true }, "user": { "country": "gb", "locale": "en_US", "age": { "min": 21 } }, "user_id": "xxxx" } 但你可以看到仍然没有 app_data
    • 您是否已将 app_data 添加到重定向网址?应用程序数据的整个想法是将其放在这些重定向上。如果可能,请提供您构建登录网址的代码。
    • 据我了解,app_data 被编码到签名请求中。使用 FB.getLoginStatus(function (response) { if (response.authResponse) { // 登录并连接的用户,您认识的人 window.location.href = "/?signed_request=" + window.response. authResponse.signedRequest; } else { // 没有可用的用户会话,你不认识的人 } });家庭控制器处理请求。
    • 是的,它是在signed_request 中编码的。但是签名的请求是由 facebook 在登录页面上编码的。如果您希望它在 app_data 中包含任何数据,您需要将该数据发送到 facebook 登录屏幕。作为参考,我给你我的一个应用程序的身份验证链接。 facebook.com/dialog/… 看看 app_data 是如何添加的。
    • 我不确定我是否理解。我无法从 Facebook 访问推荐 URL,我的理解是 app_data 是 Facebook 发送的东西,很像页面和用户数据,而不是我可以附加的东西。您是否有任何我可以尝试的教程或链接?
    猜你喜欢
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多