Ich muss Nachrichten auf einer Facebook-Seite posten. Konkret möchte ich über cron
posten.
In den API-Dokumenten heißt es:
Seitenzugriffstoken - Diese Zugriffstoken ähneln den Benutzerzugriffstoken, bieten jedoch die Berechtigung für APIs, die die Daten einer Facebook-Seite lesen, schreiben oder ändern. Um ein Seitenzugriffstoken zu erhalten, müssen Sie zunächst ein Benutzerzugriffstoken anfordern und die Berechtigung manage_pages anfordern. Sobald Sie über das Benutzerzugriffstoken verfügen, erhalten Sie das Seitenzugriffstoken über die Graph-API.
Wie kann ich einen Benutzerzugriff und ein Seitenzugriffstoken ohne einen Seitenrückruf erhalten? Ist das möglich?
Was Sie brauchen, ist ein Extended Page Token, es ist für immer gültig. Sie erhalten eine davon:
manage_pages
(und publish_pages
, wenn Sie später als Seite veröffentlichen möchten), um ein Benutzertoken zu erhalten/me/accounts?fields=access_token
mit dem erweiterten Benutzertoken, um eine Liste aller Ihrer Seiten mit erweiterten Seitentoken abzurufen, oder verwenden Sie /page-id?fields=access_token
, um ein erweitertes Seitentoken für eine bestimmte Seite abzurufenInformationen zu allen Tokens und zur Erweiterung des User-Tokens:
PHP API V5
Der folgende Code funktionierte für mich nach 24 Stunden Kopfkratzen .... hoffe, das hilft übrigens, wenn Sie diesen Code benötigen, um zu arbeiten, sollten Sie die ersten beiden Schritte abgeschlossen haben
getRedirectLoginHelper
verwendet$_SESSION['fb_access_token'] = (string) $accessToken;
$fbApp = new Facebook\FacebookApp( 'xxx', 'xxx', 'v2.7' );
$fb = new Facebook\Facebook( array(
'app_id' => 'xxx',
'app_secret' => 'xxx',
'default_graph_version' => 'v2.7'
) );
$requestxx = new FacebookRequest(
$fbApp,
$_SESSION['fb_access_token'],//my user access token
'GET',
'/{page-id}?fields=access_token',
array( 'ADMINISTER' )
);
$responset = $fb->getClient()->sendRequest( $requestxx );
$json = json_decode( $responset->getBody() );
$page_access = $json->access_token;
//posting to page
$requesty = new FacebookRequest(
$fbApp,
$page_access ,
'POST',
'/{page-id}/feed?message=Hello fans YYYYYYYYYYYYYYY'
);
$response = $fb->getClient()->sendRequest( $requesty );
var_dump( $response );
Sie können das Seitentoken folgendermaßen abrufen:
$response = $fb->get('/'.$pageId.'?fields=access_token', (string)$accessToken);
$json = json_decode($response->getBody());
$page_token = $json->access_token;
$response = $fb->post('/'.$pageId.'/feed', $fbData, $page_token);
Ich habe nur JavaScript-Code, aber sobald Sie ein Zugriffstoken haben, erhalten Sie möglicherweise die Seiten, die von dem angegebenen Benutzer verwaltet werden können. Dies wird ein Seitenzugriffstoken für jeden von ihnen enthalten:
jQuery.ajax({type: "GET",
url: "https://graph.facebook.com/v2.2/me/accounts?access_token=" + userToken,
async: false,
data: jsonRequest,
dataType: "json",
cache: false,
success: function(data)
{
Die zurückgegebenen Daten sind wie folgt:
{
"data": [
{
"access_token": "CAACni8TcBB0B...cZBJfwZDZD",
"category": "Computers/Technology",
"name": "abc",
"id": "...",
"perms": [
"ADMINISTER",
"EDIT_PROFILE",
"CREATE_CONTENT",
"MODERATE_CONTENT",
"CREATE_ADS",
"BASIC_ADMIN"
]
},
{
"access_token": "CAA...ZDZD",
"category": "App Page",
"name": "xyz",
"id": "....",
"perms": [
"ADMINISTER",
"EDIT_PROFILE",
"CREATE_CONTENT",
"MODERATE_CONTENT",
"CREATE_ADS",
"BASIC_ADMIN"
]
}
],
access_token
ist Ihr Seitentoken. Sie können die obige Anfrage einfach in PHP umwandeln.