request = new Request(Request::$OAUTH); } function getAuthURL(array $request) { $validator = new OAuthValidator($request, $this->getauthURLRule()); $validator->validateOrFail(); $clientId = $request['client_id']; $redirectUri = $request['redirect_uri']; $state = $request['state']; $scopes = $request['scopes']; $queryParams = [ 'response_type' => 'code', 'client_id' => $clientId, 'redirect_uri' => $redirectUri, 'state' => $state ]; $scopesParam = null; foreach ($scopes as $scope) { $scopesParam .= "scope[]=$scope&"; } if (!empty($request['onboarding_signature'])) { $queryParams['onboarding_signature'] = $request['onboarding_signature']; } $authUrl = self::$baseUrl . "/" . self::$authorize . "?" . $scopesParam . http_build_query($queryParams); return $authUrl; } public function getAccessToken(array $data){ $validator = new OAuthValidator($data, $this->getAccessTokenRule()); $validator->validateOrFail(); return $this->request->request('POST', self::$TOKEN, $data, self::$version); } public function getRefreshToken(array $data){ $validator = new OAuthValidator($data, $this->getRefreshTokenRule()); $validator->validateOrFail(); return $this->request->request('POST', self::$TOKEN, $data, self::$version); } public function revokeToken(array $data){ $validator = new OAuthValidator($data, $this->revokeTokenRule()); $validator->validateOrFail(); return $this->request->request('POST', self::$REVOKE, $data, self::$version); } protected function getauthURLRule(){ return [ self::$CLIENT_ID => 'required|id', self::$REDIRECT_URI => 'required|url', self::$SCOPES => 'required', self::$STATE => 'required' ]; } protected function getAccessTokenRule(){ return [ self::$CLIENT_ID => 'required|id', self::$CLIENT_SECRET => 'required', self::$REDIRECT_URI => 'required|url', self::$GRANT_TYPE => 'required' ]; } protected function getRefreshTokenRule(){ return [ self::$CLIENT_ID => 'required|id', self::$CLIENT_SECRET => 'required', self::$REFRESH_TOKEN => 'required' ]; } protected function revokeTokenRule(){ return [ self::$CLIENT_ID => 'required|id', self::$CLIENT_SECRET => 'required', self::$TOKEN_TYPE_HINT => 'required|token_type', self::$TOKEN => 'required' ]; } }