Je dois poster des messages sur une page Facebook. Plus précisément, je veux poster via cron
.
Voici ce que disent les documents de l'API:
Jeton d'accès à la page - Ces jetons d'accès sont similaires aux jetons d'accès utilisateur, à la différence près qu'ils autorisent les API à lire, écrire ou modifier les données appartenant à une page Facebook. Pour obtenir un jeton d'accès à la page, vous devez commencer par obtenir un jeton d'accès utilisateur et demander l'autorisation de manage_pages. Une fois que vous avez le jeton d'accès utilisateur, vous obtenez le jeton d'accès à la page via l'API Graph.
Comment obtenir un jeton d'accès utilisateur et d'accès à une page sans rappel de page? Est-ce possible?
Ce dont vous avez besoin est un jeton de page étendu, il est valable pour toujours. Vous en obtenez un comme ceci:
manage_pages
(et publish_pages
si vous souhaitez publier ultérieurement en tant que page) pour obtenir un jeton d'utilisateur./me/accounts?fields=access_token
avec le jeton d'utilisateur étendu pour obtenir une liste de toutes vos pages avec des jetons de page étendus ou utilisez /page-id?fields=access_token
pour obtenir un jeton de page étendu pour une page spécifique.Informations sur tous les jetons et comment étendre le jeton utilisateur:
API PHP V5
Le code ci-dessous a fonctionné pour moi après 24 heures de grattage de la tête .... espérons que cela vous aidera au passage si vous avez besoin de ce code pour fonctionner, vous devriez avoir effectué les deux premières étapes.
getRedirectLoginHelper
$_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 );
Vous pouvez obtenir le jeton de page de cette façon:
$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);
Je n'ai que du code JavaScript, mais une fois que vous avez un jeton d'accès, vous pouvez obtenir les pages qui peuvent être administrées par l'utilisateur donné. Cela contiendra un jeton d'accès à la page pour chacun d'eux:
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)
{
Les données renvoyées sont comme:
{
"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
est votre jeton de page. Vous pouvez transformer la requête ci-dessus en PHP facilement.