Определить, понравился ли пользователь моей странице с помощью Facebook PHP SDK? - PullRequest
3 голосов
/ 06 февраля 2012

Мой поиск оказался пустым, потому что при поиске "Facebook" и "лайк" я получаю все другие результаты.

У меня есть приложение, которое есть только на странице моей компании в Facebook. В этом приложении мне нужно выяснить, понравилась ли пользователю страница компании. Я покажу одну вещь, если нет, и другую вещь, если так. Как я могу сделать это, используя Facebook PHP SDK v.3.1.1?

Ответы [ 5 ]

4 голосов
/ 24 марта 2014

Это можно сделать так:

<?php
    require('facebook.php');
    $config = array(
         'appId' => 'your facebook app id',
         'secret' => 'your facebook app secret code',

        'allowSignedRequest' => false
    );
    $facebook = new Facebook($config);
    $user_id = $facebook->getUser();
    if (isset($user_id)) {
        try {           
            $likes = $facebook->api('/me/likes/your_facebook_page_id_here', 'GET');             

            if (!empty($likes['data'])) // if user has liked the page then $likes['data'] wont be empty otherwise it will be empty
            {
                echo 'Thank you for liking our fan page!';                   

            }             
            else {                                       
                 //show something else                   
            }
        } catch (FacebookApiException $e) {
            $login_url = $facebook->getLoginUrl();
            echo '<a href="' . $login_url . '">Please click here to login into your Facebook account.</a>';
            error_log($e->getType());
            error_log($e->getMessage());
        }
    } else {
        $login_url = $facebook->getLoginUrl();
        echo '<a href="' . $login_url . '">Please lick here to login into your Facebook account</a>';
    }
    ?>

Пользователь нажимает кнопку «Пожалуйста, нажмите здесь, чтобы войти в свою учетную запись Facebook». текст, который перенаправит его на страницу разрешений приложения Facebook, как только пользователь разрешит разрешение вашему приложению, код извлечет данные пользователя и отобразит все, что вы захотите, если пользователю не понравилась ваша фан-страница.

3 голосов
/ 06 февраля 2012

Вы можете сделать это, используя FQL .Вам также необходимо убедиться, что у вас установлено разрешение user_likes.

Я извлек этот пример из более старого приложения, которое сейчас недоступно, возможно, его придется изменить в зависимости от того, что изменилось в Facebook в последнем раунде обновлений.В последнее время я использую javascript и подписываюсь на событие edge.create .... просто замените page_id на идентификатор вашей страницы и попробуйте

$checkIfUserLikePage =  $facebook->api(array(
    "method"    => "fql.query",
    "query"     => "select uid from page_fan where uid=me() and page_id=1234567"
));
$checkIfUserLikePage = sizeof($checkIfUserLikePage) == 1 ? true : false;
2 голосов
/ 06 февраля 2012

Это должно работать для вас!Мне пришлось сделать много таких страниц, поэтому я создал действительно простой способ создания похожих страниц.https://github.com/DrewDahlman/FBVersion

Наслаждайтесь!

1 голос
/ 13 апреля 2013
$signed_request = $_REQUEST['signed_request'];

    function parsePageSignedRequest() {
            if (isset($_REQUEST['signed_request'])) {
                    $encoded_sig = null;
                    $payload = null;
                    list($encoded_sig, $payload) = explode('.', $_REQUEST['signed_request'], 2);
                    $sig = base64_decode(strtr($encoded_sig, '-_', '+/'));
                    $data = json_decode(base64_decode(strtr($payload, '-_', '+/'), true));
                    return $data;
                }
            return false;
            }
        if($signed_request = parsePageSignedRequest()) {
            if($signed_request->page->liked) {

            $this->assign('verify', $signed_request->page->liked);
            } 
            else {
                echo "Please click on the Like button to view our Coupons!";
                jexit();
            }
    } 

Надеюсь, это поможет вам:)

0 голосов
/ 13 февраля 2014

Старая тема, но хотел взвесить, так как недавно я многое узнал о том, как это сделать, и мне пришлось применять это на практике.

Посмотрите на эту ссылку: http://nickring.com/blog/2012/11/facebook-fan-gate-using-php/. Она использует переменную signed_request, как показывают некоторые другие ответы, но показывает, что она не требует запроса переменной signed_request через $_REQUEST.

Единственное, что нужно помнить, это то, что signed_request доступен только тогда, когда PHP-скрипт, обращающийся к signed_request, запускается в Facebook. Если вы запускаете этот скрипт вне Facebook в скрипте, пытающемся использовать API Facebook, он вернет пустой массив.

Вот пример - следующий скрипт будет запускаться при переходе по этому адресу: https://www.facebook.com/yourFacebookPage/app_xxxxxxxxxxxxxxx с 'xxxxxxxxxxxxxxx' в качестве идентификатора приложения.

// Check if the user has liked us on Facebook, require the Facebook SDK
require_once('linked/facebook/facebook.php');

// Setup the Config
$config = array(
    'appId' => 'xxxxxxxxxxxxxxxxx',
    'secret' => 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy',
    'cookie' => true
);

// Create a Facebook SDK instance
$facebook = new Facebook($config);

// Get the signed_request variable that we so desparately need
$signed_request = $facebook->getSignedRequest();
$like_status = $signed_request["page"]["liked"];

// Make sure that it worked
if (!empty($signed_request))
{
    // Get the signed_request information
    if ($like_status == 1)
    {
        // Wo0t! Show the FB fan only page stuff here

    }
    else
    {
        // Show the 'Please like us page'
        $page = file_get_contents('pages/facebookLikeUs.html');

        // Finish the page
        echo $page;
        exit();

    } // End if ($like_status == 1) ELSE Clause and IF

} // End if (!empty($signed_request)) IF Clause
else
{
    // Damn, it didn't work. Show an error
}

Вышеуказанный скрипт - это скрипт, который вызывается из URL-адреса, заданного в URL-адресе Canvas в разделе «Приложение на Facebook» в настройках приложения. Страница facebookLikeUs.html - это просто страница, предлагающая нажать «Мне нравится», чтобы продолжить. Если я нахожусь в ситуации, когда я хочу, чтобы они были перенаправлены обратно на веб-сайт, который требует Facebook, как будто я просто заменяю раздел // Wo0t! чем-то вроде этого:

    // Wo0t! They're all set, establish some cookies, get a cookie, and redirect back to the PHD program site
    setcookie('fbls', $signed_request['page']['id'] . '-' . $signed_request['user_id'], time() + 300);
    $redirectURL = "http://www.myurl.com/theScriptIWantToReceiveTheUserFromFB.php";

    // Since Facebook really wants to keep us in the page, we need to create a page that will automatically break out of FB
    $page = file_get_contents('pages/facebookRedirectBack.html');

    // Replace some stuff
    $page = str_replace('$redirectURL', $redirectURL, $page);

    // Output the page
    echo $page;
    exit();

Страница facebookRedirectBack.html выглядит так:

<!DOCTYPE html>
<html>
<body>
<script type="text/javascript">
window.top.location.href = '$redirectURL';
</script>
</body>
</html>

Если вы хотите иметь немного больше безопасности, вы можете сделать так, чтобы PHP-скрипт перенаправления записывал некоторые куки-файлы и прикреплял их к URL-адресу, чтобы получающий скрипт сравнивал куки-файлы и параметры URL-адреса, а затем удалял куки-файлы. после того, как они были прочитаны.

Надеюсь, это поможет, так как лично я не нашел последовательной информации по этому вопросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...