0

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

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

4 回答 4

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

PS 上面的代码只针对给定的 url 进行了测试。

于 2013-06-04T18:22:07.367 回答
0

It seem the only way is via Javascript w/ Ajax, as the browser does not pass the URL fragment to the server. So with javascript you can pass either the full URL w/ the fragment to the server (via ajax or a redirect with the URL in the GET query) and parse the URL w/

    parse_url($url, PHP_URL_FRAGMENT);

Or you can parse the fragment in javascript and pass the information via GET or POST to the server in an ajax call.

于 2013-12-19T00:54:22.657 回答
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
)
于 2013-06-04T18:20:26.150 回答
0

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

不要那样做。

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

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

于 2013-06-04T18:34:54.007 回答