我有这段代码:
$facebook->api("/oauth/access_token?grant_type=fb_exchange_token&client_id=".$facebook->getAppId()."&client_secret=".$facebook->getAppSecret()."&fb_exchange_token=".$user->getFacebookAccessToken());
它不会抛出任何异常,但会返回null。我试图将短暂的Facebook用户访问令牌扩展为长期存在的Facebook用户访问令牌。但是,在我生成新令牌并在新令牌仍处于活动状态时调用此请求之后,我已经等了几个小时并启动了一个浏览器,我没有使用我的Facebook帐户登录。然后我登录了一个测试用户(到应用程序,而不是Facebook),但遗憾的是它指示我登录Facebook,这意味着Facebook用户访问令牌在某种程度上无效。
我的工作基于here找到的文档。
那么,有人可以告诉我应该如何发送请求,以便Facebook真正延长令牌的生命周期?此外,我不知道如何确定我是否已成功延长Facebook用户访问令牌的生命周期。 (我不是Facebook的粉丝,至少可以说,我也是Facebook API的新手。)
谢谢,伙计们。
编辑: 我已阅读this article并将setExtendedAccessToken方法复制到我的类中,并进行了一些修改以支持我的逻辑。现在,试图延长用户Facebook访问令牌生命周期的代码如下:
$facebook->setExtendedAccessToken($user->getFacebookAccessToken());
现在它返回一个包含两个元素的数组,即令牌和到期日期。到期日为“5174078”。我相信我在正确的轨道上解决这个问题,是吗?
答案 0 :(得分:4)
以下是我认为您应该做的事情:
我认为第4步是你的问题;我怀疑你看到用户已退出Facebook并再次通过Facebook身份验证过程发送,而不是让他们通过您自己的登录机制登录您的应用程序,并重新使用您之前存储的令牌。
这很好,但是在这种情况下你不需要存储令牌,你可以全部“直播”并要求你的用户仍然登录Facebook以获取新的令牌“直播”而不是缓存您在上次访问应用时获得的令牌。
答案 1 :(得分:1)
就像一个FYI原因一样,我在过去的45分钟内一直在使用访问令牌。通过facebook的文档: https://developers.facebook.com/docs/roadmap/completed-changes/offline-access-removal/
似乎有点过时,我能够手动扩展我现有的短期访问令牌:
https://graph.facebook.com/oauth/access_token?
CLIENT_ID = APP_ID&安培;
client_secret = APP_SECRET&安培;
grant_type = fb_exchange_token&安培;
fb_exchange_token = EXISTING_ACCESS_TOKEN