如何使用 PHP SDK 将来自 Facebook Canvas 的用户数据插入到使用 SQL 的数据库中
How to Insert User Data from Facebook Canvas using PHP SDK to a Database using SQL
我真的希望这里有人能够帮助我,因为我已经坚持了 3 天,无论我尝试什么似乎都无法让它工作。 :(
我正在制作一个 Facebook canvas 游戏,我正在尝试编写一个 PHP 脚本,当 运行 时,会将玩家的 Facebook 用户 ID 插入我的数据库,以及事件发生时间的时间戳。我希望每次脚本 运行 时都发生这种情况,因此理想情况下,如果玩家激活此脚本说 5 次,那么数据库 table 将记录他们的 ID 5 次以及 5 个不同的时间戳。
我已经尝试按照 Facebook 开发者网站上关于 PHP SDK 和图形 API 的说明进行操作,我在这里找到了很好的答案,我'我已经尝试了所有与我的问题相关的方法,但我仍然无法使其正常工作。我认为我遗漏了一些非常简单的东西,因为我是 Facebook SDK 的初学者,一般来说 PHP。
如果我理解正确,我需要在 PHP 代码中创建一个 GraphAPI 会话,创建一个变量 linked to $facebook->api ('/me'),然后请求我需要的用户数据,然后用一个SQL INSERT语句把数据放入数据库?
我现在拥有的代码会将 post 当前时间输入数据库,因此连接工作正常,但是我尝试连接到 Facebook 是大量在线搜索的结果,但没有成功目前无法正常工作(更不用说它真的很乱!)。我真的需要逐步说明 PHP 将什么代码放在哪里,以便连接到 GraphAPI,获取和 post 玩家的详细信息到数据库。
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 再次感谢你的回复,我一直在尝试使用你给我的代码,但它仍然给我一个错误,我希望你能再次提供帮助。
我在 FacebookSession::setDefaultApplication 旁边输入了我的 AppID 和 Secret。然后在“if(!isset($session)) //Redirect to Login Dialog”的脚本中再次输入我的 AppID 和我游戏的 Facebook URL。
在你定义了 $user_info['AccessToken'] 和 $user_info['UserID] 之后,我写了一个 SQL Insert 语句来将 UserID 放入我的数据库中,因为得到一个 $ “UserID”的变量是我需要的,但是当我 运行 PHP 页面时,它只是重定向到我的游戏主页(到我在上面输入的 URL)。
如果我对代码的理解正确,它之所以这样做是因为它没有 $session/is 未连接到 GraphAPI 上的用户信息并且认为用户未签名在,所以它将他们重定向到我的主页以登录?那是对的吗?
这可能是最佳做法,但我想知道是否包括必要的重定向,因为我正在寻找一个 PHP 脚本,我可以调用它来执行获取用户信息 + 将其插入我的数据库操作在游戏中用户肯定会登录的某个时刻(即,我将从中调用此脚本的页面是用户只有在登录并授予权限后才能访问的页面,所以是必须执行登录 check/initiate FacebookCanvasLoginHelper?)无论如何,它当前将我重定向到我的游戏主页这一事实是否意味着获取用户数据的连接不成功?
真正让我感到困惑的是,我一直在使用 Facebook 的 FriendSmash 示例,他们在其中建立了一个 GraphAPI 连接(我认为使用 Javascript SDK),与那,如果我在页面顶部包含 .js 文件,我就可以在 HTML 中写一些东西,比如:
<div id="welcome"><p>Player's address: <span class="link"></p>
这将给我输出“玩家的地址:(url 到我的(当前登录的)Facebook 帐户)”。但是我不能使用 PHP Insert 语句将“link” 放入我的数据库,也许我希望使用 Javascript SDK 建立的连接中的变量也通过 PHP SDK,这是不可能的,也许我需要使用 PHP SDK 启动一个全新的连接,以便能够使用 PHP?[= 执行插入语句15=]
我不明白为什么你给我的代码总是将我重定向到我的游戏页面,而且似乎没有建立连接,当我已经登录时。我确定我失踪了这里有一些非常基本的东西。 :s
非常感谢您对此的帮助! :)
既然你很接近,我就post我用什么。请务必阅读文档以确保您知道发生了什么。另外,利用 Facebook 提供的自动加载器。
<?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('APP_ID','APP_SECRET');
$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 'APP_ID'; ?>&redirect_uri=<?php echo 'https://apps.facebook.com/my_app/'; ?>";
</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();
?>
我真的希望这里有人能够帮助我,因为我已经坚持了 3 天,无论我尝试什么似乎都无法让它工作。 :(
我正在制作一个 Facebook canvas 游戏,我正在尝试编写一个 PHP 脚本,当 运行 时,会将玩家的 Facebook 用户 ID 插入我的数据库,以及事件发生时间的时间戳。我希望每次脚本 运行 时都发生这种情况,因此理想情况下,如果玩家激活此脚本说 5 次,那么数据库 table 将记录他们的 ID 5 次以及 5 个不同的时间戳。
我已经尝试按照 Facebook 开发者网站上关于 PHP SDK 和图形 API 的说明进行操作,我在这里找到了很好的答案,我'我已经尝试了所有与我的问题相关的方法,但我仍然无法使其正常工作。我认为我遗漏了一些非常简单的东西,因为我是 Facebook SDK 的初学者,一般来说 PHP。
如果我理解正确,我需要在 PHP 代码中创建一个 GraphAPI 会话,创建一个变量 linked to $facebook->api ('/me'),然后请求我需要的用户数据,然后用一个SQL INSERT语句把数据放入数据库?
我现在拥有的代码会将 post 当前时间输入数据库,因此连接工作正常,但是我尝试连接到 Facebook 是大量在线搜索的结果,但没有成功目前无法正常工作(更不用说它真的很乱!)。我真的需要逐步说明 PHP 将什么代码放在哪里,以便连接到 GraphAPI,获取和 post 玩家的详细信息到数据库。
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 再次感谢你的回复,我一直在尝试使用你给我的代码,但它仍然给我一个错误,我希望你能再次提供帮助。
我在 FacebookSession::setDefaultApplication 旁边输入了我的 AppID 和 Secret。然后在“if(!isset($session)) //Redirect to Login Dialog”的脚本中再次输入我的 AppID 和我游戏的 Facebook URL。
在你定义了 $user_info['AccessToken'] 和 $user_info['UserID] 之后,我写了一个 SQL Insert 语句来将 UserID 放入我的数据库中,因为得到一个 $ “UserID”的变量是我需要的,但是当我 运行 PHP 页面时,它只是重定向到我的游戏主页(到我在上面输入的 URL)。
如果我对代码的理解正确,它之所以这样做是因为它没有 $session/is 未连接到 GraphAPI 上的用户信息并且认为用户未签名在,所以它将他们重定向到我的主页以登录?那是对的吗?
这可能是最佳做法,但我想知道是否包括必要的重定向,因为我正在寻找一个 PHP 脚本,我可以调用它来执行获取用户信息 + 将其插入我的数据库操作在游戏中用户肯定会登录的某个时刻(即,我将从中调用此脚本的页面是用户只有在登录并授予权限后才能访问的页面,所以是必须执行登录 check/initiate FacebookCanvasLoginHelper?)无论如何,它当前将我重定向到我的游戏主页这一事实是否意味着获取用户数据的连接不成功?
真正让我感到困惑的是,我一直在使用 Facebook 的 FriendSmash 示例,他们在其中建立了一个 GraphAPI 连接(我认为使用 Javascript SDK),与那,如果我在页面顶部包含 .js 文件,我就可以在 HTML 中写一些东西,比如:
<div id="welcome"><p>Player's address: <span class="link"></p>
这将给我输出“玩家的地址:(url 到我的(当前登录的)Facebook 帐户)”。但是我不能使用 PHP Insert 语句将“link” 放入我的数据库,也许我希望使用 Javascript SDK 建立的连接中的变量也通过 PHP SDK,这是不可能的,也许我需要使用 PHP SDK 启动一个全新的连接,以便能够使用 PHP?[= 执行插入语句15=]
我不明白为什么你给我的代码总是将我重定向到我的游戏页面,而且似乎没有建立连接,当我已经登录时。我确定我失踪了这里有一些非常基本的东西。 :s 非常感谢您对此的帮助! :)
既然你很接近,我就post我用什么。请务必阅读文档以确保您知道发生了什么。另外,利用 Facebook 提供的自动加载器。
<?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('APP_ID','APP_SECRET');
$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 'APP_ID'; ?>&redirect_uri=<?php echo 'https://apps.facebook.com/my_app/'; ?>";
</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();
?>