Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 存储访问令牌_Php_Facebook_Facebook Authentication - Fatal编程技术网

Php 存储访问令牌

Php 存储访问令牌,php,facebook,facebook-authentication,Php,Facebook,Facebook Authentication,我已经尝试解决这个问题三天了,对于那些熟悉opengraphapi的人来说,这真的很简单。我是Facebook集成新手,但有一些PHP经验 基本上,我所要做的就是从用户那里检索以下信息并将其存储在数据库中 Facebook用户ID: 名称 性别 电子邮件 我已通过以下方式完成了用户ID、姓名和性别: $contents = file_get_contents ('https://graph.facebook.com/'.$user); $json=json_decode($contents,tr

我已经尝试解决这个问题三天了,对于那些熟悉opengraphapi的人来说,这真的很简单。我是Facebook集成新手,但有一些PHP经验

基本上,我所要做的就是从用户那里检索以下信息并将其存储在数据库中

Facebook用户ID: 名称 性别 电子邮件

我已通过以下方式完成了用户ID、姓名和性别:

$contents = file_get_contents ('https://graph.facebook.com/'.$user);
$json=json_decode($contents,true);
$userid = $json['id'];
$username = $json['name'];
$usergender = $json['gender'];
$useremail = $json['email'];
这是可行的,我知道我需要请求权限才能访问我使用以下代码所做的电子邮件:

$app_id = "211665122244023";

     $canvas_page = "http://apps.facebook.com/midcitymafia/";

     $auth_url = "https://www.facebook.com/dialog/oauth?client_id=" 
            . $app_id . "&redirect_uri=" . urlencode($canvas_page) . "&scope=email,publish_actions";

     $signed_request = $_REQUEST["signed_request"];

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

     $data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);
但如何获取访问令牌,然后使用它从graph检索电子邮件

##更新,这是我当前的代码,似乎仍然无法让它工作。。。
require 'src/facebook.php';
$app_id = "211665122244023";

     $canvas_page = "http://apps.facebook.com/midcitymafia/";

     $auth_url = "https://www.facebook.com/dialog/oauth?client_id=" 
            . $app_id . "&redirect_uri=" . urlencode($canvas_page) . "&scope=email,publish_actions";

     $signed_request = $_REQUEST["signed_request"];

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

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


     if (empty($data["user_id"])) {
            echo("<script> top.location.href='" . $auth_url . "'</script>");
     } else {
         $graph = json_decode(file_get_contents("https://graph.facebook.com/".$user_id . "/?accesstoken=" .$data['access_token']));
     }

$userid = $graph->id;
$username = $graph->name;
$usergender = $graph->gender;
$useremail = $graph->email;

?>

<br>

<?php echo 'ID: ' . $userid; ?>
<br>
<?php echo 'Name: ' . $username; ?>
<br>
<?php echo 'Gender: ' . $usergender; ?>
<br>
<?php echo 'Email: ' . $useremail; ?>
需要'src/facebook.php';
$app_id=“2116651221244023”;
$canvas_page=”http://apps.facebook.com/midcitymafia/";
$auth_url=”https://www.facebook.com/dialog/oauth?client_id=" 
. $应用程序id。“&重定向_uri=”。urlencode($canvas\u页面)。“&scope=email,publish\u actions”;
$signed_request=$_request[“signed_request”];
列表($encoded_sig,$payload)=分解('.',$signed_请求,2);
$data=json_解码(base64_解码(strtr($payload,'-'','+/')),true);
if(空($data[“user\u id”])){
echo(“top.location.href=”。$auth_url。””;
}否则{
$graph=json\u解码(文件\u获取\u内容(“https://graph.facebook.com/“$user_id.”/?accesstoken=“.data['access_token']);
}
$userid=$graph->id;
$username=$graph->name;
$usergender=$graph->gender;
$useremail=$graph->email;
?>





已签名的\u请求
本身包含用户
访问\u令牌

在您的情况下,
access\u token
位于
$data['access\u token']


存储用户
access\u令牌并不是一个好主意,因为它们只提供了很短的一段时间,之后就过期了。要获得永久
access\u token
您需要向用户请求
offline\u access
权限(我个人不建议这样做,因为您可以在不需要
offline\u access
的情况下完成大多数事情,在许多情况下,应用程序
access\u token
可能满足您的需要)。

谢谢,现在我不能把它储存在我的数据库里,对吗?我的意思是,它们过期了,对吗?我该如何更新它?我已经阅读了“撤销页面”,但并不真正理解…我现在已经看到了这段代码^^^检查主要帖子,仍然似乎不起作用。。谢谢