Я действительно надеюсь, что кто-то здесь сможет мне помочь, так как я застрял на этом в течение 3 дней и, похоже, не могу заставить его работать, независимо от того, что я пытаюсь. :(
Я делаю игру на холсте Facebook и пытаюсь написать PHP-скрипт, который при запуске будет вставлять идентификатор пользователя Facebook игрока в мою базу данных вместе с отметкой времени, когда произошло событие. Я хочу, чтобы это происходило каждый раз, когда скрипт запускается, поэтому в идеале, если игрок активировал этот скрипт, скажем, 5 раз, тогда таблица базы данных запишет его идентификатор 5 раз вместе с 5 разными временными метками.
Я пытался следовать инструкциям на сайте разработчиков Facebook в отношении PHP SDK и Graph API, и я нашел здесь отличные ответы, я пробовал все, что я видел, которые относятся к моей проблеме. но я до сих пор не смог заставить его работать. Я думаю, что упускаю что-то очень простое, так как я новичок в Facebook SDK и PHP в целом.
Если я правильно понимаю, мне нужно создать сеанс GraphAPI в коде PHP, создать переменную, связанную с $facebook->api('/me'), затем запросить любые пользовательские данные, которые мне нужны, а затем использовать оператор SQL INSERT для занести данные в базу?
Код, который у меня есть прямо сейчас, будет публиковать текущее время в базе данных, поэтому соединение работает нормально, однако моя попытка подключения к Facebook является результатом большого поиска в Интернете и в настоящее время не работает (не говоря уже о том, что это действительно беспорядочный!). Мне очень нужна пошаговая инструкция, какой PHP-код куда вставить, чтобы подключиться к GraphAPI, получить и разместить данные игрока в базе данных.
PHP-код (обновлен с тех пор, как я впервые задал вопрос):
<?php
session_start();
require_once '/facebook-php-sdk-v4-4.0-dev/autoload.php';
use Facebook\Entities\AccessToken;
use Facebook\Entities\SignedRequest;
use Facebook\HttpClients\FacebookCurl;
use Facebook\HttpClients\FacebookCurlHttpClient;
use Facebook\HttpClients\FacebookHttpable;
use Facebook\HttpClients\FacebookStream;
use Facebook\HttpClients\FacebookStreamHttpClient;
use Facebook\FacebookAuthorizationException;
use Facebook\FacebookCanvasLoginHelper;
use Facebook\FacebookClientException;
use Facebook\FacebookJavaScriptLoginHelper;
use Facebook\FacebookOtherException;
use Facebook\FacebookPageTabHelper;
use Facebook\FacebookPermissionException;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookRequestException;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookServerException;
use Facebook\FacebookSession;
use Facebook\FacebookSignedRequestFromInputHelper;
use Facebook\FacebookThrottleException;
use Facebook\GraphAlbum;
use Facebook\GraphLocation;
use Facebook\GraphObject;
use Facebook\GraphPage;
use Facebook\GraphSessionInfo;
use Facebook\GraphUser;
use Facebook\GraphUserPage;
FacebookSession::setDefaultApplication('MYAPPID','MYAPPSECRET');
$helper=new FacebookCanvasLoginHelper();
try
{
$session=$helper->getSession();
}
catch(FacebookRequestException $ex)
{
//Handle Error
}
catch(\Exception $ex)
{
//Handle Error
}
if(!isset($session)) //Redirect to Login Dialog
{ ?>
<script>
top.location.href="https://www.facebook.com/dialog/oauth?client_id=<?php echo 'MYAPPID'; ?>&redirect_uri=<?php echo 'https://apps.facebook.com/MYAPPADDRESS'; ?>";
</script> <?php
exit();
}
$facebook_data=(new FacebookRequest($session,'GET','/me'))->execute()->getGraphObject(GraphUser::className());
$user_info['AccessToken']=$session->getToken();
$user_info['UserID']=$facebook_data->getId();
//Database:
$servername = "localhost";
$username = "MYUSERNAME";
$password = "MYPASSWORD";
$dbname = "MYDATABASE";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$sql = "INSERT INTO table1 (facebook_id, entry_timestamp) VALUES ({$user_info['UserID']}, '".date("Y-m-d H:i:s")."')";
if (mysqli_query($conn, $sql)) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);
?>
Я использую phpMyAdmin (WAMP) на локальном хосте, моя версия php — 5.6.5, MySQL 5.6.12 и Apache 2.4.12.
Я должен упомянуть, что у меня есть "FacebookCanvasLoginHelper();" включен в этот код, однако этот PHP-скрипт будет запускаться только в конце игры, когда игрок уже вошел в систему и предоставил все необходимые разрешения, поэтому я не уверен, что необходимо выполнять эту проверку здесь?
Любая помощь в этом будет очень признательна! :)
Обновлять:
Привет, @Phillip, еще раз спасибо за ваш ответ, я пытался работать с кодом, который вы мне дали, но он все еще дает мне ошибку, я надеюсь, что вы снова поможете.
Я ввел свой AppID и секрет рядом с FacebookSession::setDefaultApplication. И снова ввел свой AppID и URL-адрес моей игры на Facebook в скрипте для «if(!isset($session)) //Перенаправить в диалоговое окно входа».
После того, как вы определили $user_info['AccessToken'] и $user_info['UserID], я написал оператор SQL Insert, чтобы поместить UserID в мою базу данных, потому что мне нужно получить переменную $ для «UserID», однако, когда я запускаю страницу PHP , он просто перенаправляет на домашнюю страницу моей игры (на URL-адрес, который я ввел выше).
Если я правильно понимаю код, он делает это, потому что у него нет $session/не подключен к информации о пользователе в GraphAPI и думает, что пользователь не вошел в систему, поэтому он перенаправляет их на мою домашнюю страницу для подписи. в? Это правильно?
Это, вероятно, лучшая практика, но мне было интересно включить необходимое перенаправление, так как я ищу PHP-скрипт, который я могу вызвать для выполнения действий по получению информации о пользователе + вставки его в мою базу данных в тот момент в игре, когда пользователь обязательно войдет в систему (т. е. страница, с которой я буду вызывать этот скрипт, — это страница, к которой пользователь сможет получить доступ только после того, как они вошли в систему и предоставили разрешения, поэтому необходимо выполнить проверку/инициацию входа в систему FacebookCanvasLoginHelper?) В любом случае, означает ли, что тот факт, что он в настоящее время перенаправляет меня на домашнюю страницу моей игры, не удалось установить соединение для получения данных пользователя?
Что меня действительно смущает, так это то, что я работал с примером Facebook FriendSmash, и они установили в нем соединение GraphAPI (я думаю, используя Javascript SDK), с этим, если я включу файл .js вверху страницу, я могу написать что-то в HTML, например:
<div id="welcome"><p>Player's address: <span class="link"></p>
И это даст мне вывод «Адрес игрока: (URL-адрес моей (в настоящее время) учетной записи facebook)». Но я не могу использовать оператор вставки PHP, чтобы поместить «ссылку» в мою базу данных, возможно, я ожидаю, что переменные из соединения, созданного Javascript SDK, также будут использоваться PHP SDK, и это невозможно, может быть, мне нужно инициировать совершенно новое соединение с помощью PHP SDK, чтобы иметь возможность выполнять оператор Insert с PHP?
Я не понимаю, почему код, который вы мне дали, продолжает перенаправлять меня на страницу моей игры и, кажется, не устанавливает соединение, когда я уже вошел в систему. Я уверен, что здесь не хватает чего-то очень простого. :s Я очень ценю вашу помощь в этом! :)
on
? Также обновите свой код, чтобы отразить ваши изменения. - person Phillip   schedule 16.03.2015index.php
. Вызовы AJAX должны аутентифицироваться другим способом. - person Phillip   schedule 17.03.2015