Cross-Posting auf eine Facebook-Seite mit dem PHP-SDK

Viele Websites veröffentlichen Informationen zu neuen Materialien in sozialen Netzwerken, dies kann für Facebook erfolgen. Es wird davon ausgegangen, dass Sie die Anwendung bereits erstellt und die zulässigen Hosts für die OAuth-Umleitung auf der Registerkarte "Erweitert" des Menüeintrags "Einstellungen" angegeben haben. Wir starten die Sitzung also mit der Funktion session_start (). Wer sie benötigt, kann die Fehlerausgabe einschalten, wenn sie deaktiviert ist.

error_reporting(E_ALL); ini_set("display_errors", 1); 

Laden Sie als Nächstes die PHP SDK-Bibliothek (die sich auf github befindet) herunter und extrahieren Sie den Ordner src (der umbenannt werden kann). Geben Sie dann den Pfad zum Autoloader an.

 require_once __DIR__ . '/_src/autoload.php'; 

Erstellen Sie jetzt eine Instanz der Facebook-Klasse.

 $fb = new Facebook\Facebook([ 'app_id' => '1234567890123456', //   id  'app_secret' => '12345678901234567890123456789012' //   ]); 

Wir rufen den Assistenten an, um die Autorisierung durchzuführen, und geben die erforderlichen Berechtigungen für die Veröffentlichung auf der Seite an.

 $helper = $fb->getRedirectLoginHelper(); //  publish_actions,     ,      $permissions = ['manage_pages','publish_pages']; $loginUrl = $helper->getLoginUrl('url____', $permissions); echo '<a href="' . htmlspecialchars($loginUrl) . '"></a>'; 

Nachdem Sie zu der Facebook-Seite weitergeleitet wurden, auf der Sie sich anmelden müssen, folgen Sie dem in der Funktion getLoginUrl () angegebenen Link. Hier rufen Sie erneut den Assistenten an, von dem Sie den access_token-Benutzer erhalten.

 $helper = $fb->getRedirectLoginHelper(); try { $accessToken = $helper->getAccessToken(); } catch(Facebook\Exceptions\FacebookResponseException $e) { echo 'Graph  : ' . $e->getMessage(); exit; } catch(Facebook\Exceptions\FacebookSDKException $e) { echo 'Facebook SDK  : ' . $e->getMessage(); exit; } if (isset($accessToken)) $_SESSION['facebook_access_token'] = (string) $accessToken; elseif ($helper->getError()) exit; 

Wenn Sie versuchen, mit diesem Token auf der Seite zu posten, wird der Fehler "Berechtigungsfehler" zurückgegeben, da hierfür ein Seitentoken erforderlich ist. Um es zu erhalten, müssen Sie die get () - Funktion des Facebook-Objekts aufrufen und zwei Parameter übergeben: die URL der Seitentoken-Anforderung, die die ID der Seite enthält, auf der Sie posten möchten, und das vorherige access_token des Benutzers.

 try { $response = $fb->get('/id_?fields=access_token', $_SESSION['facebook_access_token']); } catch (Facebook\Exceptions\FacebookResponseException $e) { echo 'Graph  : ' . $e->getMessage(); exit; } catch (Facebook\Exceptions\FacebookSDKException $e) { echo 'Facebook SDK  : ' . $e->getMessage(); exit; } //  echo $response->getGraphNode()['access_token']; 

Das empfangene Token hat eine unbegrenzte Dauer. Token-Informationen sind über den Debugger verfügbar. Jetzt können Sie versuchen, eine Nachricht zu posten.

 $str_page = '/1234567890123456/feed'; $feed = array('message' => ''); try { $response = $fb->post($str_page, $feed, 'access_token_'); } catch (Facebook\Exceptions\FacebookResponseException $e) { echo 'Graph  : ' . $e->getMessage(); exit; } catch (Facebook\Exceptions\FacebookSDKException $e) { echo 'Facebook SDK  : ' . $e->getMessage(); exit; } $graphNode = $response->getGraphNode(); echo ', id: ' . $graphNode['id']; 

Bei Bedarf können Sie Facebook beenden.

 $helper = $fb->getRedirectLoginHelper(); $logoutUrl = $helper->getLogoutUrl($_SESSION['facebook_access_token'], 'url____'); echo '<a href="' . htmlspecialchars($logoutUrl) . '"></a>'; 

Source: https://habr.com/ru/post/de481482/


All Articles