我有一个facebook画布应用程序,我正在使用最新版本的PHP SDK。
我有一个看起来像这样的工作流。用户登录facebook,从应用程序列表中点击应用程序。
用户到达表单页面->点击提交->用户没有看到它经过表单处理页面并尝试发布到墙->标题重定向到邀请页面。
流工作是因为我已经内置了透明的错误处理。然而,在这个流程的第一次行走期间没有墙柱。重复点击facebook图标进入用户主页,点击用户应用程序列表中的应用程序链接。
用户进入表单页面->点击提交->用户没有看到它经过表单处理页面,并试图发布到墙->标题重定向到邀请页面。
这一次和以后的每一次都有效。
我在第一次尝试期间收到的错误是会话access_token无效。之后的每一次,只要用户不注销,它就会工作,我永远不会得到一个错误的令牌。
在表单处理页面上,墙上的邮政编码是:
$user = null;
require "/usr/home/app/www/fb/facebook.php";
//facebook application
$fbconfig['appid' ] = "xxx";
$fbconfig['secret'] = "xxx";
$fbconfig['baseUrl'] = "http://www.app.com/fb";
$fbconfig['appBaseUrl'] = "http://apps.facebook.com/app";
// Create our Application instance.
$facebook = new Facebook(array(
'appId' => $fbconfig['appid'],
'secret' => $fbconfig['secret'],
));
//session_write_close();
$user = $facebook->getUser();
try {
$publishStream = $facebook->api("/me/feed", 'post', array(
'message' => "mess",
'link' => 'http://apps.facebook.com/app',
'picture' => 'http://images.app.com/img.jpg',
'name' => 'name',
'description'=> 'des'
)
);
} catch (FacebookApiException $e) {
d($e);
}
header("Location: https://www.app.com/fb/invite.php");
这是截断的错误,以省略错误信息:
FacebookApiException Object
(
[result:protected] => Array
(
[error] => Array
(
[message] => An active access token must be used to query information about the current user.
[type] => OAuthException
)
)
....
也许您可以尝试offline_access
权限以获得非终止访问令牌?
所以,在我埋头苦干了一个星期之后…我想明白了!我在第一页的末尾添加了一个脚本来重置滚动条。
<script>
FB.init({
appId : 'appid',
status : true,
cookie : true,
xfbml : true,
});
</script>
下一页是处理,直到我到达下一页邀请屏幕出现时才正常工作。那一页是fbi .init,
function callAppReq() {
FB.init({
appId : 'appid',
cookie: true,
channelUrl : 'https://apps.facebook.com/app',
oauth : true
});
加载此页面后,此后每次应用程序都能正常工作。我抓耳挠腮,想不明白是怎么回事。直到我注意到,"oauth: true"是唯一没有出现在第一页的东西。因此,在我需要使滚动条消失的愚蠢脚本中,我添加了":oauth: true"…
<script>
FB.init({
appId : 'appid',
status : true,
cookie : true,
xfbml : true,
oauth : true
});
</script>
瞧,它现在工作了。我非常沮丧,这是这个代码破坏的事情,但非常高兴,我现在有它的修复和理解问题是什么!!