没有创建Facebook会话

时间:2013-08-12 06:00:57

标签: php facebook facebook-graph-api

我正在使用此代码发布到用户的墙上:

require 'fb/src/facebook.php';
$facebook = new Facebook(array(
   'appId' => 'xxx',
   'secret' => 'xxx',
));
$params = array(
    'canvas' => 1,
    'scope' => 'publish_stream,email,user_about_me,user_birthday,user_website',
    'redirect_uri' => 'urlhere',
);

$fb_session = $facebook->getUser();

// Session based API call.
if ($fb_session) 
{
    try 
    {
         $args = array(
                  'message' =>  $_GET['by'],
                  'link' => 'linkhere/',
                  'caption' => $_GET['test']
                 );
         $post_id = $facebook->api("/me/feed", "post", $args);
     } 
     catch (Exception $e) 
     {

         $fb_login_url = $facebook->getLoginUrl($params);
         echo $e->getMessage();
     }
} 
else 
{
     $fb_login_url = $facebook->getLoginUrl($params);
} 

代码正在运行,直到uuer点击登录部分发布。之后,网址包含code = xxxzzstate =yyy,但$fb_session is 0

这有时无需任何更改。请帮忙!

2 个答案:

答案 0 :(得分:1)

当您尝试发布到某个用户Facebook墙时,您应该包含访问令牌。

首先获取访问令牌:

$fbToken = NULL;
$fbToken = $facebook->getAccessToken();

$fb_session = $facebook->getUser();

之后

然后将其包含在$args数组中:

 'access_token' => $fbToken 

如果未创建会话或访问令牌无效,则应重新定向用户以重新授权您的Facebook App。

所以在ELSE中,你应该添加

   header("Location: $fb_login_url ");
$fb_login_url = $facebook->getLoginUrl($params);

之后

  • 假设其他一切都正确,但access_token无效,您还应该在header("Location: $fb_login_url ");
  • 之前添加echo $e->getMessage();

答案 1 :(得分:0)

在这两种情况下,您都在使用getloginurl

不应该是

if ($fb_session) {
try {
$args = array(
'message' =>  $_GET['by'],
'link' => 'linkhere/',
'caption' => $_GET['test']
);
$post_id = $facebook->api("/me/feed", "post", $args);
} catch (Exception $e) {
$fb_logout_url = $facebook->getLogoutUrl;
.
.
.