2012-03-05 5 views
1

グラフAPIを介したページは好きな私は、これは新しいものであると思えば...チェック、ユーザーは、私はいくつかの同様の質問を見てきました

私はボタンのようにFacebookを利用して含まれていますブログにポップオーバーを追加しようとしていますFacebookページとwilは、ユーザーが既にFacebookページを気に入らない場合にのみ表示されます。

これはGraph API pages.isFanメソッドで実現可能であるはずですが、これにはユーザーがアクセス許可を与える必要がありますか?もしそうなら、アプリのリクエストのアクセス権を持っていなくても、うまく失敗する可能性はありますか?

ご迷惑をおかけして申し訳ございません。

答えて

2

facebookからのリクエストで送信されたsigned_requestのページが好きかどうかを知ることができます。グラフAPIを照会する必要はありません。

我々は、C#を使用し、そのようにそれを得る:ページレイアウトがタイムラインに変更された3月30日のように、ページで次に

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

もう一つ重要なことと好きなときにページを更新していないバグを認識している必要があります。

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

UPDATE

署名されたリクエストを復号するための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, '-_', '+/')); 
} 
関連する問題