如何使用PHP SDK扩展Facebook用户访问令牌?
我有以下代码:如何使用PHP SDK扩展Facebook用户访问令牌?,facebook,facebook-php-sdk,facebook-apps,facebook-access-token,Facebook,Facebook Php Sdk,Facebook Apps,Facebook Access Token,我有以下代码: $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->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用户访问令牌以某种方式无效
我是根据找到的文件工作的
那么,有人能告诉我应该如何发送请求,这样Facebook才能真正延长代币的生命周期吗?此外,我不确定如何确定我是否已成功延长Facebook用户访问令牌的生命周期。(至少可以说,我不是Facebook的粉丝,我也是Facebook API的新手)
谢谢,伙计们
编辑:
我已经阅读并将setExtendedAccessToken方法复制到我的类中,并做了一些修改以支持我的逻辑。现在,试图延长用户Facebook访问令牌生命周期的代码如下:
$facebook->setExtendedAccessToken($user->getFacebookAccessToken());
现在,它返回一个包含两个元素的数组:令牌和到期日期。有效期为“5174078”。我相信我正在正确的轨道上解决这个问题,是吗?以下是我认为您应该做的:
这很好,但在这种情况下,您不需要存储代币,您可以“实时”完成这些操作,并要求您的用户仍然登录Facebook以获取新的“实时”令牌,而不是缓存您在上次访问应用程序时获得的令牌。仅供参考,因为我在过去45分钟内一直在使用访问令牌。通过facebook的文档: 这似乎有点过时,我可以手动扩展我现有的短期访问令牌,方法是: ?
客户端id=应用程序id& 客户端密码=应用程序密码& grant\U type=fb\U交换\U令牌&
fb_exchange_token=现有_ACCESS_token您的一些问题没有太大意义-如果正确扩展,该令牌应保持有效约60天,到期时间应在令牌扩展端点的响应中-您将扩展令牌存储在何处?你确定你对同一个用户使用了相同的令牌,并且没有在没有Facebook cookies设置的情况下意外地在PHP代码中调用getAccessToken()?好吧,谢谢你的观察,我将尝试为我的问题增加更多的意义。我知道扩展令牌应该在很长一段时间内保持有效。我将Facebook用户访问令牌存储在与该用户关联的数据库中,因此,是的,我确信我正在为同一用户使用相同的访问令牌。我相信响应中应该包含过期时间,但我得到的响应为null,因此我认为有问题。我的问题是:如果参数正确,我的代码是否工作正常(扩展令牌并返回扩展令牌)?当您扩展从Javascript SDK接收到的短期令牌(1-2小时有效期)时,您应该会收到一个包含更新令牌及其到期日的响应或一条错误消息,如果您收到null,您可能会在某个地方默默地忽略错误。您不能扩展使用服务器端流创建的代码,也不能扩展已交换的令牌,以防您尝试这样做。您需要用户在登录FB时返回。总的来说,您应该能够获取并存储令牌,然后在用户返回(
$facebook->setAccessToken()
)我正在使用PHP SDK时使用该令牌引导SDK。该用户在我的测试中登录到Facebook,并且已经拥有有效的Facebook用户访问令牌。我只是试图扩展它,但收效甚微。我不是在默默地忽略错误。而且,我也不太明白这是怎么回事。如果用户没有登录Facebook,那么他必须登录吗?我读到Facebook用户访问令牌是一个临时密码。那么,如果它没有过期,那么如果我们已经有了临时密码,用户为什么要登录Facebook呢?Facebook文档也帮不了什么忙。谢谢你的回答。与此同时,我在我们的SDK版本中发现了一些bug,可能是同事的一些黑客行为。这些问题阻碍了网站对Facebook的正确行为。因此,它很可能是一个本地错误。然而,令牌扩展目前处于停用状态,因为即使使用短期令牌,我们也会遇到问题。我会整理这些错误,然后回来提供更多信息。再次感谢。谢谢,这很有趣。