Back to Top

How To Install Sylius and Fetch Access Token For API?

Updated 25 February 2020

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:
    • DATABASE_URL=mysql://username:password@host/my_custom_sylius_database
  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.
Find out 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. 👋

. . .

Leave a Comment

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


Be the first to comment.

Back to Top

Message Sent!

If you have more details or questions, you can reply to the received confirmation email.

Back to Home