2 Append new ans
source | link

[Edit]

Magento 2 rest api : Get cart items with images

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;
    }
}

[Edit]

Magento 2 rest api : Get cart items with images

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;
    }
}
1
source | link

GET /V1/carts/mine

Implementation Notes

Returns information for the cart for a specified customer.

Response:

{
  "id": 0,
  "created_at": "string",
  "updated_at": "string",
  "converted_at": "string",
  "is_active": true,
  "is_virtual": true,
  "items": [
    {
      "item_id": 0,
      "sku": "string",
      "qty": 0,
      "name": "string",
      "price": 0,
      "product_type": "string",
      "quote_id": "string",
      "product_option": {
        "extension_attributes": {
          "custom_options": [
            {
              "option_id": "string",
              "option_value": "string",
              "extension_attributes": {
                "file_info": {
                  "base64_encoded_data": "string",
                  "type": "string",
                  "name": "string"
                }
              }
            }
          ],
          "bundle_options": [
            {
              "option_id": 0,
              "option_qty": 0,
              "option_selections": [
                0
              ],
              "extension_attributes": {}
            }
          ],
          "configurable_item_options": [
            {
              "option_id": "string",
              "option_value": 0,
              "extension_attributes": {}
            }
          ],
          "downloadable_option": {
            "downloadable_links": [
              0
            ]
          },
          "giftcard_item_option": {
            "giftcard_amount": "string",
            "custom_giftcard_amount": 0,
            "giftcard_sender_name": "string",
            "giftcard_recipient_name": "string",
            "giftcard_sender_email": "string",
            "giftcard_recipient_email": "string",
            "giftcard_message": "string",
            "extension_attributes": {}
          }
        }
      },
      "extension_attributes": {
        "negotiable_quote_item": {
          "item_id": 0,
          "original_price": 0,
          "original_tax_amount": 0,
          "original_discount_amount": 0,
          "extension_attributes": {}
        }
      }
    }
  ],
  "items_count": 0,
  "items_qty": 0,
  "customer": {
    "id": 0,
    "group_id": 0,
    "default_billing": "string",
    "default_shipping": "string",
    "confirmation": "string",
    "created_at": "string",
    "updated_at": "string",
    "created_in": "string",
    "dob": "string",
    "email": "string",
    "firstname": "string",
    "lastname": "string",
    "middlename": "string",
    "prefix": "string",
    "suffix": "string",
    "gender": 0,
    "store_id": 0,
    "taxvat": "string",
    "website_id": 0,
    "addresses": [
      {
        "id": 0,
        "customer_id": 0,
        "region": {
          "region_code": "string",
          "region": "string",
          "region_id": 0,
          "extension_attributes": {}
        },
        "region_id": 0,
        "country_id": "string",
        "street": [
          "string"
        ],
        "company": "string",
        "telephone": "string",
        "fax": "string",
        "postcode": "string",
        "city": "string",
        "firstname": "string",
        "lastname": "string",
        "middlename": "string",
        "prefix": "string",
        "suffix": "string",
        "vat_id": "string",
        "default_shipping": true,
        "default_billing": true,
        "extension_attributes": {},
        "custom_attributes": [
          {
            "attribute_code": "string",
            "value": "string"
          }
        ]
      }
    ],
    "disable_auto_group_change": 0,
    "extension_attributes": {
      "company_attributes": {
        "customer_id": 0,
        "company_id": 0,
        "job_title": "string",
        "status": 0,
        "telephone": "string",
        "extension_attributes": {}
      },
      "is_subscribed": true
    },
    "custom_attributes": [
      {
        "attribute_code": "string",
        "value": "string"
      }
    ]
  },
  "billing_address": {
    "id": 0,
    "region": "string",
    "region_id": 0,
    "region_code": "string",
    "country_id": "string",
    "street": [
      "string"
    ],
    "company": "string",
    "telephone": "string",
    "fax": "string",
    "postcode": "string",
    "city": "string",
    "firstname": "string",
    "lastname": "string",
    "middlename": "string",
    "prefix": "string",
    "suffix": "string",
    "vat_id": "string",
    "customer_id": 0,
    "email": "string",
    "same_as_billing": 0,
    "customer_address_id": 0,
    "save_in_address_book": 0,
    "extension_attributes": {
      "gift_registry_id": 0
    },
    "custom_attributes": [
      {
        "attribute_code": "string",
        "value": "string"
      }
    ]
  },
  "reserved_order_id": 0,
  "orig_order_id": 0,
  "currency": {
    "global_currency_code": "string",
    "base_currency_code": "string",
    "store_currency_code": "string",
    "quote_currency_code": "string",
    "store_to_base_rate": 0,
    "store_to_quote_rate": 0,
    "base_to_global_rate": 0,
    "base_to_quote_rate": 0,
    "extension_attributes": {}
  },
  "customer_is_guest": true,
  "customer_note": "string",
  "customer_note_notify": true,
  "customer_tax_class_id": 0,
  "store_id": 0,
  "extension_attributes": {
    "shipping_assignments": [
      {
        "shipping": {
          "address": {
            "id": 0,
            "region": "string",
            "region_id": 0,
            "region_code": "string",
            "country_id": "string",
            "street": [
              "string"
            ],
            "company": "string",
            "telephone": "string",
            "fax": "string",
            "postcode": "string",
            "city": "string",
            "firstname": "string",
            "lastname": "string",
            "middlename": "string",
            "prefix": "string",
            "suffix": "string",
            "vat_id": "string",
            "customer_id": 0,
            "email": "string",
            "same_as_billing": 0,
            "customer_address_id": 0,
            "save_in_address_book": 0,
            "extension_attributes": {
              "gift_registry_id": 0
            },
            "custom_attributes": [
              {
                "attribute_code": "string",
                "value": "string"
              }
            ]
          },
          "method": "string",
          "extension_attributes": {}
        },
        "items": [
          {
            "item_id": 0,
            "sku": "string",
            "qty": 0,
            "name": "string",
            "price": 0,
            "product_type": "string",
            "quote_id": "string",
            "product_option": {
              "extension_attributes": {
                "custom_options": [
                  {
                    "option_id": "string",
                    "option_value": "string",
                    "extension_attributes": {
                      "file_info": {
                        "base64_encoded_data": "string",
                        "type": "string",
                        "name": "string"
                      }
                    }
                  }
                ],
                "bundle_options": [
                  {
                    "option_id": 0,
                    "option_qty": 0,
                    "option_selections": [
                      0
                    ],
                    "extension_attributes": {}
                  }
                ],
                "configurable_item_options": [
                  {
                    "option_id": "string",
                    "option_value": 0,
                    "extension_attributes": {}
                  }
                ],
                "downloadable_option": {
                  "downloadable_links": [
                    0
                  ]
                },
                "giftcard_item_option": {
                  "giftcard_amount": "string",
                  "custom_giftcard_amount": 0,
                  "giftcard_sender_name": "string",
                  "giftcard_recipient_name": "string",
                  "giftcard_sender_email": "string",
                  "giftcard_recipient_email": "string",
                  "giftcard_message": "string",
                  "extension_attributes": {}
                }
              }
            },
            "extension_attributes": {
              "negotiable_quote_item": {
                "item_id": 0,
                "original_price": 0,
                "original_tax_amount": 0,
                "original_discount_amount": 0,
                "extension_attributes": {}
              }
            }
          }
        ],
        "extension_attributes": {}
      }
    ],
    "negotiable_quote": {
      "quote_id": 0,
      "is_regular_quote": true,
      "status": "string",
      "negotiated_price_type": 0,
      "negotiated_price_value": 0,
      "shipping_price": 0,
      "quote_name": "string",
      "expiration_period": "string",
      "email_notification_status": 0,
      "has_unconfirmed_changes": true,
      "is_shipping_tax_changed": true,
      "is_customer_price_changed": true,
      "notifications": 0,
      "applied_rule_ids": "string",
      "is_address_draft": true,
      "deleted_sku": "string",
      "creator_id": 0,
      "creator_type": 0,
      "original_total_price": 0,
      "base_original_total_price": 0,
      "negotiated_total_price": 0,
      "base_negotiated_total_price": 0,
      "extension_attributes": {}
    }
  }
}

If you see the above response , there is no product image information. So we should call an API for it. You should call GET /V1/products/:sku/media to retrieve for a product's image.

For for information please see here :

Magento 2 REST APIs

enter image description here