While creating a custom rest API in Magento 2, you may need to work with the order total and use their values. Today, I have come up with the blog to get total segment using Magento 2 rest API.
Steps to Get Total Segment Using Magento 2 Rest API:
1. Create app/code/Vendor/Extension/etc/webapi.xml file and put the below code:
<?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 url="/V1/Extension/guest-carts/:cartId/" method="POST">
<service class="Vendor\Extension\Api\GuestFeesInformationManagementInterface" method="collect"/>
<resources>
<resource ref="anonymous" />
</resources>
</route>
</routes>
2. Now, create app/code/Vendor/Extension/Api/GuestFeesInformationManagementInterface.php and put below code:
<?php
namespace Vendor\Extension\Api;
interface GuestFeesInformationManagementInterface
{
/**
* @param string $cartId
* @param \Magento\Checkout\Api\Data\TotalsInformationInterface $addressInformation
*
* @return string
*/
public function collect(
$cartId,
\Magento\Checkout\Api\Data\TotalsInformationInterface $addressInformation
);
}
3. Go to app/code/Vendor/Extension/etc/di.xml and put the below code:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Vendor\Extension\Api\GuestFeesInformationManagementInterface" type="Vendor\Extension\Model\Api\GuestFeesInformationManagement"/>
</config>
4. Create app/code/Vendor/Extension/Model/Api/GuestFeesInformationManagement.php file with the below code:
<?php
namespace Vendor\Extension\Model\Api;
use Vendor\Extension\Api\GuestFeesInformationManagementInterface;
use Magento\Quote\Model\QuoteIdMaskFactory;
use Magento\Checkout\Model\TotalsInformationManagement as CheckoutTotalsInformationManagement;
use Magento\Quote\Api\CartRepositoryInterface;
use Magento\Quote\Model\Quote\Address\Total;
use Magento\Quote\Api\CartTotalRepositoryInterface;
/**
* Class GuestFeesInformationManagement
* @package Vendor\Extension\Model\Api
*/
class GuestFeesInformationManagement implements GuestFeesInformationManagementInterface
{
/** @var QuoteIdMaskFactory */
protected $quoteIdMaskFactory;
/**
* @var CheckoutTotalsInformationManagement
*/
protected $checkoutTotalsInformationManagement;
/**
* @var CartRepositoryInterface
*/
protected $cartRepository;
/**
* @var Total
*/
protected $total;
/**
* @var CartTotalRepositoryInterface
*/
protected $cartTotalRepository;
/**
* @param QuoteIdMaskFactory $quoteIdMaskFactory
*/
public function __construct(
QuoteIdMaskFactory $quoteIdMaskFactory,
CheckoutTotalsInformationManagement $checkoutTotalsInformationManagement,
CartRepositoryInterface $cartRepository,
Total $total,
CartTotalRepositoryInterface $cartTotalRepository
)
{
$this->quoteIdMaskFactory = $quoteIdMaskFactory;
$this->cartRepository = $cartRepository;
$this->checkoutTotalsInformationManagement = $checkoutTotalsInformationManagement;
$this->total = $total;
$this->cartTotalRepository = $cartTotalRepository;
}
/**
* @param string $cartId
* @param \Magento\Checkout\Api\Data\TotalsInformationInterface $addressInformation
*
* @return string
* @throws \Magento\Framework\Exception\LocalizedException
*/
public function collect(
$cartId,
\Magento\Checkout\Api\Data\TotalsInformationInterface $addressInformation
)
{
try {
$quote = $this->cartRepository->get($cartId);
} catch (\Magento\Framework\Exception\NoSuchEntityException $e) {
\Magento\Framework\App\ObjectManager::getInstance()->get('Psr\Log\LoggerInterface')->info($e->getMessage());
return '';
}
$totals = $this->cartTotalRepository->get($quote->getId());
$totalSagement = [];
foreach ($totals->getTotalSegments() as $totalSegment) {
$totalSegmentArray = $totalSegment->toArray();
$totalSagement[$totalSegmentArray['code']] = $totalSegmentArray['value'];
}
$returnArr = json_encode($totalSagement);
return $returnArr;
}
}
Also, if you liked the post, share it to get maximum Magento people to use this functionality.