Я занимаюсь разработкой простого приложения Facebook Canvas с использованием последней версии PHP SDK (v4). На первой странице (index.php) отображается всплывающее окно с разрешениями Facebook (оно запрашивает только общедоступный профиль и адрес электронной почты), а затем позволяет пользователю вводить определенные данные через форму. Данные некоторых других пользователей извлекаются из API и сохраняются в переменных сеанса PHP. После отправки формы пользователь попадает на вторую страницу (thanks.php), где переменные сеанса сохраняются в базе данных. Приложение находится в / facebook / электронной почте.
Вот мой код Часть этого была взята из https://www.webniraj.com/2014/05/01/facebook-api-php-sdk-updated-to-v4-0-0/.
<?php
session_start();
require_once( '../funciones.php' );
require_once '../facebook-php-sdk/autoload.php';
use Facebook\HttpClients\FacebookHttpable;
use Facebook\HttpClients\FacebookCurl;
use Facebook\HttpClients\FacebookCurlHttpClient;
use Facebook\Entities\AccessToken;
use Facebook\Entities\SignedRequest;
use Facebook\FacebookSession;
use Facebook\FacebookSignedRequestFromInputHelper;
use Facebook\FacebookCanvasLoginHelper;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookOtherException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\GraphUser;
use Facebook\GraphSessionInfo;
$yaparticipo = false;
$app_id = 'xxxxxxxxxxxxxxx';
$app_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$app_namespace = 'xxxx';
$app_scope = 'email';
// Facebook APP keys
FacebookSession::setDefaultApplication($app_id,$app_secret);
// Helper for fb canvas authentication
$helper = new FacebookCanvasLoginHelper();
// see if $_SESSION exists
if (isset($_SESSION) && isset($_SESSION['fb_token']))
{
// create new fb session from saved fb_token
$session = new FacebookSession($_SESSION['fb_token']);
// validate the fb_token to make sure it's still valid
try
{
$session->validate();
}
catch (Exception $e)
{
// catch any exceptions
$session = null;
}
}
else
{
// no $_SESSION exists
try
{
// create fb session
$session = $helper->getSession();
}
catch(FacebookRequestException $ex)
{
// When Facebook returns an error
//print_r($ex);
$session = null;
}
catch(\Exception $ex)
{
// When validation fails or other local issues
//print_r($ex);
$session = null;
}
}// check if 1 of the 2 methods above set $session
if (isset($session))
{
// Lets save fb_token for later authentication through saved $_SESSION
$_SESSION['fb_token'] = $session->getToken();
$request = new FacebookRequest($session, 'GET', '/me');
// retrieve some data and store it in session variables
?>
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Facebook app</title>
<link href="../css/style.css" rel="stylesheet">
</head>
<body>
<!-- submit email form -->
</body>
</html>
<?php
}
else {
session_destroy();
$oauthJS = "window.top.location = 'https://www.facebook.com/dialog/oauth?client_id=$app_id&redirect_uri=https://apps.facebook.com/$app_namespace/&scope=$app_scope';";
echo "<script>" . $oauthJS . "</script>";
}
?>
По некоторым причинам, в большинстве случаев приложение работает хорошо, но иногда оно застревает в бесконечном цикле, когда должно отображаться всплывающее окно. Холст остается пустым, и браузер, кажется, находится в состоянии «загрузки».
По словам Firebug, перенаправление не работает должным образом. Кроме того, по какой-то причине браузер не может загрузить изображение из домена Facebook. Посмотрите на следующий скриншот:
http://i.stack.imgur.com/tl0G9.jpg
Я нашел много исправлений по всему Интернету (поиск facebook логин php бесконечный цикл), но ничего не работает. Я надеюсь, что кто-то может помочь мне.
Задача ещё не решена.
Других решений пока нет …