2014-05-20 68 views
0

我试图发布为Facebook页面上的页面,因为6天没有成功,这真的令人沮丧,使用新的Facebook SDK 4.0.4。PHP Facebook SDK 4.0作为页面服务器发布到服务器

我在PHP 5.4以下(按照Facebook 4.0 SDK版本的要求)。 我已经阅读了一些所有的facebook文档(不太清楚)https://developers.facebook.com/docs/reference/php/4.0.0

对于测井在:

<?php 

require_once(BaseRoot. '/include/scripts/facebook_php_sdk/src/Facebook/FacebookSession.php'); 
require_once(BaseRoot. '/include/scripts/facebook_php_sdk/src/Facebook/FacebookRedirectLoginHelper.php'); 
require_once(BaseRoot. '/include/scripts/facebook_php_sdk/src/Facebook/FacebookRequest.php'); 
require_once(BaseRoot. '/include/scripts/facebook_php_sdk/src/Facebook/FacebookResponse.php'); 
require_once(BaseRoot. '/include/scripts/facebook_php_sdk/src/Facebook/FacebookSDKException.php'); 
require_once(BaseRoot. '/include/scripts/facebook_php_sdk/src/Facebook/FacebookRequestException.php'); 
require_once(BaseRoot. '/include/scripts/facebook_php_sdk/src/Facebook/FacebookOtherException.php'); 
require_once(BaseRoot. '/include/scripts/facebook_php_sdk/src/Facebook/FacebookAuthorizationException.php'); 
require_once(BaseRoot. '/include/scripts/facebook_php_sdk/src/Facebook/GraphObject.php'); 
require_once(BaseRoot. '/include/scripts/facebook_php_sdk/src/Facebook/GraphSessionInfo.php'); 
require_once(BaseRoot. '/include/scripts/facebook_php_sdk/src/Facebook/FacebookServerException.php'); 

use Facebook\FacebookSession; 
use Facebook\FacebookRedirectLoginHelper; 
use Facebook\FacebookRequest; 
use Facebook\FacebookResponse; 
use Facebook\FacebookSDKException; 
use Facebook\FacebookRequestException; 
use Facebook\FacebookOtherException; 
use Facebook\FacebookAuthorizationException; 
use Facebook\GraphObject; 
use Facebook\GraphSessionInfo; 
use Facebook\FacebookServerException; 



     session_start(); 


     // init app with app id and secret 
     FacebookSession::setDefaultApplication($site["facebook_appid"],$site["facebook_appsecret"]); 

     // login helper with redirect_uri 
     $helper = new FacebookRedirectLoginHelper($site["url"].$_SERVER['REQUEST_URI']); 

     // see if a existing session exists 
     if (isset($_SESSION) && isset($_SESSION['fb_token'])) { 
      // create new session from saved access_token 
      $session = new FacebookSession($_SESSION['fb_token']); 

      // validate the access_token to make sure it's still valid 
      try { 
      if (!$session->validate()) { 
       $session = null; 
      } 
      } catch (Exception $e) { 
      // catch any exceptions 
      $session = null; 
      } 
      echo '<a href="' . $helper->getLogoutUrl($session, 'http://yourwebsite.com/app/logout.php') . '">Logout</a>'; 
     } else { 
      // no session exists 

      try { 
      $session = $helper->getSessionFromRedirect(); 
      } catch(FacebookRequestException $ex) { 
      // When Facebook returns an error 
      } catch(Exception $ex) { 
      // When validation fails or other local issues 
      echo $ex->message; 
      } 

      echo '<a href="' . $helper->getLoginUrl(array('public_profile', 'email', 'user_friends' , 'publish_stream', 'manage_pages', 'publish_actions', 'status_update', 'user_likes ', 'photo_upload')) . '">Login</a>'; 


     } 



/////////////////////////// 
// SHORT LIVED TOKEN 
    $request = new FacebookRequest($session, "GET", "/".$site["facebook_appid"]."/accounts?access_token=".$site["facebook_appid"]."|".$site["facebook_appsecret"]."&grant_type=client_credentials"); 
    $response = $request->execute(); 
    // get response 
    $graphObject = $response->getGraphObject()->asArray(); 


    if (DebugMode) e($graphObject); 

    $site['facebook_short-lived_access_token'] = $graphObject['data'][0]->access_token; 

//////////////////////// 

/////////////////////////// 
// LONG LIVED TOKEN 
    $request = new FacebookRequest($session, "GET", "/oauth/access_token?grant_type=fb_exchange_token&client_id=".$site["facebook_appid"]."&client_secret=".$site["facebook_appsecret"]."&fb_exchange_token=" .$site['facebook_short-lived_access_token']); 
    $response = $request->execute(); 
    // get response 
    $graphObject = $response->getGraphObject()->asArray(); 


    if (DebugMode) e($graphObject); 

    $site['facebook_long-lived_access_token'] = $graphObject['access_token']; 
    $_SESSION['fb_token'] = $site['facebook_long-lived_access_token']; 

    if (DebugMode) e($site['facebook_long-lived_access_token']); 

?> 

与发布:

<?php 

require_once(BaseRoot. '/include/scripts/facebook_php_sdk/src/Facebook/FacebookRequest.php'); 
require_once(BaseRoot. '/include/scripts/facebook_php_sdk/src/Facebook/GraphObject.php'); 
require_once(BaseRoot. '/include/scripts/facebook_php_sdk/src/Facebook/FacebookSDKException.php'); 
require_once(BaseRoot. '/include/scripts/facebook_php_sdk/src/Facebook/FacebookRequestException.php'); 
require_once(BaseRoot. '/include/scripts/facebook_php_sdk/src/Facebook/FacebookPermissionException.php'); 


use Facebook\FacebookRequest; 
use Facebook\GraphObject; 
use Facebook\FacebookRequestException; 
use Facebook\FacebookSDKException; 
use Facebook\FacebookPermissionException; 


if($session) { 


    try { 
    $response = (new FacebookRequest(
     $session, 'POST', "/".$site["facebook_page_id"]."/feed", 
     array(
     'access_token' => $_SESSION['fb_token'], 
     'link' => $site["url"].'/url', 
     'name' => 'link name', 
     'caption' => 'link caption', 
     'description' => 'link description', 
     'picture' => $site["url"].'/alpha.png', 
     'message' => 'User provided message' 
    ) 
    ))->execute()->getGraphObject(); 

    echo "Posted with id: " . $response->getProperty('id'); 

    } catch(FacebookRequestException $e) { 

    echo "Exception occured, code: " . $e->getCode(); 
    echo " with message: " . $e->getMessage(); 

    } 

} 

?> 

我第一次得到一个会话ID,然后请求并获得一个短暂的令牌,与我请求并获得一个长期的令牌(60天有效期)。然后我使用最后获取的令牌继续发布脚本。 我提交了一个帖子,它返回了一个后ID,就像它的工作,但没有在页面上,没有在我的个人Facebook历史。

我的应用处于开发模式,并没有因Facebook的审查,但它似乎没有必要了:http://www.nextscripts.com/known-issues/facebook-issues/

任何想法,我错了?

+0

没有人可以帮助...这个问题真的没有任何解决方案吗? 40天和274的观点后,仍然没有答案的阴影... – Matbe81

回答

0

我不是真的到了Facebook SDK,但我注意到一条线,我怀疑是不正确的:

echo '<a href="' . $helper->getLoginUrl(array('public_profile', 'email', 'user_friends' , 'publish_stream', 'manage_pages', 'publish_actions', 'status_update', 'user_likes ', 'photo_upload')) . '">Login</a>'; 

有关该功能的Facebook的文件可以发现here。 它声明你希望获得额外的权限,为数组提供索引'作用域'和作为值的字符串,并且在你想请求的每个权限之间用逗号代替数组,而索引被调用为权限但没有任何数据在里面。我怀疑它应该是这样的:

$helper->getLoginUrl(array('scope' => 'public_profile,email,user_friens,publish_stream,<and so on>')); 

我希望这可以帮助你。

相关问题