![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/app/code/Soon/Social/Helper/Facebook/ |
<?php /** * This file is part of Soon_Social for Magento2. * * @license All rights reserved * @author Christophe SOON <[email protected]> * @category Soon * @package Soon_Social * @copyright Copyright (c) 2015 Agence Soon (http://www.agence-soon.fr) */ namespace Soon\Social\Helper\Facebook; use Facebook\Facebook; use Magento\Framework\App\ResponseInterface; use Magento\Framework\DataObject; use Soon\Social\Helper\Connect as AbstractConnect; /** * Class Connect * @package Soon\Social\Helper\Facebook */ class Connect extends AbstractConnect { /** * @var string */ const SERVICE_NAME = 'facebook'; /** * @var Facebook */ private $fb; /** * Facebook app config * * @var array */ protected $_appConfig; /** * Get service name * * @return string */ public function getServiceName() { return self::SERVICE_NAME; } /** * Retrieve URL login for FB login * * @param bool $loginFlag * @return string */ public function getLoginUrl($loginFlag = false) { $loginUri = 'connect/facebook/fbLogin'; $params = $this->_getRequest()->getParams(); if ($loginFlag) { $params['login'] = 1; } return $this->_getUrl($loginUri, $params); } /** * Retrieve URL for post FB login process * * @return string */ public function getRedirectUrl() { return $this->_getUrl('connect/facebook/fbLoginBack'); } /** * @return string */ public function getOAuthUrl() { $helper = $this->fb()->getRedirectLoginHelper(); $permissions = ['email']; $url = $helper->getLoginUrl($this->getRedirectUrl(), $permissions); return $url; } /** * Get user data from connector * * @return DataObject */ public function getUserData() { return $this->_getUserData(); } /** * @param ResponseInterface $response */ public function beforeConnectLogin(ResponseInterface $response) { } /** * @param ResponseInterface $response */ public function beforeConnectLoginBack(ResponseInterface $response) { $this->setAccessToken(); } /** * Retrieve Facebook user data and create a DataObject with it */ protected function _getUserData() { $userData = new DataObject(); $srcData = $this->fb()->get($this->_getUserDataFieldsRequestUrl())->getDecodedBody(); foreach ($srcData as $k => $v) { $userData->setData(str_replace('_', '', $k), $v); } $userData->setData('social_referrer', self::SERVICE_NAME); return $userData; } /** * Retrieve fields to request to FB as defined in config * * @return string */ private function _getUserDataFieldsRequestUrl() { $userDataFields = array_keys($this->scopeConfig->getValue('soon_social/facebook_user_data')); return sprintf('/me?fields=%s', implode(',', $userDataFields)); } /** * Facebook SDK instanciation * * @return Facebook */ private function fb() { if (is_null($this->fb)) { $config = [ 'app_id' => $this->getAppConfig()['app_id'], 'app_secret' => $this->getAppConfig()['secret'], 'default_graph_version' => 'v2.2', 'persistent_data_handler' => 'session', 'allowSignedRequest' => false // optional but should be set to false for non-canvas apps ]; $this->fb = new Facebook($config); } return $this->fb; } /** * Set access token to $fb object * * @return Connect */ private function setAccessToken() { $fb = $this->fb(); $helper = $fb->getRedirectLoginHelper(); $accessToken = $helper->getAccessToken(); $fb->setDefaultAccessToken($accessToken); return $this; } /** * Retrieve FB app config * @return array [] * @throws \Exception */ private function getAppConfig() { if (is_null($this->_appConfig)) { $configFields = [ 'app_id' => ['is_required' => true], 'secret' => ['is_required' => true], ]; $appConfig = []; foreach ($configFields as $field => $v) { $config = $this->scopeConfig->getValue('soon_social_connect/facebook_connect/' . $field); if (trim($config) == '' && $v['is_required']) { throw new \Exception(sprintf('Cannot find Facebook info for required field: %s', $field)); } $appConfig[$field] = $config; } $this->_appConfig = $appConfig; } return $this->_appConfig; } }