Facebook PHP SDK 4.0登录

Facebook PHP SDK 4.0登录,php,facebook,facebook-graph-api,Php,Facebook,Facebook Graph Api,我正在尝试使用他们新的PHPSDK4.0登录Facebook,该软件适用于我的网站。我几乎一字不差地遵循了他们的要点,但仍然无法让测试页面正常工作。当我尝试登录时,我会被重定向到以下表单的url: https://www.facebook.com/v2.0/dialog/oauth?client_id={some number}&redirect_uri{localhost%2F%7E{MyName}%2F{my site}}&state=08d94ec4670256aa2b2c

我正在尝试使用他们新的PHPSDK4.0登录Facebook,该软件适用于我的网站。我几乎一字不差地遵循了他们的要点,但仍然无法让测试页面正常工作。当我尝试登录时,我会被重定向到以下表单的url:

https://www.facebook.com/v2.0/dialog/oauth?client_id={some number}&redirect_uri{localhost%2F%7E{MyName}%2F{my site}}&state=08d94ec4670256aa2b2c586781590766&sdk=php-sdk-4.0.0&scope=
我已经在我的Facebook开发者页面上填写了相同的url,这是我正在尝试测试的代码:

<?php

require_once( 'Facebook/FacebookSession.php' );
require_once( 'Facebook/FacebookRedirectLoginHelper.php' );
require_once( 'Facebook/FacebookRequest.php' );
require_once( 'Facebook/FacebookResponse.php' );
require_once( 'Facebook/FacebookSDKException.php' );
require_once( 'Facebook/FacebookRequestException.php' );
require_once( 'Facebook/FacebookAuthorizationException.php' );
require_once( 'Facebook/GraphObject.php' );

use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;

// start session
session_start();

// init app with app id and secret
FacebookSession::setDefaultApplication( '{My app ID}','{My app secret}' );

// login helper with redirect_uri
$helper = new FacebookRedirectLoginHelper('localhost/~{My Name}/{My Project}' );

try {
  $session = $helper->getSessionFromRedirect();
} catch( FacebookRequestException $ex ) {
  // When Facebook returns an error
} catch( Exception $ex ) {
  // When validation fails or other local issues
}

// see if we have a session
if ( isset( $session ) ) {
  // graph api request for user data
  $request = new FacebookRequest( $session, 'GET', '/me' );
  $response = $request->execute();
  // get response
  $graphObject = $response->getGraphObject();

  // print data
  echo '<pre>' . print_r( $graphObject, 1 ) . '</pre>';
} else {
  // show login url
  echo '<a href="' . $helper->getLoginUrl() . '">Login</a>';
}
我也有同样的问题。
您需要先在Facebook应用程序设置中设置域URL和站点URL。转到此页面以更改您的设置:


我在这里一步一步地分享:

如中所述,您需要PHP5.4+。

这是您正在使用的代码吗

// if you include this file you don't need to use composer
require_once('facebook/autoload.php');

// use these
use Facebook\FacebookSession; 
use Facebook\FacebookRedirectLoginHelper; 

// initiate the session
FacebookSession::setDefaultApplication('[YOUR ID]', '[YOUR SECRET]');

// use the helper 
$helper = new FacebookRedirectLoginHelper('[YOUR REDIRECT URL]');
// get a loginurl
$loginUrl = $helper->getLoginUrl();


echo "<a href='".$loginUrl."'>Link here</a>";

您将从Facebook重定向,因此这里的参数需要是一个可从Internet访问的URL。

您不必包含php文件。Facebook希望您使用composer来管理所需内容

然而。。。。它们为您提供了一种解决方法:包括
autoload.php
,并保留它们为您提供的文件结构,以便于实现。为方便起见,将SDK中的所有文件放入名为
facebook
的文件夹中,这样您就有一个子文件夹名为
src
,其中还有一个子文件夹名为
facebook

然后SDK创建一个链接,您的用户可以单击该链接来授权访问您的应用程序

如果您正在测试,您需要不断从您的facebook个人资料中删除该应用程序,以便每次获得注册窗口(
设置
右上角下拉列表,然后从2014年8月起在左侧显示
应用程序
),否则它将直接跳转到您指定的重定向页面,并显示为没有任何效果

else {
    $helper = new FacebookRedirectLoginHelper('https://apps.facebook.com/yourappname/');
    $permissions = array(
        scope =>'publish_actions',
                'email',
                'user_location',
                'user_birthday'
    );

    // Get login URL
    $auth_url = $helper->getLoginUrl($permissions);
    //$auth_url = $helper->getLoginUrl(array('email'));
    echo "<script>window.top.location.href='".$auth_url."'</script>";
//如果包含此文件,则不需要使用composer
只需_一次('facebook/autoload.php');
//使用这些
使用Facebook\FacebookSession;
使用Facebook\FacebookRedirectLoginHelper;
//启动会话
FacebookSession::setDefaultApplication(“[YOUR ID]”、“[YOUR SECRET]”);
//使用助手
$helper=newfacebookRedirectLoginHelper(“[您的重定向URL]”);
//找一个后勤人员
$loginUrl=$helper->getLoginUrl();
回声“;
检查注意事项:

  • 检查您是否已在facebook上设置了测试应用程序
  • 检查域是否与您正在使用的域匹配
  • 检查将用于处理响应的重定向页面的完整url
    脚本不完整。如果未设置会话,则必须在其中写入else部分。权限请求在此处进入角色

    $loginUrl = $helper->getLoginUrl();
    
    else{
    $helper=新的FacebookRedirectLoginHelper('https://apps.facebook.com/yourappname/');
    $permissions=array(
    范围=>'publish_actions',
    “电子邮件”,
    “用户位置”,
    “用户生日”
    );
    //获取登录URL
    $auth_url=$helper->getLoginUrl($permissions);
    //$auth_url=$helper->getLoginUrl(数组('email');
    echo“window.top.location.href=”$auth_url。“”;
    
    我在尝试执行时遇到问题

    session_start();
    
    解决办法是:

    $helper = new FacebookRedirectLoginHelper($redirect_url);
    

    $helper = new FacebookRedirectLoginHelper('localhost/~{My Name}/{My Project}');
    
    在上面@DigitalVisual的回答中

    $helper = new FacebookRedirectLoginHelper('http://example.com/help.php');
    
    使用类似于:

    必须使用完整的URL

    $helper = new FacebookRedirectLoginHelper('http://example.com/help.php');