it-swarm.com.de

Facebook PHP SDK - Wie erhalte ich ein Zugriffstoken?

Ich versuche, über meine App auf der Facebook-Pinnwand des Benutzers zu posten. Der Benutzer hat der App die Berechtigung zum Posten an seiner Pinnwand erteilt, und ich habe die Benutzer-ID in db. Ich muss den Beitrag automatisch senden, ohne dass sich der Benutzer erneut anmeldet.

Mein Code ist:

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

}

Dies löst einen An active access token must be used to query information about the current user. Fehler aus und fordert zur Anmeldung auf. Nachdem ich auf Login geklickt habe, wird der Beitrag erfolgreich gepostet.

Wie kann ich das Zugriffstoken mit der Benutzer-ID erhalten, ohne dass sich der Benutzer anmeldet?

5
user1049961

Dies geschieht, wenn das aktive Zugriffstoken beim Aufrufen des API-Endpunkts /me nicht verfügbar ist.

Es gibt zwei Lösungen, um dieses Problem zu lösen

  • benutze die userid anstelle von/me

  • stellen Sie das Zugriffstoken vor dem Senden des API-Aufrufs ein

Zum ersten können Sie den Anruf als tätigen

ret_obj = $facebook->api('/'.$user_id.'/feed', 'POST',
            array(
                'link' => 'www.example.com',
                'message' => 'Posting with the PHP SDK!'
            ));

Sie müssen nicht senden 'access_token' => $facebook->getAccessToken(),

Die zweite Option ist, wie zu tun

$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!'
                ));

HINWEIS: publish_stream scope muss während der Anmeldung gesendet werden

Hinweis zur Nichtbeachtung: publish_stream wurde durch publish_actions ersetzt. Überprüfen Sie das Facebook-Dokument auf Berechtigung .

7

du musst die Erlaubnis bekommen. Schau es dir hier an

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

0
Nishant Solanki