si hay 2 artículos en el carrito, si el inicio de sesión del cliente, ambos artículos deben agregar el carrito.
Enlaces de referencia que obtuve en google
si hay 2 artículos en el carrito, si el inicio de sesión del cliente, ambos artículos deben agregar el carrito.
Enlaces de referencia que obtuve en google
Respuestas:
De manera predeterminada, Magento 2 en el lado API no proporciona ninguna API para combinar el carrito de invitados con la tarjeta del cliente cuando el cliente inicia sesión.
Pero puede reemplazar el carrito de invitados con el carrito del cliente.
API : (/V1/carts/:cartId)
File : vendor/magento/module-quote/Model/QuoteManagement.php
Function : public function assignCustomer($cartId, $customerId, $storeId)
Pero si desea desarrollar la funcionalidad del carrito web Merge Live Magento necesita crear una API personalizada.
Debe crear el complemento "Alrededor" en su extensión personalizada.
app / code / MageKnight / Quote / etc / module.xml
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="MageKnight_Quote">
<sequence>
<module name="Magento_Quote"/>
</sequence>
</module>
</config>
app / code / MageKnight / Quote / Registration.php
<?php
use \Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(ComponentRegistrar::MODULE, 'MageKnight_Quote', __DIR__);
app / code / MageKnight / Quote / etc / di.xml
<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Quote\Api\CartManagementInterface">
<plugin name="mergeGuestCart"
type="MageKnight\Quote\Plugin\Model\CartManagement"/>
</type>
</config>
app / code / MageKnight / Quote / Plugin / Model / CartManagement.php
<?php
namespace MageKnight\Quote\Plugin\Model;
use Magento\Framework\Exception\StateException;
/**
* Class CartManagement
*/
class CartManagement
{
/**
* @var \Magento\Quote\Api\CartRepositoryInterface
*/
protected $quoteRepository;
/**
* @var \Magento\Customer\Api\CustomerRepositoryInterface
*/
protected $customerRepository;
/**
* @var \Magento\Customer\Model\CustomerFactory
*/
protected $customerModelFactory;
/**
* @var \Magento\Quote\Model\QuoteIdMaskFactory
*/
private $quoteIdMaskFactory;
/**
* @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
* @param \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository
* @param \Magento\Customer\Model\CustomerFactory $customerModelFactory
* @param \Magento\Quote\Model\QuoteIdMaskFactory $quoteIdMaskFactory
*/
public function __construct(
\Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
\Magento\Customer\Api\CustomerRepositoryInterface $customerRepository,
\Magento\Customer\Model\CustomerFactory $customerModelFactory,
\Magento\Quote\Model\QuoteIdMaskFactory $quoteIdMaskFactory
) {
$this->quoteRepository = $quoteRepository;
$this->customerRepository = $customerRepository;
$this->customerModelFactory = $customerModelFactory;
$this->quoteIdMaskFactory = $quoteIdMaskFactory;
}
/**
* Around plugin to assign customer to guest cart
*
* @param \Magento\Quote\Api\CartManagementInterface $subject
* @param callable $proceed
* @param int $cartId The cart ID.
* @param int $customerId The customer ID.
* @param int $storeId
* @return boolean
*/
public function aroundAssignCustomer(
\Magento\Quote\Api\CartManagementInterface $subject,
callable $proceed,
$cartId,
$customerId,
$storeId
) {
$quote = $this->quoteRepository->getActive($cartId);
$customer = $this->customerRepository->getById($customerId);
$customerModel = $this->customerModelFactory->create();
if (!in_array($storeId, $customerModel->load($customerId)->getSharedStoreIds())) {
throw new StateException(
__("The customer can't be assigned to the cart. The cart belongs to a different store.")
);
}
if ($quote->getCustomerId()) {
throw new StateException(
__("The customer can't be assigned to the cart because the cart isn't anonymous.")
);
}
try {
$customerActiveQuote = $this->quoteRepository->getForCustomer($customerId);
} catch (\Magento\Framework\Exception\NoSuchEntityException $e) {
$customerActiveQuote = false;
}
if ($customerActiveQuote) {
/** Merge carts */
$quote->merge($customerActiveQuote);
$this->quoteRepository->delete($customerActiveQuote);
}
$quote->setCustomer($customer);
$quote->setCustomerIsGuest(0);
$quote->setStoreId($storeId);
$quote->setIsActive(1);
/** @var \Magento\Quote\Model\QuoteIdMask $quoteIdMask */
$quoteIdMask = $this->quoteIdMaskFactory->create()->load($cartId, 'quote_id');
if ($quoteIdMask->getId()) {
$quoteIdMask->delete();
}
$this->quoteRepository->save($quote);
return true;
}
}