gpt4 book ai didi

php - Facebook SDK v5 在墙上发布页面

转载 作者:行者123 更新时间:2023-12-05 08:34:11 24 4
gpt4 key购买 nike

我有以下代码片段,它可以作为我自己在 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();

现在我的问题是如何让它作为实际页面而不是作为页面管理员的我的帐户发布。

我已经查看了 SDK 文档并且一直在兜圈子,有很多 v4 的示例,但由于它已被弃用,我正在尝试使用 v5,但似乎无法弄清楚,在 SDK v5 中,我发现任何指向帖子归属或冒充的链接都是死链接。

据我所知,我需要调用/{user-id}/accounts 以从我的用户 https://developers.facebook.com/docs/facebook-login/access-tokens#pagetokens 获取页面的访问 token

但要获得 {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();
}

这里的问题是我不知道如何获得一个我需要获取用户数据的 session ,该 session 为我提供访问 token 以允许我将访问 token 传递到我上面的代码片段中,如果我全部理解正确!?

非常感谢任何帮助!

最佳答案

我与类打交道,所以我根据上面的示例调整了我的代码。已测试且有效的代码。

在使用您使用的方法(参见指南 here )获得用户访问 token 后,我们必须获得长期访问 token 。将此添加到您的代码中:

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;
}

说明:您必须知道您是哪些页面的管理员:

$response = $fb->get('/me/accounts', (string) $accessToken);

然后搜索表格以检索我们感兴趣的页面的访问 token (我选择了引用页面的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
);

关于php - Facebook SDK v5 在墙上发布页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32328734/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com