Skip to content

Is there any API to get Products details in magento2 without Bearer Token

I want to get products By Id but it the way i am doing this doesnot return some product details in case of configurable

<?php


namespace VendorMobileAppModelApi;

use VendorMobileAppApiProductInterface;
use MagentoCatalogModelResourceModelProductCollectionFactory as ProductsCollectionFactory;
use VendorMobileAppHelperData as ApiHelper;
use MagentoCatalogModelCategoryFactory;
use MagentoSalesModelResourceModelReportBestsellersCollectionFactory as BestSellersCollectionFactory;
use MagentoReportsModelResourceModelProductCollectionFactory as MostViewedCollectionFactory;
use MagentoFrameworkWebapiRestRequest as ApiRequest;
use MagentoFrameworkEscaper;

/**
*  Store Details Provider
*/

class ProductRepository implements ProductInterface {

    /**
    * @var ProductsCollectionFactory
    */
    protected $collectionFactory;

    /**
    * @var BestSellersCollectionFactory
    */
    protected $_bestSellersCollectionFactory;

    /**
    * @var BestSellersCollectionFactory
    */
    protected $_mostViewedProductFactory;

    /**
     * @var CategoryFactory
     */
    protected $categoryFactory;

    /**
    * @var ApiRequest
    */
    protected $request;

    /**
    * @var Escaper
    */
    protected $escaper;

    /**
    *  Constructor VirtualProductInformation Class
    *
    *   @param ProductsCollectionFactory $collectionFactory,
    *   @param BestSellersCollectionFactory $bestSellersCollectionFactory,
    *   @param MostViewedCollectionFactory $mostViewedProductFactory,
    *   @param CategoryFactory $categoryFactory,
    *   @param ApiRequest $request,
    *   @param Escaper $escaper
    *   @param ApiHelper $apiHelper
    *
    */

    public function __construct(
        ProductsCollectionFactory $collectionFactory,
        BestSellersCollectionFactory $bestSellersCollectionFactory,
        MostViewedCollectionFactory $mostViewedProductFactory,
        CategoryFactory $categoryFactory,
        ApiRequest $request,
        Escaper $escaper,
        ApiHelper $apiHelper
    ) {
        $this->collectionFactory = $collectionFactory;
        $this->_bestSellersCollectionFactory = $bestSellersCollectionFactory;
        $this->_mostViewedProductFactory = $mostViewedProductFactory;
        $this->categoryFactory = $categoryFactory;
        $this->request = $request;
        $this->escaper = $escaper;
        $this->apiHelper = $apiHelper;
    }



    /**
    * Get Products By Category
    *
    * @api
    * @param int $categoryId
    * @param int $pageSize
    * @param string $storeCode
    *
    * @return array
    */
    public function getProductsByCategory( $categoryId, $pageSize, $storeCode ) {

        // Return If Module is Disabled
        if ( 0 === $this->apiHelper->getModuleStatus() ) {
            $response[ 0 ][ 'success' ] = 0;
            $response[ 0 ][ 'message' ] = $this->apiHelper->translateMessage( 'Setting Api is disabled', $storeCode );
            return $response;
        }

        $storeId = $this->apiHelper->getStoreByCode( $this->escaper->escapeHtml( $storeCode ) );
        $categoryId = $this->escaper->escapeHtml( $categoryId );
        $productPerPage = $this->escaper->escapeHtml( $pageSize );

        $category = $this->categoryFactory->create()->load($categoryId);
        $category->setStoreId($storeId); 
        if($category) {
            $productCollection = $category->getProductCollection();
            $productCollection->setPagesize($productPerPage);

            echo "<pre>"; print_r($productCollection); exit;
            $response[0]['success'] = 1;
            $response[ 0 ][ 'data' ] = $this->getProductData( $productCollection );
        } else {
            $response[0]['success'] = 0;
            $response[ 0 ][ 'message' ] = $this->apiHelper->translateMessage("The Category with given Id doesnot exist", $storeCode);
        }

        return $response;
    }
    

    /**
    * Get product data including image URLs.
    *
    * @param MagentoCatalogModelResourceModelProductCollection $products
    * @return array
    */
    protected function getProductData( $products ) {
        $data = [];
        foreach ( $products as $product ) {
            $productData = $product->getData();
            $productData[ 'image_url' ] = $this->getProductImageUrl( $product );
            $data[] = $productData;
        }
        return $data;
    }


    /**
    * Get product image URL.
    *
    * @param MagentoCatalogModelProduct $product
    * @return string|null
    */
    protected function getProductImageUrl( $product ) {
        $image = $product->getImage();
        if ( $image && $image != 'no_selection' ) {
            $mediaUrl = $this->apiHelper->getMediaUrl();
            return $mediaUrl . 'catalog/product' . $image;
        }
        return null;
    }
}