Facebook PHP SDK v5
Facebook PHP SDK v5
FacebookPHPSDKv5.xacompleteguide!|BenMarshall
Development (Https://Benmarshall.Me/Category/Development/)
41 Comments (Https://Benmarshall.Me/Facebook-Php-Sdk/#Comments)
(https://benmarshall.me/facebook-php-sdk/)
enable one-click
registrations & logins, gain access to user photos, timelines and even publish to profiles.
Update (April 29, 2015): Facebook PHP SDK 5.x? What happened to 4.1 you ask? The Facebook PHP SDK
will start following SemVer starting with v5.0 (https://github.com/facebook/facebook-php-sdkv4/issues/411#issuecomment-97556280). Before the decision to adopt SemVer, the official Facebook
PHP SDK was going to be released as v4.1. But now v4.1 is just an alias to v5.0.0. So any references to 4.1
can be safely aliased to v5.0.0. For more information, see F8 2015 Facebook Developer Conference and
the new PHP SDK (https://www.phproundtable.com/episode/f8-2015-facebook-developer-conferenceand-the-new-php-sdk).
https://benmarshall.me/facebookphpsdk/
1/26
1/12/2015
FacebookPHPSDKv5.xacompleteguide!|BenMarshall
IMPORTANT: Dont forget to set the AppDomains when creating an app to where your code is hosted.
PRO TIP: During development, its a good idea to create a Test App
(https://developers.facebook.com/docs/apps/test-apps/). This is especially useful when working on a
local environment. Test Apps have their own App ID, App Secret and settings. This allows you to set App
Domains to your local environment without affecting production.
"require":{
https://benmarshall.me/facebookphpsdk/
2/26
1/12/2015
FacebookPHPSDKv5.xacompleteguide!|BenMarshall
2
3
4
5
"require":{
"facebook/phpsdkv4":"~5.0@dev"
}
}
Versioning Note: As of writing, v5 is still in development so you need to use the @dev minimum-stability
flag. In addition, the Facebook PHP SDK v4 did not follow Semantic Versioning (http://semver.org/)
(SemVer). The version schema for the SDK in v4 was 4.MAJOR.MINOR|PATCH . Thats why you would have to
use 3 version numbers with the ~ operator like ~4.0.0 . But starting with v5, the SDK follows SemVer so
we just use 2 version numbers: ~5.0 .
In Terminal from the projects docroot (same directory we placed the composer.json file), run:
composerupdate
1
2
3
4
5
6
7
8
9
$composerupdate
Loadingcomposerrepositorieswithpackageinformation
Updatingdependencies(includingrequiredev)
Installingfacebook/phpsdkv4(devmastercde1d8b)
Cloningcde1d8b9f32fc375a8748838eaac1b6d4f48fa5e
facebook/phpsdkv4suggestsinstallingguzzlehttp/guzzle(AllowsforimplementationoftheGuzzleHTT
Writinglockfile
Generatingautoloadfiles
Manual Installation
You dont use Composer? You should! But if youre needing a quick-and-dirty install, download the zip from
GitHub (https://github.com/facebook/facebook-php-sdk-v4/archive/master.zip) and extract the files on your
computer somewhere.
Move the folder located at src/Facebook to the location in your web app where you store 3rd-party vendor files.
You can also rename the folder to facebookphpsdkv5 or something.
1
2
3
4
5
6
<?php
//Passsessiondataover.
session_start();
//Includetherequireddependencies.
require_once('vendor/autoload.php');
https://benmarshall.me/facebookphpsdk/
3/26
1/12/2015
FacebookPHPSDKv5.xacompleteguide!|BenMarshall
require_once('vendor/autoload.php');
If you manually installed the SDK and assuming you moved and renamed the src/Facebook folder to
/my/app/third_party/facebookphpsdkv5 , in your web frameworks bootstrap scripts or at the top of your PHP
1
2
3
4
5
//Passsessiondataover.
session_start();
//Includetherequireddependencies.
require(__DIR__.'/third_party/facebookphpsdkv5/autoload.php');
Important: Dont forget to pass the server session data over if you havent already. This keeps the users
information stored so the permissions persist as the user navigates your app.
To initialize the SDK, we need to pass the app_id , app_secret and default_graph_version .
1
2
3
4
5
6
//InitializetheFacebookPHPSDKv5.
$fb=newFacebook\Facebook([
'app_id'=>'{appid}',
'app_secret'=>'{appsecret}',
'default_graph_version'=>'v2.3',
]);
At first glance you might think v5 also has one big base class that does all the things. In reality, v5 consists of
many, many different classes and the Facebook\Facebook just ties them all together.
Be sure to change the {appid} and {appsecret} to your Facebook credentials provided when you created the
app.
1
2
3
4
5
6
7
8
9
#FacebookPHPSDKv5:CheckLoginStatusExample
//Chooseyourappcontexthelper
$helper=$fb>getCanvasHelper();
//$helper=$fb>getPageTabHelper();
//$helper=$fb>getJavaScriptHelper();
//Grabthesignedrequestentity
$sr=$helper>getSignedRequest();
https://benmarshall.me/facebookphpsdk/
4/26
1/12/2015
FacebookPHPSDKv5.xacompleteguide!|BenMarshall
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$sr=$helper>getSignedRequest();
//GettheuserIDifsignedrequestexists
$user=$sr?$sr>getUserId():null;
if($user){
try{
//Gettheaccesstoken
$accessToken=$helper>getAccessToken();
}catch(Facebook\Exceptions\FacebookSDKException$e){
//TherewasanerrorcommunicatingwithGraph
echo$e>getMessage();
exit;
}
}
1
2
3
$fb=newFacebook\Facebook([/*...*/]);
$helper=$fb>getRedirectLoginHelper();
Once you get an instance of the FacebookRedirectLoginHelper , you can use it to generate an authorization URL to
start an OAuth 2.0 flow. You pass to this method, the redirect URL (where the user is redirected to after approving
or denying the app authorization request) and an array of permissions you want to ask them for.
1
2
3
4
5
6
7
$helper=$fb>getRedirectLoginHelper();
$permissions=['email','user_posts'];//optional
$callback='http://example.com/app.php(http://example.com/app.php)';
$loginUrl=$helper>getLoginUrl($callback,$permissions);
echo'<ahref="'.$loginUrl.'">LoginwithFacebook!</a>';
Now you can grab an instance of the FacebookRedirectLoginHelper again and call the getAccessToken() method
once the user has clicked on the login link.
$accessToken=$helper>getAccessToken();
This one-liner is fine if all goes well, but there are a number of possible scenarios our callback script should
account for.
1. If all goes well, $accessToken will be an instance of the AccessToken entity. (See The AccessToken Entity
section below.)
2. If there was a problem communicating with the Graph API, the getAccessToken() method will throw a
FacebookSDKException , so youll want to wrap that bad boy with a try/catch to catch the exception and
5/26
1/12/2015
FacebookPHPSDKv5.xacompleteguide!|BenMarshall
3. If the user denied the request, $accessToken will be null . What this really means is that the SDK could not
find an OAuth code in the GET params. Keep reading.
4. If there is no code param, there should be a number of error_* params that describe why theres no code.
The error params can be accessed using the following methods: getError() , getErrorCode() ,
getErrorReason() , and getErrorDescription() . We can assume that if getError() returns null , then all
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
$fb=newFacebook\Facebook([/*...*/]);
$helper=$fb>getRedirectLoginHelper();
try{
$accessToken=$helper>getAccessToken();
}catch(Facebook\Exceptions\FacebookSDKException$e){
//TherewasanerrorcommunicatingwithGraph
echo$e>getMessage();
exit;
}
if(isset($accessToken)){
//Userauthenticatedyourapp!
//Savetheaccesstokentoasessionandredirect
$_SESSION['facebook_access_token']=(string)$accessToken;
//Logthemintoyourwebframeworkhere...
echo'Successfullyloggedin!';
exit;
}elseif($helper>getError()){
//Theuserdeniedtherequest
//Youcouldlogthisdata...
var_dump($helper>getError());
var_dump($helper>getErrorCode());
var_dump($helper>getErrorReason());
var_dump($helper>getErrorDescription());
//Youcoulddisplayamessagetotheuser
//beingalllike,"What?Youdon'tlikeme?"
exit;
}
//Ifthey'vegottenthisfar,theyshouldn'tbehere
http_response_code(400);
exit;
This will output a link users can click on to login through Facebook. When clicked, the use will be redirect to
Facebook to log in if not already. Once logged it, users will be directed back to our redirect URL with an
appended code parameter that well use to retrieve and store the access token. If all worked, you should see
Facebook PHP SDK v4: Access Tokens from Facebook Login (manual redirect)
6/26
1/12/2015
FacebookPHPSDKv5.xacompleteguide!|BenMarshall
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$fb=newFacebook\Facebook([/*...*/]);
$helper=$fb>getCanvasHelper();
try{
$accessToken=$helper>getAccessToken();
}catch(Facebook\Exceptions\FacebookSDKException$e){
//TherewasanerrorcommunicatingwithGraph
//Ortherewasaproblemvalidatingthesignedrequest
echo$e>getMessage();
exit;
}
if($accessToken){
echo'Successfullyloggedin!';
}
Page tabs and canvas apps are virtually identical but there are a few important differences. One added feature of
a Page tab app is that the signed request will contain additional data about the parent page.
There is a FacebookPageTabHelper that helps you interface with the components available to your Page tab. The
page tab helper extends from the FacebookCanvasHelper so all the methods are adopted as well. And there are a
few additional methods you get when using the FacebookPageTabHelper .
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$fb=newFacebook\Facebook([/*...*/]);
$helper=$fb>getPageTabHelper();
//Returnsinfoabouttheparentpage
$pageData=$helper>getPageData();
//Abooleanofwhetherornotthe
//authenticateduserisanadmin
//oftheparentpage
$isAdmin=$helper>isAdmin();
//TheIDoftheparentpage
$pageId=$helper>getPageId();
1
2
3
4
5
FB.init({
appId:'{appid}',
cookie:true,
version:'v2.3'
});
If an access token exists in the signed request that was set by the JavaScript SDK, it can be obtained using the
FacebookJavaScriptHelper . An instance of this helper can be generated from the Facebook super service by using
7/26
1/12/2015
FacebookPHPSDKv5.xacompleteguide!|BenMarshall
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$fb=newFacebook\Facebook([/*...*/]);
$helper=$fb>getJavaScriptHelper();
try{
$accessToken=$helper>getAccessToken();
}catch(Facebook\Exceptions\FacebookSDKException$e){
//TherewasanerrorcommunicatingwithGraph
//Ortherewasaproblemvalidatingthesignedrequest
echo$e>getMessage();
exit;
}
if($accessToken){
echo'Successfullyloggedin!';
}
1
2
3
//Thesestatementsareequivalent
echo(string)$accessToken;
echo$accessToken>getValue();
Having AccessToken entities gives us some more power when handling access tokens. For example, you can do a
strict check to ensure that you definitely have an access token.
1
2
3
if($accessTokeninstanceofFacebook\Authentication\AccessToken){
//Loggedin.
}
You can also typehint function & method arguments that take an access token.
1
2
3
function(Facebook\Authentication\AccessToken$token){
//...
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//ReturnsexpirationasaDateTimeentity
$expiresAt=$accessToken>getExpiresAt();
//Returnsboolean
$expired=$accessToken>isExpired();
//Returnsboolean
$isLong=$accessToken>isLongLived();
//Returnsboolean
$isAppToken=$accessToken>isAppAccessToken();
//Returnstheappsecretproofasastring
//ThisisusedtosignrequeststotheGraphAPI
//AllrequestsmadeusingthePHPSDKare
//signedautomaticallyforyou
$proof=$accessToken>getAppSecretProof('{appsecret}');
https://benmarshall.me/facebookphpsdk/
8/26
1/12/2015
FacebookPHPSDKv5.xacompleteguide!|BenMarshall
You can exchange a short-lived access token for a long-lived access token by generating an instance of the
OAuth2Client() by using the getOAuth2Client() method on the Facebook super service.
1
2
3
4
5
6
7
8
9
10
$cilent=$fb>getOAuth2Client();
try{
//Returnsalonglivedaccesstoken
$accessToken=$cilent>getLongLivedAccessToken('{shortlivedtoken}');
}catch(Facebook\Exceptions\FacebookSDKException$e){
//TherewasanerrorcommunicatingwithGraph
echo$e>getMessage();
exit;
}
The OAuth2Client has a number of cool features like a debugToken() method that returns an
AccessTokenMetadata entity with information about the access token to be used to validate against or debug.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
try{
$metaData=$cilent>debugToken('{accesstoken}');
}catch(Facebook\Exceptions\FacebookSDKException$e){
//TherewasanerrorcommunicatingwithGraph
echo$e>getMessage();
exit;
}
var_dump($metaData>getAppId());
var_dump($metaData>getApplication());
var_dump($metaData>isError());
var_dump($metaData>getIssuedAt());
//TheseallthrowaFacebookSDKException
$metaData>validateAppId('{appid}');
$metaData>validateUserId('{userid}');
$metaData>validateExpiration();
Application Permissions
Its important that you think about what permissions youll need for your site before your users start using it. If you
ever need to update them, users will have to re-authorize the app. Once you have a list of permissions, pass them
to the getLoginURL method as an array:
1
2
3
4
5
6
7
8
9
//Requestedpermissionsoptional
$permissions=array(
'email',
'user_location',
'user_birthday'
);
//GetloginURL
$loginUrl=$helper>getLoginUrl($callback,$permissions);
If no permissions are provided, itll use Facebooks default public_profile permission. Heres a list of some
common permissions:
User
permission
Description
https://benmarshall.me/facebookphpsdk/
9/26
1/12/2015
FacebookPHPSDKv5.xacompleteguide!|BenMarshall
id
name
first_name
public_profile
last_name
link
gender
locale
age_range
Provides access to the users primary email address in the email property on the user
object.
user_location
user_birthday
1
2
3
4
5
6
7
8
//GETrequest.
$res=$fb>get('/me','{accesstoken}');
//POSTrequest.
$res=$fb>post('/me/feed',$data,'{accesstoken}');
//DELETErequest.
$res=$fb>delete('/123',$data,'{accesstoken}');
If you dont want to have to send in '{accesstoken}' with every method call in v5, you can use the
setDefaultAccessToken() method.
1
2
3
4
5
6
$fb>setDefaultAccessToken('{accesstoken}');
#Thesewillfallbacktothedefaultaccesstoken
$res=$fb>get('/me');
$res=$fb>post('/me/feed',$data);
$res=$fb>delete('/123',$data);
The responses from the get() , post() & delete() methods return a FacebookResponse entity which is an object
that represents an HTTP response from the Graph API.
If all you want is a plain-old PHP array, you call the getDecodedBody() method on the FacebookResponse entity.
1
2
3
//Responseexample.
$res=$fb>get('/me');
var_dump($res>getDecodedBody());
https://benmarshall.me/facebookphpsdk/
10/26
1/12/2015
FacebookPHPSDKv5.xacompleteguide!|BenMarshall
4
5
6
var_dump($res>getDecodedBody());
//array(10){...
v5 can return the response data as a collection which can be really handy for performing actions on the response
data.
I wont get into too much detail with this, but the collections come in the form of GraphObjects and they can be
obtained from the FacebookResponse entity using the getGraphObject() method.
1
2
3
4
5
6
7
8
9
10
11
12
//Responseexample.
$res=$fb>get('/me');
$node=$res>getGraphObject();
var_dump($node>getProperty('id'));
//string(3)"123"
//Functionalstyle!
$node>map(function($value,$key){
//...
});
Handling Exceptions
Sometimes the Graph API will return an error response. Sad face. In v5 a FacebookSDKException will be thrown if
something goes wrong.
1
2
3
4
5
6
try{
$res=$fb>get('/123');
}catch(Facebook\Exceptions\FacebookSDKException$e){
echo$e>getMessage();
exit;
}
There are more than just the base FacebookSDKException in v5 but I wont get into too much detail on the other
types of exceptions. But know that the other exceptions extend from FacebookSDKException so you can be
assured that whenever you catch FacebookSDKException , youre catching any of the extended exceptions as well.
The FacebookSDKException is not limited to error responses from the Graph API. There are other instances when a
base FacebookSDKException might be thrown in v5. Some examples include a signed request fails to validate, a file
you want to upload cannot be found and so on.
https://benmarshall.me/facebookphpsdk/
11/26
1/12/2015
FacebookPHPSDKv5.xacompleteguide!|BenMarshall
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
#FacebookPHPSDKv5:OneClickRegistration&LoginExample
//Passsessiondatatoscript(onlyifnotalreadyincludedinyourapp).
session_start();
//IncludetherequiredComposerdependencies.
require_once('vendor/autoload.php');
//InitializetheFacebookPHPSDKv5.
$fb=newFacebook\Facebook([
'app_id'=>'{appid}',
'app_secret'=>'{appsecret}',
'default_graph_version'=>'v2.3',
]);
//Checkiftheuserisloggedin.
$helper=$fb>getRedirectLoginHelper();
try{
$accessToken=$helper>getAccessToken();
}catch(Facebook\Exceptions\FacebookSDKException$e){
//TherewasanerrorcommunicatingwithGraph
echo$e>getMessage();
exit;
}
if(isset($accessToken)){
//Userauthenticatedyourapp!
//Savetheaccesstokentoasessionandredirect
$_SESSION['facebook_access_token']=(string)$accessToken;
//Registerorlogtheuserin...
exit;
}
elseif($helper>getError()){
//Theuserdeniedtherequest
//Youcouldlogthisdata...
var_dump($helper>getError());
var_dump($helper>getErrorCode());
var_dump($helper>getErrorReason());
var_dump($helper>getErrorDescription());
//Youcoulddisplayamessagetotheuser
//beingalllike,"What?Youdon'tlikeme?"
exit;
}
//Ifthey'vegottenthisfar,theyshouldn'tbehere
http_response_code(400);
exit;
$fb=newFacebook\Facebook([/**/]);
https://benmarshall.me/facebookphpsdk/
12/26
1/12/2015
FacebookPHPSDKv5.xacompleteguide!|BenMarshall
1
2
3
4
5
6
$fb=newFacebook\Facebook([/**/]);
$helper=$fb>getRedirectLoginHelper();
$logoutUrl=$helper>getLogoutUrl('{accesstoken}','http://example.com(http://example.com)
echo'<ahref="'.$logoutUrl.'">LogoutofFacebook!</a>';
Where http://example.com is the URL the user should be redirected to after logging out.
<?php
#FacebookPHPSDKv5:RetrieveUser'sProfileInformation
$res=$fb>get('/me');
$user=$res>getGraphObject();
echo$user>getProperty('id');
//123
Note: Fields that arent set to public must be be requested with an access token with the relevant
Extended Profile permissions.
For more information and a full list of possible fields returned, see
https://developers.facebook.com/docs/graph-api/reference/v2.0/user
(https://developers.facebook.com/docs/graph-api/reference/v2.0/user).
<?php
#FacebookPHPSDKv5:GetUser'sProfilePicture
$res=$fb>get('/me/picture?type=large&redirect=false');
$picture=$res>getGraphObject();
var_dump($picture);
You can use a list of modifiers to specify the type (e.g. square, small, normal, large), size and whether to send as a
JSON array or output as an image. See a list of the available modifiers below:
Modifiers
Name
Description
Type
bool
13/26
1/12/2015
FacebookPHPSDKv5.xacompleteguide!|BenMarshall
type
enum{square,small,normal,large}
height
int
and width are both used, the image will be scaled as close
int
For more information and a full list of possible fields returned, see
https://developers.facebook.com/docs/graph-api/reference/v2.3/user/picture
(https://developers.facebook.com/docs/graph-api/reference/v2.3/user/picture)
1
2
3
4
5
6
7
8
9
10
<?php
#FacebookPHPSDKv5:PublishtoUser'sTimeline
$res=$fb>post('/me/feed',array(
'message'=>'Ilovearticlesonbenmarshall.me!'
));
$post=$res>getGraphObject();
var_dump($post);
For more information and a full list of additional parameters, see https://developers.facebook.com/docs/graphapi/reference/v2.3/user/feed (https://developers.facebook.com/docs/graph-api/reference/v2.3/user/feed)
1
2
3
4
5
6
7
8
<?php
#FacebookPHPSDKv5:RetrieveUser'sTimeline
$res=$fb>get('/me/feed');
$feed=$res>getGraphObject();
var_dump($feed);
There are other edges which provide filtered versions of this edge:
/{userid}/links shows only the links that were published by this person.
/{userid}/posts shows only the posts that were published by this person.
/{userid}/statuses shows only the status update posts that were published by this person.
/{userid}/tagged shows only the posts that this person was tagged in.
https://benmarshall.me/facebookphpsdk/
14/26
1/12/2015
FacebookPHPSDKv5.xacompleteguide!|BenMarshall
All of these derivative edges share the exact same reading structure, however /feed should be used for all
publishing purposes.
For more information, see https://developers.facebook.com/docs/graph-api/reference/v2.3/user/feed
(https://developers.facebook.com/docs/graph-api/reference/v2.3/user/feed).
Upload a File
1
2
3
4
5
6
7
8
$fb=newFacebook\Facebook([/*...*/]);
$data=[
'source'=>$fb>fileToUpload('/path/to/photo.jpg'),
'message'=>'Myfile!',
];
$response=$fb>post('/me/photos',$data,'{accesstoken}');
Upload a Video
If youre uploading a video, that requires using the videoToUpload() method.
1
2
3
4
5
6
7
8
9
$fb=newFacebook\Facebook([/*...*/]);
$data=[
'source'=>$fb>videoToUpload('/path/to/video.mp4'),
'title'=>'Myvideo',
'description'=>'Myamazingvideo!',
];
$response=$fb>post('/me/videos',$data,'{accesstoken}');
Additional Resources
For more information on the Graph API, see https://developers.facebook.com/docs/graph-api/reference/v2.0/
(https://developers.facebook.com/docs/graph-api/reference/v2.0/). This has a full list of root nodes of the
Graph API, with links to the reference docs for each.
RELATED: Facebook SDK PHP v4 & CodeIgniter (http://www.benmarshall.me/facebook-sdk-php-v4codeigniter/)
If you have any questions or problems, post your comments below. Ill try to keep this post updated with the
latest information and add more API calls later on. Have fun coding!
(https://benmarshall.me/facebook-php-sdk/?share=google-plus-1&nb=1)
(https://benmarshall.me/facebook-php-sdk/?share=facebook&nb=1)6
(https://benmarshall.me/facebook-php-sdk/?share=reddit&nb=1)
(https://benmarshall.me/facebook-php-sdk/?share=twitter&nb=1)
(https://benmarshall.me/facebook-php-sdk/?share=linkedin&nb=1)
More
Related
https://benmarshall.me/facebookphpsdk/
15/26
1/12/2015
FacebookPHPSDKv5.xacompleteguide!|BenMarshall
Facebook SDK PHP v4 & CodeIgniter
(https://benmarshall.me/facebook-sdkphp-v4-codeigniter/)
June 5, 2014
In "Development"
a complete guide!)
(https://plus.google.com/share?url=https://benmarshall.me/facebook-php-sdk/)
et%3D%22_blank%22%3EFacebook+SDK+PHP+library+%28v4%29%3C%2Fa%3E+with+easy+to+follow+examples+to+get+your+site+integrated+quickly.)
41 Comments
You can post comments in this post.
1 year ago
Reply (https://benmarshall.me/facebook-php-sdk/?replytocom=317#respond)
1 year ago
Reply (https://benmarshall.me/facebook-php-sdk/?
replytocom=419#respond)
Can you be more specific? Just tested the code with the latest and provided downloadable demo files for an
example. Try those out and see if it works for you.
https://benmarshall.me/facebookphpsdk/
16/26
1/12/2015
FacebookPHPSDKv5.xacompleteguide!|BenMarshall
1 year ago
Reply (https://benmarshall.me/facebook-
php-sdk/?replytocom=1634#respond)
1 year ago
Reply
(https://benmarshall.me/facebook-php-sdk/?replytocom=1641#respond)
Problem solved. I was wrong with trying to get token without facebook
response
Meteor (Http://Facebook.Com)
1 year ago
Reply
(https://benmarshall.me/facebook-php-sdk/?replytocom=1642#respond)
there is problem with session, after 2 hours it gets destroyed , and i dont know how to renew it, it will then will throw error about
authorization shit all the time, refresh wont help, only deleting cookies helped
btw i tried the example with codeigniter, not without
Gaucan (Http://Gravatar.Com/Gaucan)
1 year ago
Reply (https://benmarshall.me/facebook-php-sdk/?
replytocom=440#respond)
Session are handled by the server. If you want the session to last longer, see
http://stackoverflow.com/questions/520237/how-do-i-expire-a-php-session-after-30-minutes
(http://stackoverflow.com/questions/520237/how-do-i-expire-a-php-session-after-30-minutes).
Ben Marshall (Http://Www.Benmarshall.Me)
1 year ago
Reply (https://benmarshall.me/facebook-
php-sdk/?replytocom=1635#respond)
https://benmarshall.me/facebookphpsdk/
17/26
1/12/2015
FacebookPHPSDKv5.xacompleteguide!|BenMarshall
1 year ago
Reply (https://benmarshall.me/facebook-php-sdk/?replytocom=444#respond)
PHP message: PHP Fatal error: Cannot use Facebook\FacebookCurl as FacebookCurl because the name is already in use
RahulG (Http://Gravatar.Com/Papa10)
1 year ago
Reply (https://benmarshall.me/facebook-php-sdk/?
replytocom=765#respond)
Looks like youre redefining a namespace. Download the demo files to see an example.
Ben Marshall (Http://Www.Benmarshall.Me)
1 year ago
Reply (https://benmarshall.me/facebook-
php-sdk/?replytocom=1633#respond)
1 year ago
Reply (https://benmarshall.me/facebook-php-sdk/?replytocom=771#respond)
This tutorial has really helped me a lot as I get started with the Facebook SDK for PHP. Many thanks for posting it!
I was wondering what is the purpose of the code on line 76? At this point in your code it seems that you have already verified a
session. It doesnt seem necessary to call FacebookSession() again or am I missing something?
Thanks again for a great tutorial
Matt
1 year ago
Reply (https://benmarshall.me/facebook-php-sdk/?replytocom=862#respond)
https://benmarshall.me/facebookphpsdk/
18/26
1/12/2015
FacebookPHPSDKv5.xacompleteguide!|BenMarshall
That code was a little outdated. Just updated the post and example code with the latest. Should make more
sense now.
Ben Marshall (Http://Www.Benmarshall.Me)
1 year ago
Reply (https://benmarshall.me/facebook-
php-sdk/?replytocom=1636#respond)
i follow ur code but it didnt generates the access token can u tell me where did i made mistake
Nisha
1 year ago
Reply (https://benmarshall.me/facebook-php-sdk/?replytocom=1562#respond)
Gonna need a little more info than that to help. Can you provide me the code or error youre seeing?
Ben Marshall (Http://Www.Benmarshall.Me)
10 months ago
Reply
(https://benmarshall.me/facebook-php-sdk/?replytocom=1761#respond)
Can you please explain , where do we have to put (starting with session_start() ) those coding in our hosting file. do we have to
add with our index.php?
Keeran (Http://Www.Findaproperty.Lk)
1 year ago
Reply (https://benmarshall.me/facebook-php-sdk/?
replytocom=1623#respond)
It just depends on the app youre building. The important part is it needs to included before any output is
sent.
Ben Marshall (Http://Www.Benmarshall.Me)
1 year ago
Reply (https://benmarshall.me/facebook-
php-sdk/?replytocom=1632#respond)
https://benmarshall.me/facebookphpsdk/
19/26
1/12/2015
FacebookPHPSDKv5.xacompleteguide!|BenMarshall
1 year ago
Reply (https://benmarshall.me/facebook-php-sdk/?
replytocom=1626#respond)
Make sure you set the apps App Domains setting to the domain youll be using the app on (e.g.
localhost.dev). Otherwise, you wont have access to the API.
its a good idea to create a Test App (https://developers.facebook.com/docs/apps/test-apps/).
This is especially useful when working on a local environment. Test Apps have their own App ID,
App Secret and settings. This allows you to set the App Domains setting to your local environment
URL without affecting the production version of your app.
Ben Marshall (Http://Www.Benmarshall.Me)
1 year ago
Reply (https://benmarshall.me/facebook-
php-sdk/?replytocom=1631#respond)
I tried your code, but every time I refresh the canvas page it asks me to login again. If older version of SDK, the user needed to
add the app just once. Do you have any fix for that?
Tony (Http://Google.Com)
1 year ago
Reply (https://benmarshall.me/facebook-php-sdk/?replytocom=1628#respond)
1 year ago
Reply (https://benmarshall.me/facebook-
php-sdk/?replytocom=1630#respond)
https://benmarshall.me/facebookphpsdk/
20/26
1/12/2015
FacebookPHPSDKv5.xacompleteguide!|BenMarshall
1 year ago
Reply (https://benmarshall.me/facebook-php-sdk/?replytocom=1661#respond)
Hi,
I copied your code from demo, and created fb applicaiton and security token and app id were taken, But i m getting this error
Parse error: syntax error, unexpected T_STRING, expecting T_CONSTANT_ENCAPSED_STRING or ( in
C:wampwwwfacebookindex.php on line 23
Nirksa
1 year ago
Reply (https://benmarshall.me/facebook-php-sdk/?replytocom=1673#respond)
Sounds like youve got some malformed code. Take a look at the example and compare to what youve got.
Ben Marshall (Http://Www.Benmarshall.Me)
10 months ago
Reply
(https://benmarshall.me/facebook-php-sdk/?replytocom=1762#respond)
Im new at developing Facebook. Im trying to use your example on my server but it back with Parse error for use
FacebookFacebookRequest; why?
Tuareg
1 year ago
Reply (https://benmarshall.me/facebook-php-sdk/?replytocom=1681#respond)
1 year ago
Reply (https://benmarshall.me/facebook-
php-sdk/?replytocom=1697#respond)
https://benmarshall.me/facebookphpsdk/
21/26
1/12/2015
FacebookPHPSDKv5.xacompleteguide!|BenMarshall
1 year ago
Reply (https://benmarshall.me/facebook-php-sdk/?replytocom=1704#respond)
Ive updated the post to provide more details that should answer your question. Let me know if you run into
any problems.
Ben Marshall (Http://Www.Benmarshall.Me)
10 months ago
Reply
(https://benmarshall.me/facebook-php-sdk/?replytocom=1750#respond)
Hello, i am a bit confused about some things if you could explain me i would appreciated a lot.
I am trying to create a facebook app with both platforms of Facebook Canvas and Page tab.
I am currently working at Page tab. I want to use the php sdk to create the Auth dialog.
Lets say my file for the facebook session and stuff is hosted at demo.myhost.gr/app1/fbmain.php
So my App Domains is demo.myhost.gr
If i have understood correctly i am supposed to use the FacebookRedirectLoginHelper($redirect_uri)
and $redirect_uri must be https://demo.myhost.gr/app1/fbmain.php (https://demo.myhost.gr/app1/fbmain.php)
This means that when the user will click at $loginUrl he will see the auth dialog and then he will leave Facebook and go at
$redirect_uri.
So i must save the session and have a redirection back to my Facebook Page and app.
Am i correct till here?
Also the Log out (' . $logoutURL . ') it gives me a white page inside the Faceboook Tab, with no auth dialog.
Dimitris Sarmis
1 year ago
Reply (https://benmarshall.me/facebook-php-sdk/?replytocom=1705#respond)
Yes, thats basically it. Ive updated the post with more details on the whole process which should help. Let
me know if you still run into troubles.
Ben Marshall (Http://Www.Benmarshall.Me)
10 months ago
Reply
(https://benmarshall.me/facebook-php-sdk/?replytocom=1749#respond)
https://benmarshall.me/facebookphpsdk/
22/26
1/12/2015
FacebookPHPSDKv5.xacompleteguide!|BenMarshall
This is GREAT post man ^^. Saved my day. However is there any way to get cleaner url after login. Mine is little messy with
code and state parameter.
Boshigt
1 year ago
Reply (https://benmarshall.me/facebook-php-sdk/?replytocom=1706#respond)
12 months ago
Reply (https://benmarshall.me/facebook-php-sdk/?replytocom=1722#respond)
Yup.
Ben Marshall (Http://Www.Benmarshall.Me)
12 months ago
Reply
(https://benmarshall.me/facebook-php-sdk/?replytocom=1723#respond)
oke thank you, but when i upload to hosting and i try access i get error liki this
Fatal error: Cannot access protected property
Facebook\FacebookSDKException::$message in
/home/u648397598/public_html/facebook/index.php on line 62
can you fix this problem?
Dany (Http://Wijayantodeni.Com)
11 months ago
Reply
(https://benmarshall.me/facebook-php-sdk/?replytocom=1725#respond)
I used this article to get me going and everything is working like Id expect. Was wondering if anyone here knows how to get it
to work with WordPress?
Everything works like I want except I lose the session when I navigate the site after I login.
I tried to use the init action hook but get this error from the SDK Session not active, could not load state.
https://benmarshall.me/facebookphpsdk/
23/26
1/12/2015
FacebookPHPSDKv5.xacompleteguide!|BenMarshall
10 months ago
Reply (https://benmarshall.me/facebook-php-sdk/?replytocom=1753#respond)
10 months ago
Reply
(https://benmarshall.me/facebook-php-sdk/?replytocom=1754#respond)
Ive followed your steps, looked at the demo files, etc but I keep running into a problem where my session isnt ever set, so all
I get is the Login URL every time. Could this have something to do with the new changes Facebook is making ?
I feel like I had this exact problem before the last time I set up FB integration last year, and no one has examples that work like
theyre supposed to. Just to be clear, the redirect_uri should take me back this same file location, right?
Jason Seabaugh (Http://Www.Jasonseabaugh.Com)
8 months ago
Reply (https://benmarshall.me/facebook-php-
sdk/?replytocom=1787#respond)
Ive updated the tutorial with the new v5 (4.1) features. Also provided some more example that should help
you out. Let me know if you still run into problems.
Ben Marshall (Http://Www.Benmarshall.Me)
6 months ago
Reply
(https://benmarshall.me/facebook-php-sdk/?replytocom=1812#respond)
Awesome content.
Joel (Http://Www.Benmarshall.Me/)
7 months ago
Reply (https://benmarshall.me/facebook-php-sdk/?
replytocom=1800#respond)
https://benmarshall.me/facebookphpsdk/
24/26
1/12/2015
FacebookPHPSDKv5.xacompleteguide!|BenMarshall
7 months ago
Reply (https://benmarshall.me/facebook-php-sdk/?
replytocom=1806#respond)
Looks like the access token may be incorrect or your session data isnt getting passed over. Can I see the
code youre using?
Ben Marshall (Http://Www.Benmarshall.Me)
6 months ago
Reply
(https://benmarshall.me/facebook-php-sdk/?replytocom=1813#respond)
Leave a Reply
Enteryourcommenthere...
Ben Marshall
Red Bull Addict | Self-Proclaimed Grill Master | Entrepreneur | Workaholic | Front End Engineer | SEO/SM Strategist | Web Developer |
Blogger
Need an array of user roles in your #Drupal8 (https://twitter.com/search?q=%23Drupal8&src=hash) site? Say hello to
user_role_names(). via @bmarshall0511 (https://twitter.com/bmarshall0511) #drupal (https://twitter.com/search?
q=%23drupal&src=hash) #d8 (https://twitter.com/search?q=%23d8&src=hash) https://t.co/UlKj2lAJxc (https://t.co/UlKj2lAJxc)
November 19, 2015
https://benmarshall.me/facebookphpsdk/
25/26
1/12/2015
FacebookPHPSDKv5.xacompleteguide!|BenMarshall
https://benmarshall.me/facebookphpsdk/
26/26