2013-11-17 2 views
0

Мне нужно создать интеграцию с моим сайтом и FB, и я довольно смущен документацией FB (это длинный поток слов, а не дружественный к моей точке) и токен авторизации.Создайте приложение FB, чтобы проверить «Мне нравится» на странице fb

Мое «приложение» должно быть только проверьте, понравилась ли пользовательская страница fb и на ее основе некоторое содержимое на моем сайте.

Я запутался о следующем пункте:

  • Что это лучший способ сделать это (PHP SDK или JS SDK)?
  • Какие приложения я должен создать (сайт с Facebook Вход?, Page Tab?)
  • возможно выполнить задачу без авторизации маркера или попросить пользователя авторизовать приложение?

То, что я сделал до сих пор:

Я использую 2 подхода:

  1. Graph API (не уверен, что о правильном названии)
    • работает, но просят разрешение пользователя для моего приложения
  2. PHP SDK
    • не работает: Я думаю, что это требует журнал в
    • Я предпочел бы использовать этот метод, поскольку он является более чистым (без редиректа)

1. Graph API

<?php 
$app_id = 'xxxxxxxxxxxxx'; 
$app_secret = 'xxxxxxxxxxxxxxxxxx'; 
$my_url = 'http://www.xxxxxxxxxxxxx.net/testfb.php'; 

$code = $_REQUEST["code"]; 

// auth user 
if (empty($code)) { 
    $dialog_url = 'https://www.facebook.com/dialog/oauth?client_id=' 
     . $app_id . '&redirect_uri=' . urlencode($my_url); 
    echo("<script>top.location.href='" . $dialog_url . "'</script>"); 
} 

// get user access_token 
$token_url = 'https://graph.facebook.com/oauth/access_token?client_id=' 
    . $app_id . '&redirect_uri=' . urlencode($my_url) 
    . '&client_secret=' . $app_secret 
    . '&code=' . $code; 

// response is of the format "access_token=AAAC..." 
$access_token = substr(file_get_contents($token_url), 13); 

$fql_query_url = 'https://graph.facebook.com/' 
    . 'fql?q=SELECT+uid+FROM+page_fan+WHERE+page_id=351144741645225+AND+uid=me()' 
    . '&access_token=' . $access_token; 

$fql_query_obj = json_decode(file_get_contents($fql_query_url), true); 

$data = array(); 
echo 'User Liked ?'; 

// display results of fql query 
if (isset($fql_query_obj['data'])) { 
    $data = $fql_query_obj['data']; 
} 
if (isset($data[0])) { 
    echo 'YES'; 
} else { 
    echo 'NO'; 
} 

2. PHP SDK

<?php 

require './lib/facebook.php'; 

$facebook = new Facebook(array(
    'appId' => 'xxxxxxxxxxxxxxxxxx', 
    'secret' => 'xxxxxxxxxxxxxxxx', 
    'cookie' => 'true' 
)); 
//$access_token = $facebook->getAccessToken(); 
//$signed_request = $facebook->getSignedRequest(); 
// Get User ID 
$user = $facebook->getUser(); 
var_dump($user); 
//if ($user) { 
    try { 
     // Proceed knowing you have a logged in user who's authenticated. 
     $user_profile = $facebook->api('/me'); 

     $isFan = $facebook->api(array(
      "method" => "fql.query", 
      "query" => "SELECT uid FROM page_fan WHERE page_id = 'yyyyyyyyyy' AND uid = me()" 
     )); 
     var_dump($isFan); 

    } catch (FacebookApiException $e) { 
     error_log($e); 
     $user = null; 
    } 
//} else { 
// echo 'no logged in'; 
//} 

ответ

0

Я сделал это недавно. Идея следующая:

  1. Когда пользователь загружает ваше приложение, это происходит через запрос POST. В это время Facebook публикует поле под названием «signed_request».

  2. Вы должны декодировать его и там вы можете получить page.liked объект - который говорит вам, если пользователь понравился страницу или нет (спасибо Facebook signed request get UID PHP):

$ signed_request = $ _REQUEST [ "signed_request"];

list ($ encoded_sig, $ payload) = explode ('.', $ signed_request, 2);

$ data = json_decode (base64_decode (strtr ($ полезная нагрузка, '-_', '+ /')), true);

echo $ data ["page.liked"];

, что похоже на это - не нужно в facebook SDK или любом сложном коде.

Смежные вопросы