粉丝页面上的Facebook应用程序选项卡

问题描述:

我想在粉丝页面上创建一个选项卡应用程序。一年前,使用facebook.php v.2.0,我能够创建和管理一个应用程序,但现在情况发生了变化,我无法弄清楚如何连接到API来验证粉丝页面是否被喜欢。我用facebook.php v 3.1.1,所以一年前,我会用:粉丝页面上的Facebook应用程序选项卡

<?php 
    require 'facebook.php'; 
    $app_id = "YOUR APP ID HERE"; 
    $app_secret = "YOUR SECRET KEY HERE"; 

    $facebook = new Facebook(array(
     'appId' => $app_id, 
     'secret' => $app_secret, 
     'cookie' => true 
    )); 

    $signed_request = $facebook->getSignedRequest(); 
    $like_status = $signed_request["page"]["liked"]; 
?> 

我应该怎么办呢?

+1

其实,你可以使用'$ _ POST [ 'signed_request'] ' - 阅读此http://developers.facebook.com/docs/authentication/signed_request/ – scibuff 2012-02-25 23:59:42

+0

不工作..我想我想念的东西..因为和$用户= $ facebook-> getUser();是0(零)和echo var_export($ _ POST ['signed_request'],true);是NULL ... – Sebastian 2012-02-26 00:06:34

+0

只有当用户已经给予应用程序(至少基本)权限时,应用程序才有权访问用户标识和用户详细信息,只需执行'print_r(parse_signed_request($ _REQEST ​​['signed_request'],$ secret)) ;'看看你得到的是什么数据。页面 - >喜欢是肯定存在,即使用户没有给予应用权限 – scibuff 2012-02-26 00:10:42

你并不需要使用getSignedRequest,这样的事情应该工作:

$signed_request = $_REQUEST["signed_request"]; 
list($encoded_sig, $payload) = explode('.', $signed_request, 2); 
$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true); 

if (empty($data["page"]["liked"])) { 
    //User is not a fan 
} else { 
    //User is a fan 
} 
+0

它每次都不粉丝..我想当我创建该应用程序有什么错误..看:http://www.facebook.com/PentruRomani?sk=app_215673801864574当你访问它时,不需要权限 – Sebastian 2012-02-26 00:16:45

+0

'print_r($ signed_request)'显示什么? – 2012-02-26 02:16:02

+1

另外,请确保你的应用程序配置中你的标签网址的末尾有一个'/',它似乎有问题有时 – 2012-02-26 02:18:21

只是这样做:

<?php 
    $secret = ''; // Input the application secret 

    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') { 
      echo 'Unknown algorithm. Expected HMAC-SHA256'; 
      return null; 
     } 

     // Check signature 
     $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true); 
     if ($sig !== $expected_sig) { 
      echo 'Bad Signed JSON signature!'; 
      return null; 
     } 
     return $data; 
    } 

    function base64_url_decode($input) { 
     return base64_decode(strtr($input, '-_', '+/')); 
    } 

    $data = parse_signed_request($_REQUEST['signed_request'], $secret); 
    print_r($data); 
    exit(); 
?> 
+0

未知算法。预计HMAC-SHA256 ... – Sebastian 2012-02-26 00:45:05

+0

最有可能您的$秘密不正确 – scibuff 2012-02-26 00:48:35

+0

我认为我没有正确创建应用程序.. – Sebastian 2012-02-26 00:49:00