为什么我在facebook应用程序中获得了signed_request的未定义索引?

时间:2011-09-23 20:06:39

标签: facebook

我正在尝试在Facebook上学习测试应用。我正在使用facebook开发人员page中的代码:

 <?php 

     $app_id = "YOUR_APP_ID";

     $canvas_page = "YOUR_CANVAS_PAGE_URL";

     $auth_url = "http://www.facebook.com/dialog/oauth?client_id=" 
            . $app_id . "&redirect_uri=" . urlencode($canvas_page);

     $signed_request = $_REQUEST["signed_request"];

     list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

     $data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);

     if (empty($data["user_id"])) {
            echo("<script> top.location.href='" . $auth_url . "'</script>");
     } else {
            echo ("Welcome User: " . $data["user_id"]);
     } 
 ?>

当我跑步时,我得到:

Message: Undefined index: signed_request

我在Codeigniter中使用它。我不知道这是否重要..当我运行它时,它使用$ auth_url并返回:

http://mydomain.com/responsepage?code=biglongstring

所以我知道我要去facebook并得到一些东西......

在该字符串中,返回的url是一个名为“code”的变量。我试图更改$ _REQUEST对象以查找“代码”,但它给出了相同的错误。

它会在我短暂显示错误后将其重定向回我的响应页面,因为“user_id”元素为空。它是空的,因为在发回的网址中没有signed_request。

我做错了什么?它应该去facebook,要求我允许应用程序,显示user_id。由于某种原因,signed_request不存在。

谢谢。

编辑:我再看一遍。它实际上在哪里使用该URL?

编辑:如果我手动使用$ auth_url,将其粘贴到浏览器的地址,它会重定向回我的响应页面,没有任何问题。当然,我没有看到名为signed_request的变量,只是“代码”所以我不知道发生了什么。

2 个答案:

答案 0 :(得分:2)

好的,似乎您在$canvas_page变量错误中使用 Canvas URL 。您需要使用 Canvas Page ,例如:http://apps.facebook.com/appnamespace

这样,您的应用就会在中打开 iframe,Facebook就能向您发送signed_request

答案 1 :(得分:0)

确保在settings-&gt; advanced-&gt;迁移中启用了“canvasquest for Canvas” 然后你应该通过$ _POST获得signed_request。