Magento 2: Api getting product collection using category id












1














I am trying to get product collection using Rest Api
Below is my code
file: ProductsManagementInterface.php




interface ProductsManagementInterface {



/**
* GET for Products api
* @param string $param
* @return array
*/
public function getProducts($param); }



webservice define in xml



<?xml version="1.0" ?>
<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Webapi:etc/webapi.xsd">
<route method="GET" url="/V1/productcollection/products/:param">
<service class="VendorProductCollectionApiProductsManagementInterface" method="getProducts"/>
<resources>
<resource ref="anonymous"/>
</resources>
</route>
</routes>


model file



<?php


namespace VendorProductCollectionModel;

class ProductsManagement implements VendorProductCollectionApiProductsManagementInterface
{

protected $_categoryFactory;
protected $_category;
protected $_categoryRepository;
protected $_storeManager;
protected $jsonHelper;

public function __constructor(
MagentoCatalogModelCategoryFactory $categoryFactory,
MagentoCatalogHelperCategory $category,
MagentoCatalogModelCategoryRepository $categoryRepository,
MagentoFrameworkJsonHelperData $jsonHelper,
MagentoStoreModelStoreManagerInterface $storeManager
){
$this->_categoryFactory = $categoryFactory;
$this->_category = $category;
$this->_categoryRepository = $categoryRepository;
$this->jsonHelper = $jsonHelper;
$this->_storeManager = $storeManager;
}
/**
* Return mixed.
*
* @api
* @param string $param.
* @return array.
*/
public function getProducts($param)
{
$json = $this->getJsonArrayProductFromCategory($param);
$decodedData = $this->jsonHelper->jsonDecode($json);
return $decodedData;
//return 'hello api GET return the $param ' . $param;
}

public function getJsonArrayProductFromCategory($id){
$category = $this->_categoryFactory->create()->load($id);
$categoryProducts = $category->getProductCollection()
->addAttributeToSelect('*');
$json= array();
$i=0;

foreach ($categoryProducts as $product)
{
$productData['sku'] = $product->getSku();
$productData['name'] = $product->getName();
$productData['price'] = $product->getPrice();
$productData['url'] = $product->getProductUrl();
$json[$i]=$productData;
$i++;
}
return $json;
}
}


My url is



http://domian.com/rest/V1/productcollection/products/5



but it give
enter image description here










share|improve this question



























    1














    I am trying to get product collection using Rest Api
    Below is my code
    file: ProductsManagementInterface.php




    interface ProductsManagementInterface {



    /**
    * GET for Products api
    * @param string $param
    * @return array
    */
    public function getProducts($param); }



    webservice define in xml



    <?xml version="1.0" ?>
    <routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Webapi:etc/webapi.xsd">
    <route method="GET" url="/V1/productcollection/products/:param">
    <service class="VendorProductCollectionApiProductsManagementInterface" method="getProducts"/>
    <resources>
    <resource ref="anonymous"/>
    </resources>
    </route>
    </routes>


    model file



    <?php


    namespace VendorProductCollectionModel;

    class ProductsManagement implements VendorProductCollectionApiProductsManagementInterface
    {

    protected $_categoryFactory;
    protected $_category;
    protected $_categoryRepository;
    protected $_storeManager;
    protected $jsonHelper;

    public function __constructor(
    MagentoCatalogModelCategoryFactory $categoryFactory,
    MagentoCatalogHelperCategory $category,
    MagentoCatalogModelCategoryRepository $categoryRepository,
    MagentoFrameworkJsonHelperData $jsonHelper,
    MagentoStoreModelStoreManagerInterface $storeManager
    ){
    $this->_categoryFactory = $categoryFactory;
    $this->_category = $category;
    $this->_categoryRepository = $categoryRepository;
    $this->jsonHelper = $jsonHelper;
    $this->_storeManager = $storeManager;
    }
    /**
    * Return mixed.
    *
    * @api
    * @param string $param.
    * @return array.
    */
    public function getProducts($param)
    {
    $json = $this->getJsonArrayProductFromCategory($param);
    $decodedData = $this->jsonHelper->jsonDecode($json);
    return $decodedData;
    //return 'hello api GET return the $param ' . $param;
    }

    public function getJsonArrayProductFromCategory($id){
    $category = $this->_categoryFactory->create()->load($id);
    $categoryProducts = $category->getProductCollection()
    ->addAttributeToSelect('*');
    $json= array();
    $i=0;

    foreach ($categoryProducts as $product)
    {
    $productData['sku'] = $product->getSku();
    $productData['name'] = $product->getName();
    $productData['price'] = $product->getPrice();
    $productData['url'] = $product->getProductUrl();
    $json[$i]=$productData;
    $i++;
    }
    return $json;
    }
    }


    My url is



    http://domian.com/rest/V1/productcollection/products/5



    but it give
    enter image description here










    share|improve this question

























      1












      1








      1







      I am trying to get product collection using Rest Api
      Below is my code
      file: ProductsManagementInterface.php




      interface ProductsManagementInterface {



      /**
      * GET for Products api
      * @param string $param
      * @return array
      */
      public function getProducts($param); }



      webservice define in xml



      <?xml version="1.0" ?>
      <routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Webapi:etc/webapi.xsd">
      <route method="GET" url="/V1/productcollection/products/:param">
      <service class="VendorProductCollectionApiProductsManagementInterface" method="getProducts"/>
      <resources>
      <resource ref="anonymous"/>
      </resources>
      </route>
      </routes>


      model file



      <?php


      namespace VendorProductCollectionModel;

      class ProductsManagement implements VendorProductCollectionApiProductsManagementInterface
      {

      protected $_categoryFactory;
      protected $_category;
      protected $_categoryRepository;
      protected $_storeManager;
      protected $jsonHelper;

      public function __constructor(
      MagentoCatalogModelCategoryFactory $categoryFactory,
      MagentoCatalogHelperCategory $category,
      MagentoCatalogModelCategoryRepository $categoryRepository,
      MagentoFrameworkJsonHelperData $jsonHelper,
      MagentoStoreModelStoreManagerInterface $storeManager
      ){
      $this->_categoryFactory = $categoryFactory;
      $this->_category = $category;
      $this->_categoryRepository = $categoryRepository;
      $this->jsonHelper = $jsonHelper;
      $this->_storeManager = $storeManager;
      }
      /**
      * Return mixed.
      *
      * @api
      * @param string $param.
      * @return array.
      */
      public function getProducts($param)
      {
      $json = $this->getJsonArrayProductFromCategory($param);
      $decodedData = $this->jsonHelper->jsonDecode($json);
      return $decodedData;
      //return 'hello api GET return the $param ' . $param;
      }

      public function getJsonArrayProductFromCategory($id){
      $category = $this->_categoryFactory->create()->load($id);
      $categoryProducts = $category->getProductCollection()
      ->addAttributeToSelect('*');
      $json= array();
      $i=0;

      foreach ($categoryProducts as $product)
      {
      $productData['sku'] = $product->getSku();
      $productData['name'] = $product->getName();
      $productData['price'] = $product->getPrice();
      $productData['url'] = $product->getProductUrl();
      $json[$i]=$productData;
      $i++;
      }
      return $json;
      }
      }


      My url is



      http://domian.com/rest/V1/productcollection/products/5



      but it give
      enter image description here










      share|improve this question













      I am trying to get product collection using Rest Api
      Below is my code
      file: ProductsManagementInterface.php




      interface ProductsManagementInterface {



      /**
      * GET for Products api
      * @param string $param
      * @return array
      */
      public function getProducts($param); }



      webservice define in xml



      <?xml version="1.0" ?>
      <routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Webapi:etc/webapi.xsd">
      <route method="GET" url="/V1/productcollection/products/:param">
      <service class="VendorProductCollectionApiProductsManagementInterface" method="getProducts"/>
      <resources>
      <resource ref="anonymous"/>
      </resources>
      </route>
      </routes>


      model file



      <?php


      namespace VendorProductCollectionModel;

      class ProductsManagement implements VendorProductCollectionApiProductsManagementInterface
      {

      protected $_categoryFactory;
      protected $_category;
      protected $_categoryRepository;
      protected $_storeManager;
      protected $jsonHelper;

      public function __constructor(
      MagentoCatalogModelCategoryFactory $categoryFactory,
      MagentoCatalogHelperCategory $category,
      MagentoCatalogModelCategoryRepository $categoryRepository,
      MagentoFrameworkJsonHelperData $jsonHelper,
      MagentoStoreModelStoreManagerInterface $storeManager
      ){
      $this->_categoryFactory = $categoryFactory;
      $this->_category = $category;
      $this->_categoryRepository = $categoryRepository;
      $this->jsonHelper = $jsonHelper;
      $this->_storeManager = $storeManager;
      }
      /**
      * Return mixed.
      *
      * @api
      * @param string $param.
      * @return array.
      */
      public function getProducts($param)
      {
      $json = $this->getJsonArrayProductFromCategory($param);
      $decodedData = $this->jsonHelper->jsonDecode($json);
      return $decodedData;
      //return 'hello api GET return the $param ' . $param;
      }

      public function getJsonArrayProductFromCategory($id){
      $category = $this->_categoryFactory->create()->load($id);
      $categoryProducts = $category->getProductCollection()
      ->addAttributeToSelect('*');
      $json= array();
      $i=0;

      foreach ($categoryProducts as $product)
      {
      $productData['sku'] = $product->getSku();
      $productData['name'] = $product->getName();
      $productData['price'] = $product->getPrice();
      $productData['url'] = $product->getProductUrl();
      $json[$i]=$productData;
      $i++;
      }
      return $json;
      }
      }


      My url is



      http://domian.com/rest/V1/productcollection/products/5



      but it give
      enter image description here







      magento2 api






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked yesterday









      Paras Arora

      408419




      408419






















          1 Answer
          1






          active

          oldest

          votes


















          1














          There are 2 problems in your code first one is you define the wrong __constructor



          Change your __constructor to __construct like,



          public function __construct(
          MagentoCatalogModelCategoryFactory $categoryFactory,
          MagentoCatalogHelperCategory $category,
          MagentoCatalogModelCategoryRepository $categoryRepository,
          MagentoFrameworkJsonHelperData $jsonHelper,
          MagentoStoreModelStoreManagerInterface $storeManager
          ){
          $this->_categoryFactory = $categoryFactory;
          $this->_category = $category;
          $this->_categoryRepository = $categoryRepository;
          $this->jsonHelper = $jsonHelper;
          $this->_storeManager = $storeManager;
          }


          and run the di:compile from your Magento 2 root command line,



          php bin/magento setup:di:compile



          and the second problem is you are passing the Array instead of string to this line,



              $decodedData = $this->jsonHelper->jsonDecode($json);


          I am not sure what kind of output format you want but to check if it's working for you can remove this like and just return $json like this,



              /**
          * Return mixed.
          *
          * @api
          * @param integer $param.
          * @return array.
          */
          public function getProducts($param)
          {
          $json = $this->getJsonArrayProductFromCategory($param);
          return $json;
          }





          share|improve this answer





















            Your Answer








            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "479"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: false,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f256770%2fmagento-2-api-getting-product-collection-using-category-id%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            1














            There are 2 problems in your code first one is you define the wrong __constructor



            Change your __constructor to __construct like,



            public function __construct(
            MagentoCatalogModelCategoryFactory $categoryFactory,
            MagentoCatalogHelperCategory $category,
            MagentoCatalogModelCategoryRepository $categoryRepository,
            MagentoFrameworkJsonHelperData $jsonHelper,
            MagentoStoreModelStoreManagerInterface $storeManager
            ){
            $this->_categoryFactory = $categoryFactory;
            $this->_category = $category;
            $this->_categoryRepository = $categoryRepository;
            $this->jsonHelper = $jsonHelper;
            $this->_storeManager = $storeManager;
            }


            and run the di:compile from your Magento 2 root command line,



            php bin/magento setup:di:compile



            and the second problem is you are passing the Array instead of string to this line,



                $decodedData = $this->jsonHelper->jsonDecode($json);


            I am not sure what kind of output format you want but to check if it's working for you can remove this like and just return $json like this,



                /**
            * Return mixed.
            *
            * @api
            * @param integer $param.
            * @return array.
            */
            public function getProducts($param)
            {
            $json = $this->getJsonArrayProductFromCategory($param);
            return $json;
            }





            share|improve this answer


























              1














              There are 2 problems in your code first one is you define the wrong __constructor



              Change your __constructor to __construct like,



              public function __construct(
              MagentoCatalogModelCategoryFactory $categoryFactory,
              MagentoCatalogHelperCategory $category,
              MagentoCatalogModelCategoryRepository $categoryRepository,
              MagentoFrameworkJsonHelperData $jsonHelper,
              MagentoStoreModelStoreManagerInterface $storeManager
              ){
              $this->_categoryFactory = $categoryFactory;
              $this->_category = $category;
              $this->_categoryRepository = $categoryRepository;
              $this->jsonHelper = $jsonHelper;
              $this->_storeManager = $storeManager;
              }


              and run the di:compile from your Magento 2 root command line,



              php bin/magento setup:di:compile



              and the second problem is you are passing the Array instead of string to this line,



                  $decodedData = $this->jsonHelper->jsonDecode($json);


              I am not sure what kind of output format you want but to check if it's working for you can remove this like and just return $json like this,



                  /**
              * Return mixed.
              *
              * @api
              * @param integer $param.
              * @return array.
              */
              public function getProducts($param)
              {
              $json = $this->getJsonArrayProductFromCategory($param);
              return $json;
              }





              share|improve this answer
























                1












                1








                1






                There are 2 problems in your code first one is you define the wrong __constructor



                Change your __constructor to __construct like,



                public function __construct(
                MagentoCatalogModelCategoryFactory $categoryFactory,
                MagentoCatalogHelperCategory $category,
                MagentoCatalogModelCategoryRepository $categoryRepository,
                MagentoFrameworkJsonHelperData $jsonHelper,
                MagentoStoreModelStoreManagerInterface $storeManager
                ){
                $this->_categoryFactory = $categoryFactory;
                $this->_category = $category;
                $this->_categoryRepository = $categoryRepository;
                $this->jsonHelper = $jsonHelper;
                $this->_storeManager = $storeManager;
                }


                and run the di:compile from your Magento 2 root command line,



                php bin/magento setup:di:compile



                and the second problem is you are passing the Array instead of string to this line,



                    $decodedData = $this->jsonHelper->jsonDecode($json);


                I am not sure what kind of output format you want but to check if it's working for you can remove this like and just return $json like this,



                    /**
                * Return mixed.
                *
                * @api
                * @param integer $param.
                * @return array.
                */
                public function getProducts($param)
                {
                $json = $this->getJsonArrayProductFromCategory($param);
                return $json;
                }





                share|improve this answer












                There are 2 problems in your code first one is you define the wrong __constructor



                Change your __constructor to __construct like,



                public function __construct(
                MagentoCatalogModelCategoryFactory $categoryFactory,
                MagentoCatalogHelperCategory $category,
                MagentoCatalogModelCategoryRepository $categoryRepository,
                MagentoFrameworkJsonHelperData $jsonHelper,
                MagentoStoreModelStoreManagerInterface $storeManager
                ){
                $this->_categoryFactory = $categoryFactory;
                $this->_category = $category;
                $this->_categoryRepository = $categoryRepository;
                $this->jsonHelper = $jsonHelper;
                $this->_storeManager = $storeManager;
                }


                and run the di:compile from your Magento 2 root command line,



                php bin/magento setup:di:compile



                and the second problem is you are passing the Array instead of string to this line,



                    $decodedData = $this->jsonHelper->jsonDecode($json);


                I am not sure what kind of output format you want but to check if it's working for you can remove this like and just return $json like this,



                    /**
                * Return mixed.
                *
                * @api
                * @param integer $param.
                * @return array.
                */
                public function getProducts($param)
                {
                $json = $this->getJsonArrayProductFromCategory($param);
                return $json;
                }






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered yesterday









                Keyur Shah

                12.8k23764




                12.8k23764






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Magento Stack Exchange!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.





                    Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                    Please pay close attention to the following guidance:


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f256770%2fmagento-2-api-getting-product-collection-using-category-id%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    1300-talet

                    1300-talet

                    Display a custom attribute below product name in the front-end Magento 1.9.3.8