在通过我的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
提前致谢
答案 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调用中的服务器。