如何从return url获取facebook访问令牌

时间:2013-06-04 17:59:02

标签: php facebook-graph-api facebook-access-token

在通过我的FB应用程序进行身份验证后,我将在重定向网址中获取访问令牌,如下所示 -

128.136.227.197/readjson.php#access_token=CAACYyELn7nsBANisLtwVsjibKZC3JSZButoKyO3GC9aPOTXtrWOtEV0lcIMnXGSVPWZCngewl2MtinU9FsJ9hnWdV1yQDVsUFZAZAYsosEVtKwZCR5HBtdAd7CQrsvprUKlDOZALBWmbmhy4HkvW8GCsx9OkwZDZD&expires_in=4527

如何在我的php脚本中获取此提示?

我想尝试如下 -

if($_REQUEST['access_token'])
echo $access_token=$_REQUEST['access_token'];

但没有得到它的价值。

请帮我在我的脚本readjson.php中获取access_token

提前致谢

4 个答案:

答案 0 :(得分:0)

如果你能够解析其中包含访问令牌的URL,你可以简单地去掉除访问令牌之外的任何东西

preg_match()的简单调用可以解决问题

$str = "128.136.227.197/readjson.php#access_token=CAACYyELn7nsBANisLtwVsjibKZC3JSZButoKyO3GC9aPOTXtrWOtEV0lcIMnXGSVPWZCngewl    2MtinU9FsJ9hnWdV1yQDVsUFZAZAYsosEVtKwZCR5HBtdAd7CQrsvprUKlDOZALBWmbmhy4HkvW8GCsx9OkwZDZD&expires_in=4527";

preg_match("/access_token=(.*)(?=&)/", $str, $match);

echo "<pre>";
print_r($match);
echo "</pre>";

以上版画:

Array
(
    [0] => access_token=CAACYyELn7nsBANisLtwVsjibKZC3JSZButoKyO3GC9aPOTXtrWOtEV0lcIMnXGSVPWZCngewl2MtinU9FsJ9hnWdV1yQDVsUFZAZAYsosEVtKwZCR5HBtdAd7CQrsvprUKlDOZALBWmbmhy4HkvW8GCsx9OkwZDZD
    [1] => CAACYyELn7nsBANisLtwVsjibKZC3JSZButoKyO3GC9aPOTXtrWOtEV0lcIMnXGSVPWZCngewl2MtinU9FsJ9hnWdV1yQDVsUFZAZAYsosEVtKwZCR5HBtdAd7CQrsvprUKlDOZALBWmbmhy4HkvW8GCsx9OkwZDZD
)

答案 1 :(得分:0)

由于该值是作为URI片段传递的,因此无法使用$_REQUEST访问它。我有两种方法可以识别。一个使用Javascript(我不熟悉),另一个使用PHP。

$url=parse_url("http://128.136.227.197/readjson.php#access_token=CAACYyELn7nsBANisLtwVsjibKZC3JSZButoKyO3GC9aPOTXtrWOtEV0lcIMnXGSVPWZCngewl2MtinU9FsJ9hnWdV1yQDVsUFZAZAYsosEVtKwZCR5HBtdAd7CQrsvprUKlDOZALBWmbmhy4HkvW8GCsx9OkwZDZD&expires_in=4527");

$fragment = $url['fragment'];

$access_token = preg_replace('/&expires_in=(.*)/',"",$fragment); //To obtain access_token part only

P.S上述代码仅针对给定的URL进行测试。

答案 2 :(得分:0)

您正在使用没有JS SDK身份验证的客户端来实现服务器端实现。

不要这样做。

正确的方法是使用服务器端身份验证流程,允许在$_REQUEST

中获取代码/令牌

https://developers.facebook.com/docs/facebook-login/login-flow-for-web-no-jssdk/

答案 3 :(得分:0)

似乎唯一的方法是使用Javascript w / Ajax,因为浏览器不会将URL片段传递给服务器。因此,使用javascript,您可以将带有片段的完整URL传递给服务器(通过ajax或带有GET查询中URL的重定向)并解析URL

    parse_url($url, PHP_URL_FRAGMENT);

或者您可以在javascript中解析片段,并通过GET或POST将信息传递给ajax调用中的服务器。