facebook $ facebook-> getSignedRequest();错误

时间:2011-05-26 18:39:33

标签: php facebook

我正在尝试将此脚本添加到我在facebook上的iframe应用程序中,但它似乎无法正常工作:

    $signed_request = $facebook->getSignedRequest();
$like_status = $signed_request["page"]["liked"];
// If a fan is on your page
if ($like_status) {
echo 123;
} else {
// If a non-fan is on your page
echo 456;
}

我正在放置正确的应用程序ID和密钥,我正在以正确的方式调用facebook.php。我没有得到错误或警告,只是脚本不起作用。

$like_status不会返回任何内容

脚本改变了吗?还有另一个版本吗? 感谢

修改。更多代码:

<?php
require 'facebook.php';
$app_id = "11549508592";
$app_secret = "d898cb58b16f2aaaaaaaaaaaaaa";
$facebook = new Facebook(array(
    'appId' => $app_id,
    'secret' => $app_secret,
    'cookie' => true
));
$signed_request = $facebook->getSignedRequest();
$like_status = $signed_request["page"]["liked"];
echo "<br>like status = $like_status";
?>

6 个答案:

答案 0 :(得分:10)

前一段时间我遇到过类似的问题 - 解决方法是为tab或/和canvas页面指定完整的url以接收签名请求。

示例:使用http://myapp.com/myapp/index.php,而不是http://myapp.com/myapp/

答案 1 :(得分:3)

Facebook从Facebook调用已签名的请求到您的页面。

所以:

$signed_request = $_REQUEST["signed_request"];
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);

答案 2 :(得分:2)

如果您的画布(或页面标签)URL不是最终的URL,则

$_REQUEST['signed_request']可能为空,并重定向到其他某个URL,因为Facebook仅将签名的请求发布一次。重定向时,发布的值将丢失。

如果您可以控制重定向,则将?signed_request=$_REQUEST['signed_request']添加到重定向的网址(您可能还需要传递其他自定义GET参数)

答案 3 :(得分:0)

  • facebook php sdk的版本是什么?
  • 检查Web服务器中的access_log和error_log
  • 你有些失踪“;” ?

答案 4 :(得分:0)

不确定这里有什么问题,但这是一个可以使用的基本页面。 确保最新版本的facebook.php和base_facebook.php位于同一目录中。你可以在这里找到sdk:https://github.com/facebook/php-sdk 还记得在你所有的111111111111111的所有内容中输入您的app id和秘密

<?php 

require 'facebook.php';

$app_id ="11111111111111111";
$app_secret = "11111111111111111111111111";

$facebook = new facebook(array(
    'appId' => $app_id,
    'secret' => $app_secret,
    'cookie' => true
));

$signed_request = $facebook->getSignedRequest();
$page_id = $signed_request["page"]["id"];
$page_admin = $signed_request["page"]["admin"];
$like_status = $signed_request["page"]["liked"];
$country = $signed_request["user"]["country"];
$locale = $signed_request["user"]["locale"];



?>

<!DOCTYPE html>  
<html lang="en">  
    <head>
    <meta charset="utf-8"/>
    <title>untiteled</title>


    <script type="text/javascript">
        window.fbAsyncInit = function() {
            FB.Canvas.setSize(); 
        }

    </script>


</head>
<body>
    <div class="wrapper">

        <?php if(!$like_status):?> 
            <div class="likearrow"><div><div></div></div></div>
            <p id="like">Click "<b>like</b>" if you want to become a fan of this app</p>
        <?php endif; ?>

        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>

    </div>

<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
FB.init({
    appId: '111111111111111111111',
    status: true,
    cookie: true,
    xfbml: true

});
</script>       
</body>

答案 5 :(得分:0)

不幸的是,我遇到了同样的问题。 经过数小时和数小时试图解决它,我终于创建了一个新的应用程序,完全相同的设置。我将代码中的密钥和密码更新为新的密码和密码voilà - 它的运行就像第一次尝试时的魅力一样。

绝对是Facebook的问题。也许重置应用程序ID和秘密也可以工作,但我没有先尝试。