Joh*_*ika 14 facebook facebook-graph-api
使用Facebook的Graph API,我成功地在用户离线时发布到用户的Feed,只有publish_stream权限.我不需要offline_access权限.我在这里解释了我是如何做到的:Facebook Stream在离线时发布
当用户离开时,我没有成功发布到页面.这是我的情景:
用户U是Page P. P的管理员,授权并安装我的应用程序.U授权我的应用程序并授予我以下扩展权限:
一旦用户离线,如果我尝试使用相同的技术发布到用户的流(没有offline_access权限)而是发布到页面,我得到"用户没有授权应用程序执行此操作".这是技术:
1)获取我的应用程序的access_token
2)使用我的应用程序的access_token发布到Page P的提要: POST https://graph.facebook.com/ {page_id}/feed
如果在步骤2中使用{user_id}代替{page_id},那么它会毫无问题地发布到用户的Feed.但是,我想发布到Page的Feed.是否有可能做到这一点?或者我是否需要用户的offline_access权限才能执行此操作?
谢谢,约翰尼
全流程 - 四页示例(更容易编辑和理解示例)
所以配置只有基本的应用信息......
当你加载index.php- 它重定向到Facebook以获得页面的授权..(可能已经有这个......但覆盖所有基础)
然后Facebook重定向回redirecturl(backfromfb.php)......
Facebook将访问令牌作为哈希而不是get变量返回,因此该页面将使用哈希作为变量进行刷新...
然后它加载PageUpdate.php处理循环通过app/admin令牌的句柄,并找到你要发布到的页面的正确值.
然后它构建帖子并提交它..
听起来你对大部分内容都有所了解......所以希望这会帮助你最后一点.
config.php文件
<?php
$config = array(
'appId' => 'YOUR APP ID',
'secret' => 'YOUR APP SECRET',
'cookie' => true;
);
$baseurl = 'http://yoursite.com/';
$returnpage = 'backfromfb.php';
require_once('library/facebook.php');
?>
Run Code Online (Sandbox Code Playgroud)
的index.php
<?php require_once('config.php'); ?>
<html><head><title>Redirecting for auth</title></head><body><script type="text/javascript">
window.location.href = 'https://www.facebook.com/dialog/oauth?client_id=<?php echo $config['appId']; ?>&redirect_uri=<?php echo $baseurl . $returnpage; ?>&scope=manage_pages&response_type=token';
</script></body></html>
Run Code Online (Sandbox Code Playgroud)
backfromfb.php
<?php
require_once('config.php');
// this page just passes the access token from the hash to a GET arg...
if (!isset($_GET['access_token'])) {
?>
<html><head><title>Redirecting</title></head><body><script type="text/javascript">
accessToken = window.location.hash.substring(1);
window.location.href = '<?php echo $baseurl . $returnpage; ?>?' + accessToken;
</script></body></html>
<?php
} else {
require_once('PageUpdate.php');
} ?>
Run Code Online (Sandbox Code Playgroud)
PageUpdate.php
<?php
require_once('config.php');
$pageID = "123456 WHatever you page id is";
$AppToken = array(
'access_token' => $_REQUEST['acess_token']
);
$fb = new Facebook($config);
// Load APP page access rights for user via AppToken
$pageAdmin = $fb->api('/me/accounts', 'GET', $AppToken);
// Find the page access token
foreach ($pageAdmin['data'] as $data) {
if ($data['id'] == $pageID) {
$pageToken['access_token'] = $data['access_token'];
continue;
}
}
// compile the post
$WallPost = array(
'message' => 'Test post from my app!'
); // you can also use 'picture', 'link', 'name', 'caption', 'description', 'source'....
//http://developers.facebook.com/docs/reference/api/
// post to wall
$response = $fb->api($pageID . '/feed','POST',$WallPost);
if($response) {
echo 'Success!';
echo '<pre>' . $response . '</pre>';
} else echo "failed";
?>
Run Code Online (Sandbox Code Playgroud)
问题是您需要使用通过获得的权限提供的页面的访问令牌......
呃...更简单的说法是这样的:
您的应用程序请求“manage_pages”权限 - 一旦您接受/授予权限,您就拥有了应用程序权限的access_token(离线时只需在此处设置expires=0)
现在您的应用程序有权管理您的页面,但它需要特定页面的令牌......
因此,如果您使用第一个令牌发出/me/accounts(或/UID/accounts),您将获得应用程序有权访问的页面列表及其各自的令牌...
从那里只需获取页面的令牌,然后使用该令牌发出命令
使用 facebook 类(facebook.php和证书文件)
require_once 'library/facebook.php';
$app_id = "YOURAPPID";
$app_secret = "YOURSECRET";
$facebook = new Facebook(array(
'appId' => $app_id,
'secret' => $app_secret,
'cookie' => true
));
$token = array(
'access_token' => 'THE Token from app / manage_page auth'
);
$userdata = $facebook->api('/me/accounts', 'GET', $token);
echo '<pre'>;
print_r($userdata);
echo '</pre>';
Run Code Online (Sandbox Code Playgroud)
您应该看到页面 id 及其访问令牌的列表...
通常我会foreach $userdata['data']查找页面 id,然后从该子数组中获取令牌...
| 归档时间: |
|
| 查看次数: |
16765 次 |
| 最近记录: |