我有下面的代码片段,它可以在Facebook上作为我自己的用户帐户在Facebook页面上发布.
这些值FACEBOOK_*在代码库中先前定义.
// SDK Version 5.0
$fb = new Facebook\Facebook([
'app_id' => FACEBOOK_APP_ID,
'app_secret' => FACEBOOK_APP_SECRET,
'default_graph_version' => 'v2.4',
]);
// Returns a `Facebook\FacebookResponse` object
$response = $fb->post('/'.FACEBOOK_PAGE_ID.'/feed', $postData, FACEBOOK_ACCESS_TOKEN);
$postId = $response->getGraphNode();
Run Code Online (Sandbox Code Playgroud)
现在我的问题是如何让它作为实际页面发布而不是我的帐户,即页面的管理员.
我已经看过SDK文档,我一直在圈子里,有很多v4的例子,但因为它已被弃用,我试图使用v5,似乎无法弄明白,任何链接发布归因或模仿,我发现在SDK的v5中是死链接.
从我所看到的,我需要打电话给/ {user-id}/accounts以从我的用户那里获取该页面的访问令牌,https://developers.facebook.com/docs/facebook-login/access-令牌#pagetokens
但是为了得到一个{user-id} 我必须查询用户,使用SDK文档中的以下示例:
// Make sure to load the Facebook SDK for PHP via composer or manually
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRequestException;
if($session) {
try {
$user_profile = (new FacebookRequest(
$session, 'GET', '/me'
))->execute()->getGraphObject(GraphUser::className());
echo "Name: " . $user_profile->getName();
} catch(FacebookRequestException $e) {
echo "Exception occured, code: " . $e->getCode();
echo " with message: " . $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是我不知道如何获得一个我需要获取用户数据的会话,这些会话允许我将访问令牌传递到我上面的代码片段中,这样我就能理解这一切正确!?
任何帮助非常感谢!
我使用类,所以我将代码调整到上面的示例中.经过测试和运行的代码.
在使用您使用的方法获取用户访问令牌后(请参阅此处的指南),我们必须获取长期访问令牌.将其添加到您的代码中:
session_start();
$helper = $fb->getRedirectLoginHelper();
try {
$accessToken = $helper->getAccessToken();
} catch(Facebook\Exceptions\FacebookSDKException $e) {
// There was an error communicating with Graph
echo $e->getMessage();
exit;
}
if (isset($accessToken)) {
$client = $fb->getOAuth2Client();
try {
$accessToken = $client->getLongLivedAccessToken($accessToken);
} catch(Facebook\Exceptions\FacebookSDKException $e) {
echo $e->getMessage();
exit;
}
$response = $fb->get('/me/accounts', (string) $accessToken);
foreach ($response->getDecodedBody() as $allPages) {
foreach ($allPages as $page ) {
if (isset($page['id']) && $page['id'] == $pageId) { // Suppose you save it as this variable
$appAccessToken = (string) $page['access_token'];
break;
}
}
}
$response = $fb->post(
'/'.$pageId.'/feed',
array(
"message" => "Message",
"link" => "http://www.example.com",
"picture" => "http://www.example.net/images/example.png",
"name" => "Title",
"caption" => "www.example.com",
"description" => "Description example"
),
$appAccessToken
);
// Success
$postId = $response->getGraphNode();
echo $postId;
} elseif ($helper->getError()) {
var_dump($helper->getError());
var_dump($helper->getErrorCode());
var_dump($helper->getErrorReason());
var_dump($helper->getErrorDescription());
exit;
}
Run Code Online (Sandbox Code Playgroud)
说明:您必须知道您是哪个页面的管理员:
$response = $fb->get('/me/accounts', (string) $accessToken);
Run Code Online (Sandbox Code Playgroud)
然后搜索表以检索the access token of the page我们感兴趣的内容(我选择了引用页面的id).
最后,只需运行SDK提供的post函数:
$response = $fb->post(
'/'.$pageId.'/feed',
array(
"message" => "Message",
"link" => "http://www.example.com",
"picture" => "http://www.example.net/images/example.png",
"name" => "Title",
"caption" => "www.example.com",
"description" => "Description example"
),
$appAccessToken
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5392 次 |
| 最近记录: |