0

我为这个问题搜索了很多,并没有找到这个问题的特定解决方案。我见过很多例子和所谓的解决方案,但没有一个有效。最重要的是,我正在观看 phpacademy 的视频并完全按照视频输入。

在有人将此标记为重复之前,我唯一的问题是

这是因为我在本地机器上测试这个吗?因为我的设置和视频之间的唯一区别是教程是实时托管的,我正在本地机器上测试它。

如果是这种情况?如何在我的本地机器上测试 PHP facebook SDK?

这是我的完整代码这是我的主控制器

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Fbapp extends MX_Controller {


    function __construct() {
        $this->load->library('fbconnect');
        parent::__construct();
    }
    function index() {


        echo "<a href='" . base_url() . "fbapp/gotofb'>Go To Facebook</a>";
    }

    function gotofb(){

        $data = array(
            'redirect_uri' => base_url() . "fbapp/redirected",
            'scope' => "email,photo_upload"
        );
      $url =  $this->fbconnect->getLoginUrl($data);

     redirect($url);
    }

    function redirected(){
        $user_id= $this->fbconnect->getUser();
       echo $user_id;

    }
}

这是我命名为“fbconnect.php”的库文件,包括库中的 sdk 文件并包含在库中,并且我在配置中创建了一个 facebook.php,其中存储了我已加载为 $config 的 appId 和秘密。

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');


require_once(APPPATH . 'libraries/facebook/src/facebook.php');
class Fbconnect extends Facebook{

    public $user = null;

    function __construct() {
        $ci =& get_instance();

        $ci->load->config("facebook", true);
        $config = $ci->config->item('facebook');

        parent::__construct($config);
    }

}

步骤: 1.我访问我的网址。我点击链接。2.它让我进入facebook的登录页面。我登录。3. 它将我重定向到重定向 uri 并打印 0。

注意:我正在使用 codeigniter 进行开发。提前致谢。任何帮助都非常感谢!

4

3 回答 3

0

嗨@developernaren 尝试在您的库中使用以下代码:

<?php
    if (!defined('BASEPATH')) exit('No direct script access allowed');

include(APPPATH.'libraries/facebook/src/facebook.php');

class Fb_connect extends Facebook {

    //declare protected variables
    protected $user     = NULL;
    protected $user_id  = FALSE;
            protected $friends      = NULL;

            //constructor method.
    public function __construct()
    {
                $CI = & get_instance();
                $CI->config->load("facebook",TRUE);
                $config = $CI->config->item('facebook');
                parent::__construct($config);
                $this->user_id = $this->getUser();
                if ($this->user_id) {
                    log_message('Info','Userid is fetched!');
                    try {
                        $this->user = $this->api('/me');
                        $this->friends = $this->api('/me/friends');
                    } catch (FacebookApiException $e) {
                        error_log($e);
                    }
                }
    }
            //Use this function to fetch the fb_uid. Function call: $this->fb_connect->user_id();
            public function user_id()
            {
                if(!empty($this->user_id))
                    return $this->user_id;
                else
                    return FALSE;
            }
          //Use this function to fetch the user details from fb. Function call: $this->fb_connect->user();
            public function user()
            {
                if(!empty($this->user))
                    return $this->user;
                else
                    return NULL;
            }}
于 2013-03-12T07:25:39.500 回答
0

我之前遇到过同样的问题,经过几天的搜索,如果您确定所有配置,我会通过两种方式解决它......我认为您必须尝试解决方案:1-将您的应用程序托管在网络托管服务器上并尝试使用域你会得到。2-使用 javascript sdk 获取 access_token 然后将其传递给 php skd,如下所示:

              window.fbAsyncInit = function() {
            FB.init({
              appId      : 'appId', // App ID
              channelUrl : 'channel.html', // Channel File
              status     : true, // check login status
              cookie     : true, // enable cookies to allow the server to access the session
              xfbml      : true  // parse XFBML
            });
            // Additional init code here

            FB.Event.subscribe('auth.login', function(response) {
            var accessToken = response.authResponse.accessToken;
            window.location.href = "http://page_to_read_process_the _request?"accessToken="+accessToken;
         });

在php中你只应该这样做:

$facebook->setAccessToken($accessToken);
$facebook->getUser();

如果这解决了您的问题:请不要忘记投票:D

于 2013-03-12T08:25:47.597 回答
0

您可以尝试为本地机器创建某种测试环境。

您需要了解 Facebook 如何将数据发送到您的应用程序,然后才能创建您的环境。

  1. Facebook 正在向您的页面发送请求(通过 POST),而您的页面正在接收此数据,您需要接受数据并对其进行处理。

  2. 尝试创建一个在线应用程序(我使用的是 PHP,所以我会以这种方式编写)和 var_dump 签名请求。

  3. 在 var_dump 之后,您可以看到从 Facebook 发送的签名请求。

  4. 创建带有输入字段的 PHP 文件,您可以在其中放置本地应用程序,以及将数据发布到输入页面的按钮。在表单中,您将隐藏名为“signed_request”的输入,其中包含步骤 2 中的数据。

  5. 将数据发送到页面后,页面将处理签名请求,就像它应该在线处理一样。

我知道如何制作它是一个漫长的过程,但是一旦完成,您将拥有测试环境,以供将来所有其他应用程序使用。

另外,请尝试使用几种情况创建多个表单:

  1. Facebook 页面标签不喜欢
  2. Facebook页面标签喜欢
  3. 带有已接受权限框的 Facebook 页面选项卡
  4. ETC...
于 2013-03-12T23:33:48.567 回答