web-dev-qa-db-fra.com

Facebook PHP SDK - Comment obtenir un jeton d'accès?

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?

5
user1049961

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

7
Abhik Chakraborty

vous devez obtenir la permission. Découvrez-le ici

https://developers.facebook.com/docs/reference/login/

0
Nishant Solanki