J'essaie de poster sur le mur Facebook de l'utilisateur depuis mon application. L'utilisateur a accordé à l'application la permission de poster sur son mur, et j'ai l'ID utilisateur dans la base de données. Je dois envoyer le message automatiquement, sans que l'utilisateur ne se reconnecte.
Mon code est:
try{
require_once(dirname(__FILE__) . '\lib\facebook-php\src\facebook.php' );
}
catch(Exception $o){
print_r($o);
}
$config = array(
'appId' => '123456',
'secret' => '454544',
'allowSignedRequest' => false // optional but should be set to false for non-canvas apps
);
$facebook = new Facebook($config);
$user_id = $facebook->getUser();
$user_id = '123456';
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 {
$ret_obj = $facebook->api('/me/feed', 'POST',
array(
'access_token' => $facebook->getAccessToken(),
'link' => 'www.example.com',
'message' => 'Posting with the PHP SDK!'
));
echo '<pre>Post ID: ' . $ret_obj['id'] . '</pre>';
// Give the user a logout link
echo '<br /><a href="' . $facebook->getLogoutUrl() . '">logout</a>';
} 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.
var_dump($e);
$login_url = $facebook->getLoginUrl( array(
'scope' => 'publish_stream'
));
echo 'Please <a href="' . $login_url . '">login.</a>';
error_log($e->getType());
error_log($e->getMessage());
}
} else {
// No user, so print a link for the user to login
// To post to a user's wall, we need publish_stream permission
// We'll use the current URL as the redirect_uri, so we don't
// need to specify it here.
$login_url = $facebook->getLoginUrl( array( 'scope' => 'publish_stream' ) );
echo 'Please <a href="' . $login_url . '">login.</a>';
}
Cela jette une erreur An active access token must be used to query information about the current user.
et demande la connexion. Après avoir cliqué sur Connexion, la publication est postée avec succès.
Comment puis-je obtenir le jeton d'accès avec userid sans que l'utilisateur se connecte?
Cela se produit lorsque le jeton d'accès actif n'est pas disponible lors de l'appel du noeud final de l'API /me
Il y a deux solutions pour se faire une idée
utiliser l'id utilisateur au lieu de/moi
définir le jeton d'accès avant d'envoyer l'appel api
Pour le premier, vous pouvez faire l’appel en tant que
ret_obj = $facebook->api('/'.$user_id.'/feed', 'POST',
array(
'link' => 'www.example.com',
'message' => 'Posting with the PHP SDK!'
));
Vous n'avez pas besoin d'envoyer 'access_token' => $facebook->getAccessToken(),
La deuxième option est de faire comme
$access_token = $facebook->getAccessToken();
$facebook->setAccessToken($access_token);
ret_obj = $facebook->api('/me/feed', 'POST',
array(
'link' => 'www.example.com',
'message' => 'Posting with the PHP SDK!'
));
NOTE: publish_stream
scope doit être envoyé pendant la connexion.
Avis de dépréciation: publish_stream
a été remplacé par publish_actions
, vérifiez le doc de facebook pour permission
vous devez obtenir la permission. Découvrez-le ici