ゲストの見積もりと顧客の見積もりをマージします(カスタママーがログインしている場合)magento 2 rest api


9

カートに2つのアイテムがある場合、顧客が両方のアイテムにカートを追加する必要がある場合、両方の見積もり(ログイン前とログイン後)がマージされ、顧客の見積もりの​​すべてのアイテムを含む最終見積もりが作成されます。

Googleで取得した参照リンク

https://magento.stackexchange.com/a/62481

https://magento.stackexchange.com/a/30460


質問をもっと明確にしてください。magento 2.2がデフォルトの機能を提供するためです。
Yogesh

顧客ログインが顧客カートにカートアイテムを追加する場合、可能であれば、REST APIの使用について説明してください。
Nagendra Kodi 2017年

@Yogesh私の製品APIは製品を返します。顧客と試してみると、エラーが発生します。私のURL:192.168.1.65/anusthana/api/rest/customers error:snag.gy/0jbhTr.jpg can u help me
zus

回答:


2

デフォルトでは、API側のMagento 2は、顧客がログインしている場合、顧客カード付きのMergeゲストカート用のAPIを提供しません。

ただし、ゲストカートをカスタマーカートに置き換えることができます。

API : (/V1/carts/:cartId) 
File : vendor/magento/module-quote/Model/QuoteManagement.php
Function : public function assignCustomer($cartId, $customerId, $storeId)

ただし、機能をマージする場合は、Merge cart Live Magento WebサイドでカスタムAPIを作成する必要があります。


0

カスタム拡張で「アラウンド」プラグインを作成する必要があります。

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;
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.