我正在使用此代码发布到用户的墙上:
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 = xxxzz
和state =yyy
,但$fb_session is 0
。
这有时无需任何更改。请帮忙!
答案 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);
之后
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;
.
.
.