我真的需要一些帮助...
我想在这里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对话框,但在重定向中,我得到一个错误配置应用程序的消息..如果我重新进入应用程序,然后我访问所有必要的信息......等等。 所以,如果我找到解决方案,为什么在重定向我得到错误配置的应用程序,我想我有点解决了我的问题?
答案 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_id
和oauth_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 ?>