通过Graph API检查用户是否喜欢页面 [英] Check if user likes page via Graph API

查看:103
本文介绍了通过Graph API检查用户是否喜欢页面的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经看到了一些类似的问题,但我认为这是新的...



我正试图在一个博客上添加一个包含Facebook的popover按钮用于Facebook页面,并且只有用户不喜欢Facebook页面才会显示。



阅读文档,这应该可以通过Graph API pages.isFan方法,但这是否需要用户授予权限?如果是这样,可能没有应用程序请求权限,但是不正常地失败?



任何帮助非常感谢。

解决方案

您可以判断用户是否喜欢来自Facebook的请求中发送的signed_request的页面。你不必查询图表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(' - ','+')替换('_','/' );
var base64JsonArray = Convert.FromBase64String(decodedJson.PadRight(decodedJson.Length +(4-decodedJson.Length%4)%4,'='));
Json = encoding.GetString(base64JsonArray);
var result = JObject.Parse(Json);
返回结果;
}

然后在页面



如果结果[page] == null ||结果[page] [喜欢] == null ||!(bool)结果[ page] [喜欢])
{%>
如果喜欢的话,
<%}%>

截至3月30日,一个更重要的事情是页面布局正在改变到时间线,你应该知道当前没有刷新页面的错误,看到这样:



有没有人知道缺乏的修复页面刷新在Facebook时间轴上的页面喜欢?



更新



签名请求是:

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

//解码数据
$ sig = base64_url_decode($ encoded_sig);
$ data = json_decode(base64_url_decode($ payload),true);

if(strtoupper($ data ['algorithm'])!=='HMAC-SHA256'){
error_log('未知算法,预期的HMAC-SHA256');
返回null;
}

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

return $ data;
}

函数base64_url_decode($ input){
返回base64_decode(strtr($ input,'-_','+ /'));
}


I have seen a few similar questions but I think this is new...

I am trying to add a popover on a blog that will contain a Facebook like button for a Facebook page and wil only show if the user does not already like the Facebook page.

Reading through the documentation this should be achievable with the Graph API pages.isFan method but does this require the user to give permissions? If so would it be possible to not have the app request permissions but rather fail gracefully?

Any help much appreciated.

解决方案

You can tell if a user likes a page from the signed_request which is sent in the request from facebook. You don't have to query the graph api.

We use c# and get it like so:

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;
    }

Then in the page

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

One more important thing as of the 30th March the page layout is changing to timeline and you should be aware of a bug currently that does not refresh the page upon liking it see this:

Does anyone know a fix for the lack of page refresh on facebook timeline pages when liking?

UPDATE

The php for decoding the signed request is:

   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, '-_', '+/'));
}

这篇关于通过Graph API检查用户是否喜欢页面的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆