Facebook画布教程缺少什么吗?

时间:2011-09-23 20:29:03

标签: canvas facebook-apps

  

可能重复:
  Why do I get an undefined index for signed_request in my facebook app?

我在常规SO上发布了一个非常相似的问题,但后来找到了facebook SO。

如果我从facebook canvas tutorial 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"]);
     } 
 ?>

如果永远不会调用$ auth_url,我怎么能得到signed_request?或许我不懂PHP。它会创建$ auth_url但永远不会获取它,因此永远不会填充$ signed_request。我做错了什么?

编辑:这是因为我很愚蠢,并没有通过apps.facebook.com访问它,而是转到http://mydomain.com ......

3 个答案:

答案 0 :(得分:0)

关键位在这里:

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

这会创建一个脚本元素,指示浏览器在用户会话为空时加载auth_url。

答案 1 :(得分:0)

你确定你的浏览器没有阻止“top.location.href”javascript调用吗?尝试回显/写入$ auth_url进行进一步检查。如果您可以向我们展示它正在重新调整的“$ auth_url”,那将会/可能有所帮助:)

答案 2 :(得分:0)

'$ auth_url'仅用于重定向用户,以防他/她未授予您的应用程序权限。

'$ signed_request'是facebook发送的加密数据,变量'$ data'包含作为关联数组解密的所有数据。

你不需要关心'$ signed_request'你真正需要的'$ data'变量,它包含你可能需要的用户信息。