dongsou4301 2012-12-17 16:30
浏览 89
已采纳

为风扇页面支出访问令牌

i searched for 2 days about my problem find a lot of solution but none worked for me. I want to make a facebook application that i will access from cronjob once for 20 minutes. This app shoult post to my page a photo with description in a album. The problem is the token access that expires ... so the code ...

//connect to api
$facebook = new Facebook(array(
          'appId'  => APP_ID,
          'secret' => APP_SECRET
        ));

//get the page token
$page_id = 222506244512259;
$page_info = $facebook->api("/$page_id?fields=access_token");

$page_info['access_token']; //so if i use this token is ok but it expires in 2 hours

//now we try to use something else to extend the time

$token_url="https://graph.facebook.com/oauth/access_token?client_id=".APP_ID."&client_secret=".APP_SECRET."&grant_type=fb_exchange_token&fb_exchange_token=".$facebook->getAccessToken();

//so if i use this formula i will receive a token that never expires, is ok but if I try to use the acces token for posting it doesn work is not valid

$response = file_get_contents($token_url);
$params = null;
parse_str($response, $params);
$page_info['access_token'] = $params['access_token'];


//and this is the rest code for posting

$image['file'] = 'images/rezultate/'.$link;
$args = array( 'access_token' => $page_info['access_token'], 'message' => ':-) <3', 'no_story' => 0);
$args['image'] = '@' . $image['file'];
$target_url = "https://graph.facebook.com/356048711158011/photos";

$ch = curl_init(); 
curl_setopt ($ch,CURLOPT_URL,$target_url); 
curl_setopt ($ch, CURLOPT_POST, 1); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER,1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $args);
curl_exec($ch); 
curl_close ($ch);

I updated the code but still not working, maybe you some something wrong...

define('TITLU', 'Postare automată'); //titlu aplicatie
define('APP_ID',123096994520827); //id aplicatie
define('APP_SECRET', '25dedb6a969e9bd934e1ea9f16944a83'); //secret aplicatie
define('TABEL', 'postareautomata'); //numar random maxim


//start facebook
$facebook = new Facebook(array(
      'appId'  => APP_ID,
      'secret' => APP_SECRET
));

//get page id and 2 hour page token
$page_id = 222506244512259;
$page_info = $facebook->api("/$page_id?fields=access_token");
//access token 2 hours
$page_info['access_token'];

//here i get my account but for nothing
$acc = $facebook->api("/100001036884257/accounts");
//echo var_export($acc, true);


//here i get the long token it returns a code value but when i used down don`t work
$longtoken = 'https://graph.facebook.com/oauth/access_token?client_id='.APP_ID.'&client_secret='.APP_SECRET.'&grant_type=fb_exchange_token&fb_exchange_token='.$facebook->getAccessToken();     
$response = file_get_contents($longtoken);
$params = null;
parse_str($response, $params);
$longtoken = $params['access_token'];

echo"Acces Token short: ".$page_info['access_token'];
echo"<br />Acces Token long: ".$longtoken;

//here i get my folder picture and pictures
$a = file_get_contents('http://www.ingersidemon.ro/proiecte/pitzi-world.ro/.facebook/postareautomata/images/rezultate/');
$dom = new DOMDocument;
$dom->loadHTML($a);
$nodes = $dom->getElementsByTagName('a');
$nrpoze = $dom->getElementsByTagName('a')->length - 1;
$picid = get_last_picture();
$link = $nodes->item($picid['id'] + 1)->getAttribute('href');
//echo "Link poza: ".$link;



if($picid['id'] + 1 <= $nrpoze) {
    $data = array(
        'link' => $link,
        'desc' => ':-) <3'
    );
    insert_picture($data);
//and here is the bog problem if i use short acces token it works for 2 hours but the long never work
    $params = array('access_token' => '$longtoken', 'message' => ':-) <3');
    $params['source'] = '@' . realpath('images/rezultate/'.$link);
    $facebook->setFileUploadSupport(true);
    $post_id = $facebook->api('/'.$page_id.'/photos','post',$params);

}

Update 3: The app is working good but only if i acces it, not from cronjob, and the acces token is for 2 months, in cronjob gives

PHP Fatal error: Uncaught OAuthException: A user access token is required to request this resource.

define('TITLU', 'Postare automată'); //titlu aplicatie
define('APP_ID',123096994520827); //id aplicatie
define('APP_SECRET', '25dedb6a969e9bd934e1ea9f16944a83'); //secret aplicatie
define('TABEL', 'postareautomata'); //numar random maxim

$facebook = new Facebook(array(
      'appId'  => APP_ID,
      'secret' => APP_SECRET
));


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


// ask for the extended token and get it from session ...
$facebook->setExtendedAccessToken();
$access_token = $_SESSION["fb_".APP_ID."_access_token"];
// now set it into the facebook object ....
$facebook->setAccessToken($access_token);
// now our fb object will use the new token as usual ...
$accessToken = $facebook->getAccessToken();
echo $access_token;

$params = array(
                'access_token' => 'AAABv9MChnvsBAALtC4XoywkLdGQMzmJHYbN8G2RjgZCGlzR6DnkB8X12FZCE6XIZB81KkYevIYzC2pu5UvVZBoOFvw8j0cgjLeHcwvcOpwZDZD',
                'message'=> "cron"
        );
    $post_id = $facebook->api('/'.$page_id.'/feed','post',$params);
  • 写回答

4条回答 默认 最新

  • drhqkz3455 2012-12-18 05:43
    关注

    The normal access token expires in 2 hours, and the extended token lasts for 2 months.

    If you want the extended token, go though this: How to extend access token validity since offline_access deprecation

    (You can use Facebook's Debug Tool to check the validity of your access token.)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 MATLAB怎么通过柱坐标变换画开口是圆形的旋转抛物面?
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥30 用arduino开发esp32控制ps2手柄一直报错
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题