【问题标题】:Determine if a user has liked my page using Facebook PHP SDK?使用 Facebook PHP SDK 确定用户是否喜欢我的页面?
【发布时间】:2012-02-28 03:41:21
【问题描述】:

我的搜索结果为空,因为当您搜索“Facebook”和“喜欢”时,我会得到各种其他结果。

我有一个只在我公司的 Facebook 页面上的应用程序。在那个应用程序中,我需要确定用户是否喜欢公司的页面。如果不是,我会展示一件事,如果是,我会展示另一件事。如何使用 Facebook PHP SDK v.3.1.1 做到这一点?

【问题讨论】:

标签: php facebook facebook-graph-api facebook-like


【解决方案1】:

您可以使用FQL 执行此操作。您还需要确保您拥有 user_likes 权限集。

我从一个现在离线的旧应用中提取了这个示例,它可能需要根据 Facebook 在上一轮更新中所做的更改进行更改。最近我一直在使用 javascript 并订阅了 edge.create 事件....只需将 page_id 替换为您的页面 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;

【讨论】:

  • 这似乎不再适用于最新的 API,无论如何谢谢。
【解决方案2】:

这应该适合你!我必须做很多这些类型的页面,所以我创建了一种非常简单的方法来创建门控页面。 https://github.com/DrewDahlman/FBVersion

享受吧!

【讨论】:

  • 谢谢,但这也不起作用。签名的请求不包含任何有关喜欢页面的数据。
  • 它为你做所有事情,只要有一个喜欢和不喜欢的 php 页面,它会做剩下的事情。该脚本将确定用户是否喜欢他们所在的当前选项卡。
  • 对不起,我帮不上忙,也许你没有正确解释你的问题......这里的例子facebook.com/apps/… 显示了一个不喜欢的页面,喜欢它就会显示一个喜欢的页面......
  • 实际上这个链接给了我一个警告,说你的应用不支持安全浏览,我根本无法使用它,不管它是否喜欢。
  • 哦,你只需要一个 https 版本,我的应用程序没有。一些用户的隐私设置不允许他们查看不安全的应用程序,例如示例,但示例完全符合您的要求。您只需在 FB 应用设置中启用 HTTPS 版本即可。
【解决方案3】:
$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();
            }
    } 

希望对你有帮助:)

【讨论】:

    【解决方案4】:

    老话题,但想参与进来,因为我最近学到了很多关于如何做到这一点的知识,并且不得不将其付诸实践。

    查看此链接:http://nickring.com/blog/2012/11/facebook-fan-gate-using-php/。它使用 signed_request 变量,正如其他一些响应所示,但它显示了它如何不需要通过 $_REQUEST 请求 signed_request 变量。

    要记住的一件主要事情是,signed_request 仅在访问 signed_request 的 PHP 脚本在 Facebook 中运行时可用。 如果您在 Facebook 之外的脚本中运行此脚本,试图使用 Facebook API,它将返回一个空数组。

    这是一个示例 - 当您转到此地址时,将运行以下脚本:https://www.facebook.com/yourFacebookPage/app_xxxxxxxxxxxxxxx,其中 'xxxxxxxxxxxxxxx' 是应用 ID。

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

    上述脚本是从应用设置的“Facebook 上的应用”部分的画布 URL 中设置的 URL 调用的脚本。 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 脚本编写一些 cookie 并将它们附加到 URL,以便接收脚本必须比较 cookie 和 URL 参数,然后删除 cookie读完之后。

    希望这会有所帮助,因为我个人还没有找到关于这个主题的任何一致信息。

    【讨论】:

      【解决方案5】:

      可以这样做:

      <?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 应用程序权限页面的文本,一旦用户允许对您的应用程序的权限,代码将获取用户的数据,并在用户不喜欢您的粉丝页面时显示您想要的任何内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-31
        相关资源
        最近更新 更多