【问题标题】:Facebook php-sdk not able to get user id (i get 0) no matter whatFacebook php-sdk 无论如何都无法获取用户 ID(我得到 0)
【发布时间】:2013-05-01 06:57:29
【问题描述】:

我真的需要一些帮助来解决这个问题..

我想在这里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=$information["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>");}

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

【问题讨论】:

  • 用户是否授权您的应用程序?
  • 我目前正在自己​​使用它,作为开发人员,所以我想我默认是授权的?
  • 我不知道你是否读过这篇文章:developers.facebook.com/docs/howtos/login/signed-request 但是对于一个页面应用程序,你必须:在你的页面上注册应用程序,只在加载时尝试解码签名请求页面(基本上,只需单击页面上的图标即可访问您的页面应用程序)
  • 我实际上并没有读过这个,但我仍然得到一个空值......我将在我的第一篇文章中提供代码编辑......
  • @nikolas 默认没有授权

标签: php facebook facebook-php-sdk userid


【解决方案1】:

我不知道谁会觉得这个有用。。 我认为这将是一个好主意,如果 facebook,建议每个 sdk 更适用的离散实例.. 在页面选项卡上与 facebook 应用程序集成的 php sdk 上花费了几个小时之后,因此,facebook 上的应用程序是毫无疑问的,我最终认为 javascritp sdk 会更好地服务于我的目的,因为, a)它不会重定向用户,从我的页面进行身份验证 b)它也不需要应用程序作为 facebook 应用程序存在,(在我的情况下,我想显示为页面选项卡) c) 它对所有内容进行了一种叠加,提出了身份验证对话框,然后返回到我的页面,提供所有有用的信息..

从几个对我有用的 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

  };

【讨论】:

    【解决方案2】:

    首先,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 ?>
    

    【讨论】:

    • 我使用 $params = array( 'scope' => 'read_stream, friends_likes', );而且我没有任何身份验证...我无法理解发生了什么.. $loginUrl = $facebook->getLoginUrl($params); var_dump($loginUrl);
    • @nikolas 您需要重定向到登录 URL 以进行身份​​验证
    • 我设法获得签名请求,但登录没有成功..和用户ID..:S
    • $theRequest 得到了什么?
    • 我得到了这样的......developers.facebook.com/docs/howtos/login/login-for-canvas缺少很多参数..我试图得到那个脚本我终于得到了身份验证对话框,然后返回我得到错误配置的应用程序!!! :S php-sdk 应该解决问题吗? :(
    猜你喜欢
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多