Php 扩展风扇页面的访问令牌
我花了两天时间研究我的问题,找到了很多解决方案,但没有一个对我有效。 我想制作一个facebook应用程序,我将从cronjob访问该应用程序一次,持续20分钟。 此应用程序应该在我的页面上发布相册中包含描述的照片。问题是令牌访问已过期。。。所以代码Php 扩展风扇页面的访问令牌,php,facebook,facebook-graph-api,Php,Facebook,Facebook Graph Api,我花了两天时间研究我的问题,找到了很多解决方案,但没有一个对我有效。 我想制作一个facebook应用程序,我将从cronjob访问该应用程序一次,持续20分钟。 此应用程序应该在我的页面上发布相册中包含描述的照片。问题是令牌访问已过期。。。所以代码 //connect to api $facebook = new Facebook(array( 'appId' => APP_ID, 'secret' => APP_SECRET
//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);
使用在。中找到的页面令牌的有效期仅与用于获取它们的用户访问令牌的有效期相同。你不可能有一个无限持久的代币。您需要能够定期更新令牌,并处理意外过期的令牌。中有更多信息。正常访问令牌将在2小时后过期,扩展令牌将持续2个月 如果需要扩展令牌,请执行以下操作:
(您可以使用来检查访问令牌的有效性。)查看我对类似问题的回答 从开发者页面: 通过使用长寿命用户访问令牌,查询[用户] ID]/accounts端点现在将提供页面访问令牌而不提供 用户管理的页面过期
不起作用,唯一有效的访问令牌是$page_info['access_token']。。还有什么?是的,我知道,有一些代币在2个月后到期。。。2个月可以,但不是2小时增益,即使是长寿命令牌也可以在用户令牌到期时随时到期。这意味着它可能会在被收购几秒钟后过期。谢谢,所以我使用了这里的所有代码:where to me$access_token=$facebook->getAccessToken();我收到:当前代币:aaabv9mchnvsbactlyqclnwxnrq5qwlwqpkzaqpdzbfnlnfyywbozadzcn3yl91zznzauwwhl1nfy3r0wxr2vzbqg76xltm3lg4mdqnmibtuvuzzalkrxcmuqtcczd和来自facebook代码的成功长代币,有效期为2个月:aaabv9mchnvsbaa4xtlcywkldzgzgzmzgzzyzmzyzyzyzyzybjybn8gzg8f8gzgzg8fzgzg8f8fzc12fzczc8fzc8fzjjjgzc8xjjjgzbyzbyzbyc8f8vc8v很好,但是当我使用令牌作为参数来发布错误时。[18-Dec-2012 11:37:02]PHP致命错误:未捕获OAutheException:请求此资源需要用户访问令牌。在1249[18-Dec-2012 11:37:03]行的/home/ingersid/public\u html/proiecte/pitzi world.ro/.facebook/postreautomata/base\u facebook.php中抛出的CSRF状态令牌与提供的不匹配。谢谢,我已经使用了这个函数,它给了我长访问令牌,但当我用作$post\u id=$facebook->api的参数时('/'.$page_id.'/photos','post',$params);[18-Dec-2012 11:37:02]PHP致命错误:未捕获OAutheException:请求此资源需要用户访问令牌。在/home/ingersid/public_html/proiecte/pitzi world.ro/.facebook/Postreautomata/base_facebook.PHP第1249行[18-Dec-2012 11:37:03]CSRF状态令牌与提供的令牌不匹配。您可以查看代码。您请求过“发布流”权限吗?如果我使用cronjob如何请求?我现在设置If(!$user){echo$loginUrl=$facebook->getLoginUrl(数组('scope'=>'manage_pages,publish_stream,offline_access',redirect_uri'=>);//用于脱机访问的登录url}如果您有扩展令牌,则在使用cron时无需验证用户。如果用户之前任何时候允许发布操作,只需在您的cron和帖子中使用其扩展的访问令牌即可。这肯定会起作用。您好,我更新了帖子,请转到更新3…可以吗?只有当我访问手册时,cron才起作用Y
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);
}
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);