URL рефералов на вкладке Facebook - PullRequest
0 голосов
/ 05 марта 2012

У меня есть приложение на вкладке страницы Facebook, и я пытаюсь выяснить, откуда приходят посетители на вкладку страницы. Я прочитал http://developers.facebook.com/docs/authentication/signed_request/, что вы можете получить их из app_data в подписанном запросе, но всякий раз, когда я пытаюсь получить подписанный запрос, app_data не появляется.

Я использовал FB.getLoginStatus, чтобы получить подписанный запрос на вкладке в Facebook, но Когда я отлаживаю подписанный запрос с http://developers.facebook.com/tools/echo, я получаю ошибку «Bad Signature»

Возможно, ваш подписанный запрос не был подписан нашим app_id из xxxxx. Вот полезная нагрузка: { «алгоритм»: «HMAC-SHA256», "код": "хххх", "эмитировано_ат": хххх, "user_id": "xxxx2" }

Я использую C # SDK с Javascript

1 Ответ

1 голос
/ 05 марта 2012

Вы можете декодировать подписанный запрос с помощью кода в этом разделе: Декодировать подписанный запрос без аутентификации

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

Я могу только догадываться, что причина, по которой вы получили эту ошибку, заключается в том, что вы просто вставили подписанный запрос в адресную строку вместо того, который использовалсяс помощью инструмента эха.Ошибка в том, что ваш подписанный запрос подписан вашим app_id, и вы пытаетесь использовать его с echo, у которого есть другой app_id.Но это всего лишь предположение:)

Мой основной язык - PHP, но, надеюсь, я смог помочь:)

...