我已经搜索了很多这个问题,并没有找到解决这个问题的具体方法。我见过很多例子和所谓的解决方案,但没有一个能够奏效。 最重要的是,我正在通过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和secret。
<?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.i访问我的网址。点击链接。 2.让我到facebook的登录页面。我登录 3.它将我重定向到重定向uri并打印0。
注意:我正在开发codeigniter。 提前致谢。 任何帮助都非常赞赏!!
答案 0 :(得分: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;
}}
答案 1 :(得分:0)
之前我遇到过同样的问题,经过几天的搜索,如果你确定所有的配置,我会用两种方式解决它...我认为你必须尝试解决方案: 1-在web托管服务器上托管您的应用程序,并使用您将获得的域名进行尝试。 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
答案 2 :(得分:0)
您可以尝试为本地计算机创建某种测试环境。
您需要了解Facebook如何向您的应用程序发送数据,然后您可以创建您的环境。
Facebook正在向您的页面发送请求(通过POST),并且您的页面正在接收此数据,您需要接受数据并进行处理。
尝试创建一个在线应用程序(我正在使用PHP,因此我将以这种方式编写),并且var_dump已签名请求。
在var_dump之后,您可以看到从Facebook发送的已签名请求。
使用输入字段创建PHP文件,您可以在其中放置本地应用程序,并将POST数据按钮输入到输入页面。在表单中,您将使用来自步骤2的数据隐藏名为“signed_request”的输入。
将数据发送到您的页面后,页面将处理已签名的请求,就像它应该在线处理一样。
我知道这是一个漫长的过程,但是一旦你这样做,你将拥有测试环境,将来所有其他应用程序。
另外,尝试使用以下几种情况创建多个表单: