2010-05-10 25 views
0

我正在使用他们的oAuth流与Facebook Open Graph进行一些集成,并且解析了它们返回的查询字符串参数。PHP代码在Facebook上返回时看不到查询字符串参数oAuth流

在我的回调URL中,它们传回带有散列(#)的“access_token”参数。所以回调将是:

http://mydomain.com/callback.php#access_token=foobar123 

其中foobar123是我的访问令牌我试图解析出来。但是,不管我做什么,我的PHP代码都看不到我是否已经完成了我所知道的每一个调试技巧(甚至使用phpinfo()来完成所有事情)。该URL仅以http://mydomain.com/callback.php表示。就好像网址的其余部分并不存在!

此代码返回什么:

$token = $_REQUEST['access_token']; 

任何帮助将不胜感激......我明明简单的东西。

回答

1

url片段(#之后的部分)永远不会传递到服务器,所以PHP脚本永远不会看到它。 你可以处理它的方式是在回调页面上使用javascript,它将url的哈希部分作为查询字符串参数发布到另一个页面。

callback1.php

<script type="text/javascript"> 
    var h = window.location.hash; 
    window.location = 'http://example.com/callback2.php?'+h; 
</script> 

callback2.php

<?php 
    $access = $_GET['access_token']; 
?> 

虽然我建议你看看Facebook的Javascript和PHP SDK为你想要做什么。所有基本的oAuth功能已经在那里建立。

+0

不用说,可能只有一个回调文件来处理所有这些。 – Gunjan 2010-05-10 09:20:20

+0

感谢您指出我错过的仅仅是可用的客户端的显而易见的事情! – TMC 2010-05-10 15:38:22

0

#字符后的所有内容仅在客户端可用。您可以尝试使用JavaScript访问此值并将其存储在Cookie中或将用户重定向到其他网址。一些模拟:

<script type="text/javascript"> 
var token = 'foo'; // In real, get value by parsing URL 
window.location ('http://mydomain.com/callback.php?token=' + token); 
</script> 
1

将令牌作为查询字符串传递给服务器,只需转到您的Facebook应用程序设置,然后在“验证对话框”选项卡中查找“已验证的引用”部分。