magento 2 rest api : get cart items with images

本秂侑毒 提交于 2019-12-23 02:36:39

问题


In rest api, I am using "/rest/V1/guest-carts/e3e1fd447e0e315dd761942cf949ce5d/items" method to get the magento cart items. It works well and the result is

[
{
  "item_id": 100,
  "sku": "abc-1",
  "qty": 1,
  "name": "Product one",
  "price": 19,
  "product_type": "simple",
  "quote_id": "e3e1fd447e0e315dd761942cf949ce5d"
},
{
  "item_id": 101,
  "sku": "abc-2",
  "qty": 1,
  "name": "Product two",
  "price": 54,
  "product_type": "simple",
  "quote_id": "e3e1fd447e0e315dd761942cf949ce5d"
}
]

Now I want get the images of each products in the list(Possibily a thumbnail image). Is there any way to achieve this result?


回答1:


Follow the Steps to get Product thumbnail Image in Cart through Rest API without POST any values. It will take current thumbnail Image of a product. Rest Url :

Method : GET -> rest/V1/guest-carts/3f260b6e818d2fe56894ed6222e433f8/items

Create a module : code/Vendor_name/Module_name/

registration.php

<?php

\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Hopescode_Mobileshop',
    __DIR__
);

create module.xml

<?xml version="1.0"?>
<!--
/**
 * Copyright © 2018-2019 Hopescode. All rights reserved.
 */
-->

    <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
        <module name="Hopescode_Mobileshop" setup_version="1.0.0" />
    </config>

create etc/extension_attributes.xml

<?xml version="1.0"?>
<!--
/**
 * Copyright © 2018-2019 Hopescode, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd">

    <extension_attributes for="Magento\Quote\Api\Data\CartItemInterface">
        <attribute code="image_url" type="string" />
    </extension_attributes>

</config>

create etc/events.xml

<?xml version="1.0"?>
<!--
/**
 * Copyright © 2018-2019 Hopescode, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="sales_quote_load_after">
        <observer name="hopescode_mobileshop_sales_quote_load_after" instance="Hopescode\Mobileshop\Observer\ProductInterface" />
    </event>
</config>

Create Observer: Vendor_name/Mocule_name/Observer/

ProductInterface.php

<?php
/**
 * Copyright © 2018-2019 Hopescode, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Hopescode\Mobileshop\Observer;

use Magento\Framework\Event\ObserverInterface;
    use Magento\Catalog\Api\ProductRepositoryInterfaceFactory as ProductRepository;
    use Magento\Catalog\Helper\ImageFactory as ProductImageHelper;
    use Magento\Store\Model\StoreManagerInterface as StoreManager;
    use Magento\Store\Model\App\Emulation as AppEmulation;
    use Magento\Quote\Api\Data\CartItemExtensionFactory;

    class ProductInterface implements ObserverInterface
    {   
        /**
         * @var ObjectManagerInterface
         */
        protected $_objectManager;

        /**
         * @var ProductRepository
         */
        protected $productRepository;

        /**
         *@var \Magento\Catalog\Helper\ImageFactory
         */
        protected $productImageHelper;

        /**
         *@var \Magento\Store\Model\StoreManagerInterface
         */
        protected $storeManager;

        /**
         *@var \Magento\Store\Model\App\Emulation
         */
        protected $appEmulation;

        /**
         * @var CartItemExtensionFactory
         */
        protected $extensionFactory;

        /**
         * @param \Magento\Framework\ObjectManagerInterface $objectManager
         * @param ProductRepository $productRepository
         * @param \Magento\Catalog\Helper\ImageFactory
         * @param \Magento\Store\Model\StoreManagerInterface
         * @param \Magento\Store\Model\App\Emulation
         * @param CartItemExtensionFactory $extensionFactory
         */
        public function __construct(
            \Magento\Framework\ObjectManagerInterface $objectManager,
            ProductRepository $productRepository,
            ProductImageHelper $productImageHelper,
            StoreManager $storeManager,
            AppEmulation $appEmulation,
            CartItemExtensionFactory $extensionFactory
        ) {
            $this->_objectManager = $objectManager;
            $this->productRepository = $productRepository;
            $this->productImageHelper = $productImageHelper;
            $this->storeManager = $storeManager;
            $this->appEmulation = $appEmulation;
            $this->extensionFactory = $extensionFactory;
        }

    public function execute(\Magento\Framework\Event\Observer $observer, string $imageType = NULL)
        {
            $quote = $observer->getQuote();

           /**
             * Code to add the items attribute to extension_attributes
             */
            foreach ($quote->getAllItems() as $quoteItem) {
                $product = $this->productRepository->create()->getById($quoteItem->getProductId());
                $itemExtAttr = $quoteItem->getExtensionAttributes();
                if ($itemExtAttr === null) {
                    $itemExtAttr = $this->extensionFactory->create();
                }


                $imageurl =$this->productImageHelper->create()->init($product, 'product_thumbnail_image')->setImageFile($product->getThumbnail())->getUrl();



                $itemExtAttr->setImageUrl($imageurl);
                $quoteItem->setExtensionAttributes($itemExtAttr);
            }
            return;
        }

        /**
         * Helper function that provides full cache image url
         * @param \Magento\Catalog\Model\Product
         * @return string
         */
        protected function getImageUrl($product, string $imageType = NULL)
        {
            $storeId = $this->storeManager->getStore()->getId();

            $this->appEmulation->startEnvironmentEmulation($storeId, \Magento\Framework\App\Area::AREA_FRONTEND, true);
            $imageUrl = $this->productImageHelper->create()->init($product, $imageType)->getUrl();

            $this->appEmulation->stopEnvironmentEmulation();

            return $imageUrl;
        }

    }

Output :

[
    {
        "item_id": 5,
        "sku": "samplepro",
        "qty": 1,
        "name": "samplepro",
        "price": 1500,
        "product_type": "simple",
        "quote_id": "3f260b6e818d2fe56894ed6222e433f8",
        "extension_attributes": {
            "image_url": "http://localhost/dashboard/myapi/pub/media/catalog/product/cache//beff4985b56e3afdbeabfc89641a4582/n/u/nutro_crunchy_real_apple.jpg"
        }
    }
]

Before checking your out put, If you installed the correct method you can check your var/generation/Magento/Quote/Api/Data/CartItemExtension.php has the value like this:

<?php
namespace Magento\Quote\Api\Data;

/**
 * Extension class for @see \Magento\Quote\Api\Data\CartItemInterface
 */
class CartItemExtension extends \Magento\Framework\Api\AbstractSimpleObject implements \Magento\Quote\Api\Data\CartItemExtensionInterface
{
    /**
     * @return string|null
     */
    public function getImageUrl()
    {
        return $this->_get('image_url');
    }

    /**
     * @param string $imageUrl
     * @return $this
     */
    public function setImageUrl($imageUrl)
    {
        $this->setData('image_url', $imageUrl);
        return $this;
    }
}



回答2:


<?php
namespace Namespace\Modulename\Controller\filename;


class customapi extends \Magento\Framework\App\Action\Action
{
         public function __construct(
             \Magento\Framework\App\Action\Context $context,
             \Magento\Checkout\Model\Cart $checkoutCart,
             \Magento\Customer\Model\Customer  $customer,
             \Magento\Catalog\Model\Product $catalog,
             \Magento\Directory\Model\Currency $currency,
             \Magento\Store\Model\StoreManagerInterface $storeManager,
             \Magento\Catalog\Helper\Image $imageHelper
         ) {
            $this->checkoutCart = $checkoutCart;
            $this->customer = $customer;
            $this->catalog = $catalog;
            $this->currency = $currency;
            $this->storeManager = $storeManager;
            $this->imageHelper = $imageHelper;
            parent::__construct($context);
         }
        public function execute()
        {
              $customerId =$this->getRequest()->getParam('customerid');

            if ($customerId) { 

                $customer = $this->customer->load($customerId); 
                try{
                    $cart = $this->checkoutCart->getQuote();

                    if(!count($cart->getAllItems())):
                        echo json_encode(array('status'=>'success','message'=>"No item in your cart"));
                    exit;
                    endif;
                    $product_model = $this->catalog;

                    $baseCurrency = $this->storeManager->getStore()->getBaseCurrencyCode();
                    $currentCurrency = $this->currency;

                    foreach ($cart->getAllVisibleItems() as $item) {

                        $productName= array();
                        $productName['image'] =$this->imageHelper
                                            ->init($item,'product_page_image_large')
                                            ->setImageFile($item->getFile())
                                            ->resize('100','100')
                                            ->getUrl();
                        $product['product'][] = $productName;

                    }        

                    echo json_encode(array('status'=>'success','message'=>$product));

                }
                catch(exception $e)
                {
                    echo json_encode(array('status'=>'error','message'=> $e->getMessage()));
                } 
            }
        }
}


来源:https://stackoverflow.com/questions/40720628/magento-2-rest-api-get-cart-items-with-images

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!