无法从Facebook获取access_token。它返回代码参数

时间:2011-09-09 13:28:45

标签: facebook video upload facebook-php-sdk

我正在使用php sdk。这是我的PHP代码

require 'src/facebook.php';

$facebook = new Facebook(array(
  'appId'  => '123456',
  'secret' => '123456abcdef',
));

// Get User ID
$user = $facebook->getUser();

//echo "-----".$user;

if ($user) {
  try {
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    $user = null;
  }  

    //print_r($user_profile);
    $token = $facebook->getAccessToken();
    //echo $token;
    // store token

    if ($user_profile['id'] && $token) {
    $useradd = mysql_query("insert into fbdata (id,name,token) values ('".$user_profile['id']."','".$user_profile['name']."','".$token."')");
    if ($uyeekle)
    echo "Data added";
    }
}


if (!$user) {
    $args['scope'] = 'offline_access,read_stream,publish_stream';
    $loginUrl = $facebook->getLoginUrl($args); ?>
<a href="<?php echo $loginUrl ?>">Facebook Login</a>
<?php } ?>

facebook使用代码参数重定向到我的网站,而不是访问令牌。它看起来不像访问令牌格式。没有|焦炭。但我会尝试使用此代码上传视频。

require 'src/facebook.php';


$facebook = new Facebook(array(
  'appId'  => '123456',
  'secret' => '123456abcdef',
));
$facebook->setFileUploadSupport(true);

$url = "https://graph-video.facebook.com/me/videos?title=abc&description=desc&access_token=ABAD........AZDZD";


$attachment = array(
'description' => 'desc',
'title' => 'abc'
);


$attachment["file"] = '@' . realpath("123.mp4");

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $attachment);

$data = curl_exec($ch);
echo $data;

此代码返回视频ID。然后我想从该地址获取视频信息 https://graph.facebook.com/123456?access_token=ABAD........AZDZD

但它总是说错。我的错在哪里?

1 个答案:

答案 0 :(得分:1)

使用代码而不是访问令牌重定向是预期的行为,由Facebook Authentication docs确认。使用服务器端身份验证(PHP SDK)时,Facebook将重定向到http://YOUR_URL?code=A_CODE_GENERATED_BY_SERVER。然后,您必须自己将此代码解析为访问令牌(您只需调用$facebook->getAccessToken()即可)。正如您所说,您可以使用此访问令牌(重定向中的代码)进行API调用。

如果您使用的是Facebook PHP SDK,则应该使用它来进行这些API调用。我不确定上传视频的具体细节,但看起来应该是这样的:

$facebook = new Facebook(array(
    'appId'  => '123456',
    'secret' => '123456abcdef',
    'fileUpload' => true,
));

$attachment = array(
    'description' => 'desc',
    'title'       => 'abc',
    'file'        => '@' . realpath("123.mp4");
);

$result = $facebook->api('/me/videos', 'POST', $attachment);
var_dump($result);