ग्राहक उद्धरण के साथ मर्ज अतिथि उद्धरण (यदि कस्टमर लॉग इन) Magento 2 बाकी एपीआई


9

यदि कार्ट में 2 आइटम ग्राहक लॉगिन करते हैं तो दोनों आइटमों को कार्ट में जोड़ने की आवश्यकता होगी, दोनों बोली (लॉगिन से पहले और लॉगिन के बाद) मर्ज करें और अंतिम उद्धरण बनाएं जिसमें ग्राहक बोली के सभी आइटम शामिल हों

Refference लिंक जो मुझे google में मिला

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

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


कृपया प्रश्न को और स्पष्ट करें। क्योंकि Magento 2.2 डिफ़ॉल्ट कार्यक्षमता प्रदान करता है।
योगेश

क्या यह संभव है यदि ग्राहक लॉगिन कार्ट कार्ट आइटम को कस्टमर कार्ट में जोड़ें, यदि संभव हो तो कृपया समझाएं, REST API का उपयोग करके।
नागेंद्र कोडी

@Yogesh मेरे उत्पाद API उत्पादों को लौटाता है, अगर मैं ग्राहक के साथ प्रयास करता हूं तो मुझे त्रुटि हो रही है, मेरा url: 192.168.1.65/anusthana/api/rest/customers त्रुटि: snag.gy/0jbhTr.jpg आप मेरी मदद कर सकते हैं
zus

जवाबों:


2

डिफ़ॉल्ट रूप से, API पक्ष में Magento 2 ग्राहक लॉगिन के साथ ग्राहक कार्ड के साथ मर्ज अतिथि कार्ट के लिए कोई एपीआई प्रदान नहीं करता है।

लेकिन आप गेस्ट कार्ट को कस्टमर कार्ट से बदल सकते हैं।

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

लेकिन अगर आप कार्यक्षमता को विकसित करना चाहते हैं मर्ज गाड़ी लाइव मैगनेटो वेब साइड आपको कस्टम एपीआई बनाने की आवश्यकता है।


0

आपको अपने कस्टम एक्सटेंशन में "अराउंड" प्लगइन बनाने की आवश्यकता है।

एप्लिकेशन / कोड / MageKnight / उद्धरण / 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>

एप्लिकेशन / कोड / MageKnight / उद्धरण / registration.php

<?php

use \Magento\Framework\Component\ComponentRegistrar;

ComponentRegistrar::register(ComponentRegistrar::MODULE, 'MageKnight_Quote', __DIR__);

एप्लिकेशन / कोड / MageKnight / उद्धरण / 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>

एप्लिकेशन / कोड / MageKnight / उद्धरण / प्लगइन / मॉडल / 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;
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.