0

我真的需要一些帮助。

我在这里尝试Facebook PHP SDK $facebook->getSignedRequest() 获取用户 ID 和名称。(页面选项卡)创建一个与 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 ..

我尝试了保罗建议的链接

使用以下代码

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>");}

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

4

2 回答 2

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

  };
于 2013-05-02T11:38:13.493 回答
0

首先,signed_request不会给出user_idandoauth_token除非用户已经登录到你的应用程序。它只会在userkey 中给出用户的基本信息,key 是一个包含语言环境字符串、国家字符串和年龄对象的 JSON 对象.
因此,如果您想在此处获取user_id实施登录或测试用例,您可以执行以下操作

<?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 ?>
于 2013-05-01T07:43:06.913 回答