Example #1
0
 /**
  * @return \Facebook\Entities\AccessToken
  * @throws Exception\CodeWasNotProvided
  */
 public function getAccessToken()
 {
     if (!($code = $this->getCode())) {
         throw new Exception\CodeWasNotProvided();
     }
     $accessToken = \Facebook\Entities\AccessToken::requestAccessToken(array('code' => $code, 'redirect_uri' => $this->getSettings()->getRedirect()));
     if ($accessToken) {
         return (string) $accessToken;
     }
     return false;
 }
 /**
  * Returns an AccessToken entity from the signed request.
  *
  * @param FacebookClient $client The Facebook client.
  *
  * @return AccessToken|null
  */
 public function getAccessToken(FacebookClient $client)
 {
     if ($this->signedRequest && $this->signedRequest->hasOAuthData()) {
         $code = $this->signedRequest->get('code');
         $accessToken = $this->signedRequest->get('oauth_token');
         if ($code && !$accessToken) {
             return AccessToken::getAccessTokenFromCode($code, $this->app, $client);
         }
         $expiresAt = $this->signedRequest->get('expires', 0);
         return new AccessToken($accessToken, $expiresAt);
     }
     return null;
 }
 public function connect($accessToken = null)
 {
     if (!$this->token) {
         $accessToken = (string) $accessToken;
     } else {
         $accessToken = $this->token->getAccessToken();
     }
     if (!$accessToken) {
         throw new \Exception('You must provide an access token.');
     }
     $this->app = $this->appService->getApplication(self::RESOURCE_OWNER);
     $config = ['appId' => $this->app->getKey(), 'secret' => $this->app->getSecret(), 'fileUpload' => false, 'allowSignedRequest' => false];
     $facebook = new \Facebook($config);
     $facebook->setAccessToken($accessToken);
     $user = $facebook->getUser();
     try {
         if ($user) {
             return $facebook;
         } elseif ($this->token) {
             // Renew access token.
             FacebookSession::setDefaultApplication($this->app->getKey(), $this->app->getSecret());
             $longLivedAccessToken = new AccessToken($this->token->getAccessToken());
             try {
                 // Get a code from a long-lived access token
                 $code = AccessToken::getCodeFromAccessToken($longLivedAccessToken);
             } catch (FacebookSDKException $e) {
                 throw new ExternalApiException($e->getMessage(), $e->getCode(), $e);
             }
             try {
                 // Get a new long-lived access token from the code
                 $newLongLivedAccessToken = AccessToken::getAccessTokenFromCode($code);
             } catch (FacebookSDKException $e) {
                 throw new ExternalApiException($e->getMessage(), $e->getCode(), $e);
             }
             $accessToken = new AccessToken($newLongLivedAccessToken);
             //                dump($accessToken->getInfo());exit;
             $this->token->setAccessToken($newLongLivedAccessToken);
             $this->tokenService->setToken($this->token);
             // Connect to Facebook REST API again.
             $this->connect();
         }
     } catch (\FacebookApiException $e) {
         $user = null;
     }
 }
 /**
  * Takes a valid code from a login redirect, and returns an AccessToken entity.
  *
  * @param FacebookClient $client The Facebook client.
  * @param string $redirectUrl The redirect URL.
  *
  * @return AccessToken|null
  *
  * @throws FacebookSDKException
  */
 public function getAccessToken(FacebookClient $client, $redirectUrl = null)
 {
     if ($this->isValidRedirect()) {
         $code = $this->getCode();
         $redirectUrl = $redirectUrl ?: $this->getCurrentUri();
         $redirectUrl = $this->getFilteredUri($redirectUrl);
         return AccessToken::getAccessTokenFromCode($code, $this->app, $client, $redirectUrl);
     }
     return null;
 }
 public function testACodeCanBeUsedToObtainAnAccessToken()
 {
     $app = new FacebookApp('123', 'foo_secret');
     $response = m::mock('Facebook\\Entities\\FacebookResponse');
     $response->shouldReceive('getDecodedBody')->once()->andReturn(['access_token' => 'new_long_token', 'expires' => 123, 'machine_id' => 'foo_machine']);
     $client = m::mock('Facebook\\FacebookClient');
     $client->shouldReceive('sendRequest')->with(m::type('Facebook\\Entities\\FacebookRequest'))->once()->andReturn($response);
     $accessTokenFromCode = AccessToken::getAccessTokenFromCode('foo_code', $app, $client);
     $this->assertInstanceOf('Facebook\\Entities\\AccessToken', $accessTokenFromCode);
     $this->assertEquals('new_long_token', (string) $accessTokenFromCode);
     $this->assertEquals('foo_machine', $accessTokenFromCode->getMachineId());
     $this->assertEquals(time() + 123, $accessTokenFromCode->getExpiresAt()->getTimeStamp());
 }
Example #6
0
 /**
  * newSessionAfterValidation - Returns a FacebookSession for a
  *   validated & parsed signed request.
  *
  * @param SignedRequest $signedRequest
  *
  * @return FacebookSession
  */
 protected static function newSessionAfterValidation(SignedRequest $signedRequest)
 {
     $code = $signedRequest->get('code');
     $accessToken = AccessToken::getAccessTokenFromCode($code);
     return new static($accessToken, $signedRequest);
 }
 /**
  * @dataProvider provideAccessTokenExpiration
  */
 public function testIsExpired($expiresAt, $expected)
 {
     $accessToken = new AccessToken('foo', $expiresAt);
     $this->assertEquals($expected, $accessToken->isExpired());
 }
function sohail_do_embed($query)
{
    session_start();
    $query = explode('=', $query[2]);
    $query = explode('.', $query[1]);
    $album_id = $query[1];
    FacebookSession::setDefaultApplication('XXXXXXXXXXXXXX6', '2XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX7');
    $tokenFileName = "./fb-token.txt";
    $result = "";
    $token = null;
    if (file_exists($tokenFileName)) {
        $token = file_get_contents($tokenFileName);
        $lastTokenRefresh = time() - filemtime($tokenFileName);
        if ($lastTokenRefresh > 60 * 60 * 24 * 7) {
            $longLivedAccessToken = new AccessToken($token);
            try {
                // Get a code from a long-lived access token
                $code = AccessToken::getCodeFromAccessToken($longLivedAccessToken);
            } catch (FacebookSDKException $e) {
                $result = 'Error getting code: ' . $e->getMessage();
                unlink($tokenFileName);
            }
            try {
                // Get a new long-lived access token from the code
                $token = AccessToken::getAccessTokenFromCode($code);
                file_put_contents($tokenFileName, $token);
            } catch (FacebookSDKException $e) {
                $result = 'Error getting a new long-lived access token: ' . $e->getMessage();
                unlink($tokenFileName);
            }
        }
    }
    if ($token == null) {
        global $wp;
        $current_url = add_query_arg($wp->query_string, '', home_url($wp->request));
        $helper = new FacebookRedirectLoginHelper($current_url);
        $permissions = array("scope" => 'user_photos');
        try {
            $session = $helper->getSessionFromRedirect();
        } catch (FacebookSDKException $e) {
            $session = null;
        }
        if ($session) {
            $accessToken = $session->getAccessToken();
            $token = $accessToken->extend();
            file_put_contents($tokenFileName, $token);
        } else {
            $result = '<a href="' . $helper->getLoginUrl($permissions) . '">Relier le compte facebook au blog</a>';
        }
    }
    if ($token != null) {
        try {
            $session = new FacebookSession($token);
            $request = new FacebookRequest($session, 'GET', '/' . $album_id . '/photos');
        } catch (FacebookRequestException $e) {
            $result = 'Error getting code: ' . $e->getMessage();
            unlink($tokenFileName);
        }
        $response = $request->execute();
        $graphObject = $response->getGraphObject()->getProperty('data')->asArray();
        $border = 1;
        $result .= '<style type="text/css">
                .grid {
                  background: #EEE;
                  max-width: 1183px;
                  width: 1183px;
                }

                /* clearfix */
                .grid:after {
                  content: \'\';
                  display: block;
                  clear: both;
                }

                .grid-item {
                  border: ' . $border . 'px solid white;
                  float: left;
                }
                </style>';
        $result .= '<div id="grid">';
        $small = 4;
        $height = array(5 => 113, 6 => 226 + $border * 2);
        $width = array(5 => 169, 6 => 338 + $border * 2);
        $i = 0;
        foreach ($graphObject as $photos) {
            $i++;
            $image = $photos->images[3];
            $bigImage = $photos->images[1];
            $size = 6;
            // $rand = rand(0, 100);
            // if($small == 0 && $rand<50){
            //   $small = 3;
            // }
            $image = $photos->images[3];
            //Peut arriver sur certain formats
            if (!$image) {
                $image = $photos->images[1];
            }
            //On sait jamais ca coute rien
            if (!$image) {
                $image = $photos->images[0];
            }
            if ($i % 7 == 0) {
                $small = 4;
            }
            if ($small > 0) {
                $size = 5;
                $small--;
            }
            if ($image->height > $image->width) {
                //$image = $photos->images[3];
                if ($size == 5) {
                    $size = 6;
                    $small++;
                }
                $h = $height[$size];
                $w = $width[$size] / 2 - 1;
            } else {
                $h = $height[$size];
                $w = $width[$size];
            }
            //Panorama : full screen.
            if ($image->width > $image->height * 2) {
                $w = $w * 2;
            }
            //print_r($image);
            $result .= '<div class="grid-item grid-item-width' . $size . '">
                  <a class="img-gallery" href="' . $photos->images[0]->source . '">
                    <img src=' . $image->source . ' style="display:block;height:' . $h . 'px;width:' . $w . 'px"/>
                  </a>
                </div>';
        }
        $result .= '</div>';
        $result .= "\n    <script type='text/javascript'>\n      \$('#grid').masonry({itemSelector: '.grid-item',columnWidth: " . (169 + $border * 2) . "});\n      \$('.img-gallery').magnificPopup({\n        type: 'image',\n        gallery:{\n          enabled:true\n        }\n      });\n    </script>";
    }
    return $result;
}
 /**
  * @param array $oAuthConfig
  */
 public function __construct($oAuthConfig)
 {
     FacebookSession::setDefaultApplication($oAuthConfig['facebook']['app_id'], $oAuthConfig['facebook']['app_secret']);
     $accessToken = AccessToken::requestAccessToken(array('grant_type' => 'client_credentials'));
     $this->api = new FacebookSession($accessToken);
 }
 /**
  * Handles a response from Facebook, including a CSRF check, and returns a
  *   FacebookSession.
  *
  * @return FacebookSession|null
  */
 public function getSessionFromRedirect()
 {
     if ($this->isValidRedirect()) {
         $params = array('redirect_uri' => $this->getFilteredUri($this->getCurrentUri()), 'code' => $this->getCode());
         return new FacebookSession(AccessToken::requestAccessToken($params, $this->appId, $this->appSecret));
     }
     return null;
 }
Example #11
0
 public function testACodeCanBeUsedToObtainAnAccessToken()
 {
     $testUserAccessToken = FacebookTestHelper::$testUserAccessToken;
     $accessToken = new AccessToken($testUserAccessToken);
     $longLivedAccessToken = $accessToken->extend();
     $code = AccessToken::getCodeFromAccessToken($longLivedAccessToken);
     $accessTokenFromCode = AccessToken::getAccessTokenFromCode($code);
     $this->assertInstanceOf('Facebook\\Entities\\AccessToken', $accessTokenFromCode);
 }
 public function testACodeCanBeUsedToObtainAnAccessToken()
 {
     $app = new FacebookApp('123', 'foo_secret');
     $response = $this->createFacebookResponseMockWithDecodedBody(['access_token' => 'new_long_token', 'expires' => 123, 'machine_id' => 'foo_machine']);
     $client = $this->createFacebookClientMockWithResponse($response);
     $accessTokenFromCode = AccessToken::getAccessTokenFromCode('foo_code', $app, $client);
     $this->assertInstanceOf('Facebook\\Entities\\AccessToken', $accessTokenFromCode);
     $this->assertEquals('new_long_token', (string) $accessTokenFromCode);
     $this->assertEquals('foo_machine', $accessTokenFromCode->getMachineId());
     $this->assertEquals(time() + 123, $accessTokenFromCode->getExpiresAt()->getTimeStamp());
 }
 public function search_fb_pages()
 {
     $partner = $this->partner;
     $longLivedAccessToken = new AccessToken($partner->fb_longlived_access_token);
     $code = AccessToken::getCodeFromAccessToken($longLivedAccessToken);
     $newLongLivedAccessToken = AccessToken::getAccessTokenFromCode($code);
     $session = new FacebookSession($newLongLivedAccessToken);
     if ($session) {
         $user_id = (new FacebookRequest($session, 'GET', '/me'))->execute()->getGraphObject(GraphUser::className());
         $pages = (new FacebookRequest($session, "GET", "/{$user_id->getId()}/accounts"))->execute()->getGraphObject(GraphUser::className());
         $data = $pages->asArray();
         return $data;
     }
 }