Php facebook$facebook->;getSignedRequest();错误

Php facebook$facebook->;getSignedRequest();错误,php,facebook,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 e

我正试图将此脚本添加到我在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";
?>

当从Facebook调用签名请求时,Facebook会将其发送到您的页面

因此:

  • facebook php sdk的版本是什么
  • 检查web服务器中的访问日志和错误日志
  • 你有什么遗漏吗

    • 不确定这里出了什么问题,但这里有一个基本页面,它将在上面工作。 确保最新版本的facebook.php和base_facebook.php位于同一目录中。您可以在此处找到sdk: Allso记得把你的应用程序id和密码放在你使用所有111111的地方

      <?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>
      
      
      无电报
      window.fbAsyninit=函数(){
      FB.Canvas.setSize();
      }
      

      如果您想成为此应用程序的粉丝,请单击“like”

      知识产权是一种权利,是一种精英的权利,是劳动和财富的暂时性权利。但是,在最低限度上,我们需要一个实验室来进行日常工作。两人或两人在一个无教区的房间里互相指责。除偶尔因疏忽而死亡外,不得因疏忽而导致动物死亡

      FB.init({ appId:'111111111111111', 状态:正确, 曲奇:是的, xfbml:对 });

      我不久前也遇到了类似的问题-解决方案是为tab或/和canvas页面指定完整的url以接收签名请求


      示例:如果您的画布(或页面选项卡)URL不是最后一个URL,并且由于Facebook只发布一次已签名的请求,所以重定向到其他URL,则使用时,

      $\u请求['signed\u REQUEST']
      的isntead可以为空。重定向时,已发布的值将丢失


      如果您对重定向有一些控制权,那么将
      ?signed\u request=$\u request['signed\u request']
      添加到重定向的URL(您可能还需要传递其他自定义GET参数)

      不幸的是,我也遇到了同样的问题。 经过数小时的努力,我终于用完全相同的设置创建了一个新的应用程序。我把我代码中的密钥和秘密更新为新的,瞧,从第一次尝试开始,它就像一个符咒一样运行着


      肯定是Facebook的问题。也许重置应用程序ID和密码也能起作用,但我并没有先尝试

      print\r($signed\u request)
      显示了什么?
      print\r($u request)
      显示了什么?我编辑了这篇文章。这就是我所得到的,而不是muchI可能已经找到了解决方案(我也添加了这个问题!),见我的答案。现在已经测试过了,我也收到了一个签名请求,即使我没有登录facebook。呜呼!为了让您知道我的案例,我不得不使用$like\u status=$signed\u request[“page”]->liked。。。。不知道为什么我有一个数组/对象??
      $facebook->getSignedRequest()为您执行此操作。如果它不起作用,这可能也不会起作用。不幸的是,我不知道Facebook现在强制使用https是否有问题。在我这方面,我将重定向回http。这就是您丢失已签名请求的原因。您的重定向应该是(您可能需要对其进行URL编码)。我添加了一个答案来解释这一点。嗯
      
      <?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>