Read More
Read More
Menu Close

    How To Install Sylius and Fetch Access Token For API?

    SYLIUS INSTALLATION

    For installing Sylius the following points are necessary :

    1. The PHP version should be 7.2 or higher.
    2. The composer should have been installed.

    Follow the below given points to install Sylius:

    1. To creating your new project, run the following command :
      • $ composer create-project sylius/sylius-standard your_project_name
    2. Move inside your project directory
      • $ cd your_project_name
    3. Now create .env.local file below .env file in the same directory and add/customise with variable you want to override like:
    4. Run the following command to install Sylius:
      • $ php bin/console sylius:install
    5. The above command will ask to provide more information and it sets currency as USD and default locale as English – US which can be changed later.
    6. For fully functional front-end run following commands:
      • $ yarn install
      • $ yarn build

    By following above commands you will be able to access your Sylius shop after running the command symfony server:start and accessing http://127.0.0.1:8000 on your web browser.

    How to use Sylius API?

    To use Sylius API, one need to get access token for the same which can be fetched by following steps:

    1. Create OAuth client by running following command:
      • $ php bin/console sylius:oauth-server:create-client –grant-type=”password” –grant-type=”refresh_token” –grant-type=”token”
    2. You will receive a response like : A new client with public id XYZ, secret ABC has been added.

    Now, From your API Client ,

    Register your API end point to get access token:

    protected $endpoints = [
            'getToken' => [
                'url'           => 'oauth/v2/token',
                'method'        => 'POST',
                'requiredToken' => FALSE
            ],
        ];

    Creating a function to get Access Token :

    Start your headless eCommerce
    now.
    Read More
    /**
         * This function revokes the access key once expired
         * and set it to $this->accessToken.
         */
    
        public function revokeAccessKey($endpoint)
        {
            $this->ch = \curl_init();
            $request = $this->createRequest($endpoint);
            $this->setDefaultCurlSettings();
            $response = $this->createResponse();
            
            if (\curl_errno($this->ch)) {
                $response['error'] = \curl_error($this->ch);
                $response['code'] = 0;
            }
            \curl_close($this->ch);
            if ($response['response_code'] == 200 && isset($response['access_token'])) {
                $this->accessToken = $response['access_token'];
            }
            
        }

    The above function call 3 major functions:

    1. Creating request for Access Token API.
    2. Default Curl Setting.
    3. Creating response for Access Token API.

    Creating request for Access Token API.

    protected function createRequest($endpoint)
        {
            if (! array_key_exists($endpoint, $this->endpoints)) {
                return;
            }
            $method = $this->endpoints[$endpoint]['method'];
    
            $endpoint = $this->endpoints[$endpoint]['url'];
    
            $body    = '';
    
            //$this->url is your store URL
            $url = $this->url . $endpoint;
            
            $isAuthenticate = true;
    
            if('oauth/v2/token' === $endpoint) {
                $data = [
                    'grant_type' => 'password',
                    'client_id' => $this->clientId,
                    'client_secret' => $this->clientSecret,
                    'username' => $this->username,
                    'password' =>  $this->password
                ];
                $isAuthenticate = false;
            }
    
            $hasData = !empty($data);
            // Setup authentication.
            $this->authenticate($url, $isAuthenticate); 
            // Setup method.
            $this->setupMethod($method);
            // Include post fields.
            
            if ($hasData) {
                $body = json_encode($data);
                curl_setopt($this->ch, CURLOPT_POSTFIELDS, $body);
            }
            return;
        }
    
        protected function authenticate($url, $isAuthenticate)
        {
            \curl_setopt($this->ch, CURLOPT_URL, $url);
            \curl_setopt($this->ch, CURLOPT_HTTPHEADER, $this->getRequestHeaders($isAuthenticate));
        }
    
        /**
        * Setup method.
        *
        * @param string $method Request method.
        */
        protected function setupMethod($method)
        {
            if ('POST' == $method) {
                \curl_setopt($this->ch, CURLOPT_POST, true);
                \curl_setopt($this->ch, CURLOPT_CUSTOMREQUEST, $method);
            } elseif (\in_array($method, ['PATCH', 'PUT', 'DELETE', 'OPTIONS'])) {
                \curl_setopt($this->ch, CURLOPT_CUSTOMREQUEST, $method);
            }
        }

    Default Curl Setting.

    /**
         * This function sets default cURL settings.
         */
        protected function setDefaultCurlSettings()
        {
            $verifySsl       = !empty($this->options['verifySsl']) ? $this->options['verifySsl'] : false;
            $timeout         = !empty($this->options['timeout']) ? $this->options['timeout'] : 60 ;
            $followRedirects = !empty($this->options['followRedirects']) ? $this->options['followRedirects'] : true;
    
            \curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, $verifySsl);
            if (!$verifySsl) {
                \curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, $verifySsl);
            }
            if ($followRedirects) {
                \curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, $followRedirects);
            }
            \curl_setopt($this->ch, CURLOPT_CONNECTTIMEOUT, $timeout);
            \curl_setopt($this->ch, CURLOPT_TIMEOUT, $timeout);
            \curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true);
            \curl_setopt($this->ch, CURLOPT_HEADER, 1);
        }

    Creating response for Access Token API.

    /**
         * Create response.
         *
         * @return Response
         */
        protected function createResponse()
        {
            $body    = \curl_exec($this->ch);
            $code    = \curl_getinfo($this->ch, CURLINFO_HTTP_CODE);
            $code    = \curl_getinfo($this->ch, CURLINFO_HTTP_CODE);
            $header_size = curl_getinfo($this->ch, CURLINFO_HEADER_SIZE);
            $headers = substr($body, 0, $header_size);
            $body = explode("\r\n", $body);
            try {
                $matches  = array_values(preg_grep('/Link/', $body));
                if (!empty($matches) && strpos($matches[0], '>; rel="next')) {
                    $link = explode(":", $matches[0], 2);
                    $start  = strripos($link[1], 'page_info=');
                    $end    = strripos($link[1], '>; rel="next', $start + 10);
                    $length = $end - $start;
                    $result = substr($link[1], $start + 10, $length - 10);
                }
    
                $count = count($body) - 1;
                $body = json_decode($body[$count], true);
            } catch (\Exception $e) {
                $body = [];
            }
            if (!empty($body) && gettype($body) != 'integer' && gettype($body) != 'boolean') {
                $response = array_merge(['response_code' => $code], $body);
                if (!empty($result)) {
                    $response['link'] = $result;
                }
            } else {
                $response = [ 'response_code' => $code ];
            }
            // Register response.
            return $response;
        }

    This will set fetched Access Token into $this->accessToken variable which can be further used to manipulate Sylius Store Data with APIs.

    NOTE – The older version of PHP will result in installing older version of Sylius.

    Thanks for reading me. I hope this blog would help you with a better understanding of the Sylius Installation and getting Access Token. Please share your reviews on this, which will support me to write more.

    Until next time. 👋

    . . .
    Discuss on Helpdesk

    Leave a Comment

    Your email address will not be published. Required fields are marked*


    Be the first to comment.

    Back to Top