Facebook php-sdk无论如何都无法获得用户ID(我得到0)

时间:2013-05-01 06:57:30

标签: php facebook facebook-php-sdk userid

我真的需要一些帮助...

我想在这里Facebook PHP SDK $facebook->getSignedRequest() Get User ID and Name. (Page Tab)尝试创建一个与facebook页面链接的应用程序..这么好...... 问题是我无法检索用户ID,无论如何,使用php-sdk ..

我也尝试过这个修复,https://www.webniraj.com/2012/12/19/facebook-php-sdk-fixing-getuser-on-php-5-4-x/但它没有任何区别

require 'php-sdk/facebook.php';
// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
  'appId' => 'myappid',
  'secret' => 'mysecretid',
));

$theRequest = $facebook->getSignedRequest();
$user = $facebook->getUser();
var_dump($user);

无论我尝试过什么,我都无法检索用户ID ..

我尝试了Paul建议的链接

使用以下代码

if ($_REQUEST) {
  $signed_request = $_REQUEST['signed_request'];
} else {
  echo '$_REQUEST is empty';
}

function parse_signed_request($signed_request) {
  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);

  return $data;
}

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

$data = parse_signed_request($signed_request);
var_dump($data);

我得到一个“NULL”作为回复..:S

第二次编辑..我得到了这段代码

$ information = parse_signed_request($ signed_request,$ secret); $组oauth_token = $信息[ “组oauth_token”];

的var_dump($信息); 的var_dump($组oauth_token);

 $app_id = "myappid";
 $canvas_page = "https://apps.facebook.com/app_namespace";
 $auth_url = "http://www.facebook.com/dialog/oauth?client_id=" 
        . $app_id . "&redirect_uri=" . urlencode($canvas_page) . "&scope=read_stream, friends_likes";

 $signed_request = $_REQUEST["signed_request"];

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

 $data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);

 if (empty($oauth_token)) {echo("<script> top.location.href='" . $auth_url .    "'</script>");}

通过这种方式,我设法获得auth对话框,但在重定向中,我得到一个错误配置应用程序的消息..如果我重新进入应用程序,然后我访问所有必要的信息......等等。 所以,如果我找到解决方案,为什么在重定向我得到错误配置的应用程序,我想我有点解决了我的问题?

2 个答案:

答案 0 :(得分:1)

我不知道谁可能会发现这个或没有用。 我认为,如果facebook建议每个sdk更适用的离散实例,这将是个好主意。 在页面选项卡上与facebook app集成的php sdk花了相当多的时间,所以,facebook上的应用程序是不可能的,我最终认为javascritp sdk会更好地服务于我的目的,因为, a)它不会重定向用户,从我的页面进行身份验证 b)它不要求应用程序作为Facebook应用程序存在,(在我的情况下,我希望显示为页面选项卡) c)它对所有内容进行叠加,提出auth对话框,然后返回我的页面,提供所有有用的信息..

从多个fb源复制代码,这对我有用

    FB.getLoginStatus(function(response) {
  if (response.status === 'connected') {
    // the user is logged in and has authenticated your
    // app, and response.authResponse supplies
    // the user's ID, a valid access token, a signed
    // request, and the time the access token 
    // and signed request each expire
    uid = response.authResponse.userID;
    //alert(uid);
    var accessToken = response.authResponse.accessToken;
  } else if (response.status === 'not_authorized') {
    // the user is logged in to Facebook, 
    // but has not authenticated your app
             FB.login(function(response) {
                if (response.authResponse) {
                uid = response.authResponse.userID;
                console.log('Welcome!  Fetching your information.... ');
                FB.api('/me', function(response) {
                    });
            } else {
            }
            });
        } else {
    // the user isn't logged in to Facebook.
        }
 });

 // Additional initialization code such as adding Event Listeners goes here

  };

答案 1 :(得分:0)

首先,signed_request除非用户已登录您的应用,否则不会提供user_idoauth_token。它只会提供有关用户的基本信息。 user键,它是一个包含区域设置字符串,国家/地区字符串和年龄对象的JSON对象 因此,如果您想获得user_id工具Login或测试用例,可以执行以下操作

<?php
$params = array(
  'redirect_uri' => 'http://yourdomain.com/post_login_page'
);

$loginUrl = $facebook->getLoginUrl($params);
if(!$facebook->getUser()):
?>
<script>window.location.href = "<?php $loginUrl; ?>"</script>
<?php endif ?>