Проверьте, нравится ли пользователю страница, через Graph API

Я видел несколько похожих вопросов, но я думаю, что это новое...

Я пытаюсь добавить всплывающее окно в блог, который будет содержать кнопку Facebook «Нравится» для страницы Facebook и будет отображаться только в том случае, если пользователю еще не нравится страница Facebook.

При чтении документации это должно быть достижимо с помощью метода pages.isFan Graph API, но требует ли это от пользователя предоставления разрешений? Если да, то можно ли не иметь разрешений запроса приложения, а изящно потерпеть неудачу?

Любая помощь очень ценится.


person Dan Winer    schedule 05.03.2012    source источник


Ответы (1)


Вы можете узнать, нравится ли пользователю страница, из signed_request, который отправляется в запросе от facebook. Вам не нужно запрашивать API графика.

Мы используем c# и получаем это так:

protected void Page_Load(object sender, EventArgs e)
    {
        Result = DecodePayload(Request["signed_request"]);
    }

    public JObject DecodePayload(string payload)
    {
        var encoding = new UTF8Encoding();
        var decodedJson = payload.Split('.')[1].Replace("=", string.Empty).Replace('-', '+').Replace('_', '/');
        var base64JsonArray = Convert.FromBase64String(decodedJson.PadRight(decodedJson.Length + (4 - decodedJson.Length % 4) % 4, '='));
        Json = encoding.GetString(base64JsonArray);
        var result = JObject.Parse(Json);
        return result;
    }

Затем на странице

<% if (Result["page"] == null || Result["page"]["liked"] == null || !(bool) Result["page"]["liked"])
     {%> 
 Content if liked
<%}%>

Еще одна важная вещь с 30 марта макет страницы меняется на временную шкалу, и вы должны знать об ошибке, из-за которой в настоящее время страница не обновляется, если она нравится, см. это:

Кто-нибудь знает, как исправить отсутствие обновления страницы на страницах временной шкалы Facebook при лайке?

ОБНОВИТЬ

PHP для декодирования подписанного запроса:

   function parse_signed_request($signed_request, $secret) {
  list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

  // decode the data
  $sig = base64_url_decode($encoded_sig);
  $data = json_decode(base64_url_decode($payload), true);

  if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') {
    error_log('Unknown algorithm. Expected HMAC-SHA256');
    return null;
  }

  // check sig
  $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
  if ($sig !== $expected_sig) {
    error_log('Bad Signed JSON signature!');
    return null;
  }

  return $data;
}

function base64_url_decode($input) {
  return base64_decode(strtr($input, '-_', '+/'));
}
person Richard    schedule 05.03.2012