找了几个小时后,我找不到这个问题的答案。希望有人可以帮助我。我正在使用最新的 facebook PHP SDK (v.3.2.0)。
我有一个公司的粉丝页面(页面 A),该公司的几个人也有粉丝页面(页面 B、C、D 等)。问题是我们希望将页面 B(以及 C 和 D)的帖子发布到页面 A,但发件人(帖子用户)应该是页面用户 B。
您可以作为另一个页面用户 B 发布到页面墙 A 吗?
我已经尝试了一切并且有以下工作:
- 我有一个管理员用户的访问令牌,它是所有页面的管理员
- 我有一个扩展访问令牌,可以在 60 天内自动发出请求
- 我有来自 /me/accounts 请求的所有页面的页面令牌
- 我有一个通过 /[page-id]/feed 包含所有页面的所有墙贴的数组
最后一部分是循环遍历数组,以用户 B、C 或 D 的身份发布到页面 A 的墙上。
我向 /[page-id-page-A]/feed 发送了一个 POST 请求,其中包含一条消息和页面 B 的页面令牌。请求后我收到一个错误:
未捕获的 OAuthException: (#200) 演员为页面的帖子也不能包含 target_id
以页面用户 B 的身份发布到页面 B 的墙上可以正常工作。以页面用户 B 的身份发布到页面 A 不会。文档不清楚这是否应该有效,但从 facebook UI 来看这是可能的。
希望有人能指出我正确的方向。我正在使用的代码如下,供任何想要使用它的人使用。
<?php
/* ************************
* Helper functions
************************ */
function sortbykey($a, $b) {
return $a['time'] - $b['time'];
}
/* ************************
* Start app
************************ */
// Initialize Facebook
require_once("facebook.php");
$facebook = new Facebook(array('appId' => '<appID>','secret' => '<appSecret>'));
// Get facebook user (if possible)
$user_id = $facebook->getUser();
$login_params = array(
'scope' => 'manage_pages,publish_stream',
'redirect_uri' => '<app_url>/index.php'
);
if($user_id) {
// We have a user ID, so probably a logged in user.
// If not, we'll get an exception, which we handle below.
try {
// Get user profile and extended access tokens for requests
$user_profile = $facebook->api('/me','GET');
$facebook->setExtendedAccessToken();
$access_token = $facebook->getAccessToken();
} catch(FacebookApiException $e) {
// If the user is logged out, you can have a
// user ID even though the access token is invalid.
// In this case, we'll get an exception, so we'll
// just ask the user to login again here.
$login_url = $facebook->getLoginUrl($login_params);
echo '<div class="login"><a href="' . $login_url . '">login</a></div>';
error_log($e->getType());
error_log($e->getMessage());
}
} else {
// No user, print a link for the user to login
$login_url = $facebook->getLoginUrl($login_params);
echo '<div class="login"><a href="' . $login_url . '">login</a></div>';
}
if(isset($access_token) && !empty($access_token)){
// Provide logout options
$logout_url = $facebook->getLogoutUrl();
echo '<div class="logout"><a href="' . $logout_url . '">logout</a></div>';
// Get user pages and tokens
$user_pages = $facebook->api('/me/accounts','GET');
$page_tokens = array();
foreach($user_pages['data'] as $page){
$page_tokens[$page['id']] = $page['access_token'];
}
// Set challenger ID's and page ID
$persons = array('page-ID-B','page-ID-C','page-ID-D');
$page = 'page-ID-A';
// Loop over persons and create stream of messages.
$messages = array();
foreach($persons as $person){
$token = $page_tokens[$person];
$feed = $facebook->api('/'.$person.'/feed','GET');
foreach($feed['data'] as $status){
// Add page token to message to post as page and time to sort by
$status['token'] = $token;
$status['time'] = strtotime($status['created_time']);
// Only add messages that aren't imported yet
if($status['time'] > $_SESSION['lastupdatetime']) {
$messages[] = $status;
}
}
}
// Sort by time value in nested array
usort($messages,"sortbykey");
// Post messages to timeline
foreach($messages as $status){
// Post to MScHALLENGE page based on type
switch($status['type']){
case 'status':
case 'link':
// Build post data
$data = array();
if(isset($status['message'])) $data['message'] = $status['message'];
if(isset($status['link'])) $data['link'] = $status['link'];
// Post to facebook
if(!empty($data)){
$data['access_token'] = $status['token'];
$post = $facebook->api('/'.$page.'/feed','POST',$data);
}
break;
}
// Save last update time
$_SESSION['lastupdatetime'] = $status['time'];
}
}
?>