2011-09-23 100 views
2

我正在尝试一个测试应用程序在Facebook上学习。我使用此代码从Facebook开发人员page为什么我在Facebook应用程序中获得signed_request的未定义索引?

<?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 

我在笨用这个。我不知道,如果该事项。当我运行这个它使用$ auth_url并返回:

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

,所以我知道我得到Facebook和得到的东西......

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

由于“user_id”元素为空,它会在短暂显示错误后将其重定向回我的响应页面。它是空的,因为signed_request在返回的url中不存在。

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

谢谢。

编辑:我正在看这个。它究竟从哪里出去并使用该URL?

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

+0

您是否使用此代码*内* Facebook的iframe或外部独立的网站? – ifaour

+0

我将它创建为一个应用程序。所以我认为这意味着我使用iFrame。我没有选择我自己的网站的东西。 – johnny

+0

所以你被重定向到* outside * Facebook? – ifaour

回答

2

好吧,似乎您使用的是画布URL$canvas_page变量,它是错误。您需要使用画布页面这是一样的东西:http://apps.facebook.com/appnamespace

这样,你的应用程序将打开的iframe和Facebook将能向您发送signed_request

+0

哦,废话我很笨。我要去我的网页,而不是apps.facebook.com/my_app。谢谢。 – johnny

+0

不客气! – ifaour

+0

为什么我会得到API错误说明:指定的URL不属于应用程序?我为$ canvas_page变量放置了http://apps.facebook.com/mynamespace。 – johnny

0

请确保您有在设置 - >高级 - >迁移中启用“signed_request for Canvas” 然后,您应该通过$ _POST获取signed_request。

相关问题