Я сделал веб -сайт, на котором вы можете ввести «цитаты» (короткие сообщения), а затем после сохранения цитаты на веб -сайте (читать; тоже MySQL DB) вы можете поделиться цитатой с Facebook, чтобы быть в состоянии выиграть. />
[*]User opens my site, PHP gets a login URL from the Facebook PHP API/SDK
[*]PHP reads & memorizes the 'state' URL variable from the login URL from the above step (which several sites mention would be a valid way to identify users)
A user saves a quote, I store the state variable from above in the Запись DB об этой цитате, чтобы я мог использовать ее позже, чтобы соответствовать возвращающимся пользователям со сожалением. Wall < /li>
Как только пользователь предоставил указанный доступ, он возвращается к URL -адресу обратного вызова моего сайта (который оказывается таким же, как и «Origin URL» от шага 4) < /li>
PHP на моем сайте обнаруживает переменную в состоянии в возвращаемых переменных URL (? Avatar) В соответствующей записи DB. < /li>
Php продолжает публиковать свою ранее сохраненную цитату на стене Facebook пользователя. Проблема в том, что я просто получаю некоторую длительную «код», получите переменную обратно, а не «состояние», получив переменную, и нигде в документах API или в Stackoverflow или через Google я обнаружил, как изменить его, поэтому я получаю «состояние», чтобы получить переменную снова ...? Я знаю, что это то, для чего переменная «состояния» кажется лучшей, если бы она работала. Мое приложение - это то же самое index.php
Этот код соединен из нескольких примеров, и, по сути, работает, я просто не получаю необходимую переменную состояния обратно. < /p>
Код: Выделить всё
require_once __DIR__ . '/src/Facebook/autoload.php';
session_start();
$fbStateCode = ""; // used to memorize state code
$fbLoginUrl = ""; // user to memorize login URL
// Init the API
// If you go end up testing this, don't forget too change &
$fb = new Facebook\Facebook([
'app_id' => '',
'app_secret' => '',
'default_graph_version' => 'v2.4',
'default_access_token' => isset($_SESSION['facebook_access_token']) ? $_SESSION['facebook_access_token'] : '|'
]);
// login helper
$helper = $fb->getRedirectLoginHelper();
// try get an accesstoken (which we only have if user returned from Facebook after logging in)
try {
$accessToken = $helper->getAccessToken();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
//echo 'Graph returned an error: ' . $e->getMessage(); // When Graph returns an error
} catch(Facebook\Exceptions\FacebookSDKException $e) {
//echo 'Facebook SDK returned an error: ' . $e->getMessage(); // When validation fails or other local issues
}
if (isset($accessToken)) {
// User is logged in!
try {
// Now we look up some details about the user
$response = $fb->get('/me?fields=id,name');
$facebook_user = $response->getGraphUser();
exit; //redirect, or do whatever you want
} catch(Facebook\Exceptions\FacebookResponseException $e) {
//echo 'Graph returned an error: ' . $e->getMessage();
} catch(Facebook\Exceptions\FacebookSDKException $e) {
//echo 'Facebook SDK returned an error: ' . $e->getMessage();
}
// if facebook_user has an id, we assume its a user and continue
if(isset($facebook_user['id'])) {
$avatarUrl = "http://graph.facebook.com/".$facebook_user['id']."/picture";
// THE BELOW 8 LINES HANDLE LOADING A QUOTE FROM DB WITH MATCHING STATE AND SAVING
// ADDITIONAL DATA TOO IT, THE ONLY ISSUE HERE IS THAT $_GET['state'] DOESNT EXIST
// THE REST OF THIS PROCESS HAS ALREADY BEEN TESTED AND PROOFED TO BE WORKING
$curr_quote = Quotes::getQuoteByFbStateCode($_GET['state']);
$curr_quote_data = $curr_quote->getData();
$curr_quote->updateData(array(
"fb_access_token" => $accessToken,
"fb_uid" => $facebook_user['id'],
"fb_avatar_path" => $avatarUrl
));
// Save it
if($curr_quote->save()) { // Success! quote in db was updated
// Now that we are logged in and have matched the returned user with a saved quote, we can post that quote to Facebook
$_SESSION['facebook_access_token'] = (string) $accessToken; // storing the access token for possible use in the FB API init
// This is the data we post to Facebook
$msg_data = array (
'message' => $curr_quote_data['quote']
);
$response = $fb->post('/me/feed',$msg_data,$accessToken); // do the actual post (this, like everything else besides state variable, works)
} else { // Fail! quote in db was NOT updated?!
// handle errors
}
}
} else {
// User is NOT logged in
// So lets build up a login url
$permissions = ['public_profile','publish_actions']; // we want these permissions (note, atm I'm the only tester, so while the app still needs to be reviewed for the 'publish_actions' permission, it works because I own the app and test with same fb account)
$fbLoginUrl = $helper->getLoginUrl('http:///index.php', $permissions); // get the login URL from the API providing callback URL and permissions array
$fbLoginUrlParams = array();
parse_str($fbLoginUrl, $fbLoginUrlParams); // store the URL params in a new array so that we can (read next comment below)
$fbStateCode = $fbLoginUrlParams['state']; // read out and store the state URL variable
}
Подробнее здесь: https://stackoverflow.com/questions/341 ... m-facebook
Мобильная версия