. */ /* */ /*************************************************************************************/ namespace PayPal\Service; use Monolog\Logger; use PayPal\Api\OpenIdSession; use PayPal\Api\OpenIdTokeninfo; use PayPal\Api\OpenIdUserinfo; use PayPal\Model\PaypalCustomer; use PayPal\Model\PaypalCustomerQuery; use PayPal\Service\Base\PayPalBaseService; use Thelia\Core\Security\SecurityContext; /** * Class PayPalCustomerService * @package PayPal\Service */ class PayPalCustomerService { /** @var SecurityContext */ protected $securityContext; /** * PayPalService constructor. * @param SecurityContext $securityContext */ public function __construct(SecurityContext $securityContext) { $this->securityContext = $securityContext; } /** * @param $authorizationCode * @return OpenIdUserinfo * @throws \Exception */ public function getUserInfoWithAuthorizationCode($authorizationCode) { try { $accessToken = OpenIdTokeninfo::createFromAuthorizationCode( ['code' => $authorizationCode], null, null, PayPalBaseService::getApiContext() ); return $this->getUserInfo($accessToken->getAccessToken()); } catch (\Exception $ex) { PayPalLoggerService::log($ex->getMessage(), [], Logger::ERROR); throw $ex; } } /** * @param $accessToken * @return OpenIdUserinfo */ public function getUserInfo($accessToken) { $params = array('access_token' => $accessToken); $userInfo = OpenIdUserinfo::getUserinfo($params, PayPalBaseService::getApiContext()); return $userInfo; } /** * @return PaypalCustomer */ public function getCurrentPayPalCustomer() { $payPalCustomer = new PaypalCustomer(); if (null !== $customer = $this->securityContext->getCustomerUser()) { $payPalCustomer = PaypalCustomerQuery::create()->findOneById($customer->getId()); } return $payPalCustomer; } /** * @param $refreshToken * @return OpenIdTokeninfo * @throws \Exception */ public function generateAccessTokenFromRefreshToken($refreshToken) { try { $tokenInfo = new OpenIdTokeninfo(); $tokenInfo = $tokenInfo->createFromRefreshToken(['refresh_token' => $refreshToken], PayPalBaseService::getApiContext()); return $tokenInfo; } catch (\Exception $ex) { PayPalLoggerService::log($ex->getMessage(), [], Logger::ERROR); throw $ex; } } /** * @param $refreshToken * @return OpenIdUserinfo * @throws \Exception */ public function getUserInfoWithRefreshToken($refreshToken) { try { $tokenInfo = $this->generateAccessTokenFromRefreshToken($refreshToken); return $this->getUserInfo($tokenInfo->getAccessToken()); } catch (\Exception $ex) { PayPalLoggerService::log($ex->getMessage(), [], Logger::ERROR); throw $ex; } } /** * @return string */ public function getUrlToRefreshToken() { //Get Authorization URL returns the redirect URL that could be used to get user's consent $redirectUrl = OpenIdSession::getAuthorizationUrl( 'http://25b3ee89.ngrok.io/', [ 'openid', 'profile', 'address', 'email', 'phone', 'https://uri.paypal.com/services/paypalattributes', 'https://uri.paypal.com/services/expresscheckout', 'https://uri.paypal.com/services/invoicing' ], null, null, null, PayPalBaseService::getApiContext() ); return $redirectUrl; } }