Magento 2: Wie funktioniert die Versand-Rest-API-Funktion On Checkout?

9

Wenn Sie auf der Checkout-Seite auf "Hier versenden" klicken, wird aufgerufen

magento / rest / default / V1 / carts / mine / Schätzung-Versandmethoden-nach-Adresse-ID

Dann geht es unter JS-Dateien

magento \ vendor \ magento \ module-checkout \ view \ frontend \ web \ js \ model \ versandkostenprozessor \ kundenadresse.js

magento \ vendor \ magento \ module-checkout \ view \ frontend \ web \ js \ model \ resource-url-manager.js

getUrlForEstimationShippingMethodsByAddressId: function(quote) {
    var params = (this.getCheckoutMethod() == 'guest') ? {quoteId: quote.getQuoteId()} : {};
    var urls = {
        'default': '/carts/mine/estimate-shipping-methods-by-address-id'
    };
    return this.getUrl(urls, params);
}

magento \ vendor \ magento \ module-quote \ Model \ ShippingMethodManagement.php

 public function estimateByAddressId($cartId, $addressId)
    {
      echo 1;exit;
    }

Wie wird die obige Funktion estimateByAddressIdaufgerufen?

Ankit Shah
quelle

Antworten:

6

Wie Sie bereits betont haben, wird beim Klicken auf "Hier versenden" eine HTTP-POST-Anforderung an die "/V1/carts/mine/estimate-shipping-methods-by-address-id"REST-API gesendet (aus dem Modulangebot). Wenn Sie sich das ansehen module-quote/etc/webapi.xml, finden Sie die URL:

<route url="/V1/carts/mine/estimate-shipping-methods-by-address-id" method="POST">
  <service class="Magento\Quote\Api\ShippingMethodManagementInterface" method="estimateByAddressId"/>
  <resources>
    <resource ref="self" />
  </resources>
  <data>
    <parameter name="cartId" force="true">%cart_id%</parameter>
  </data>
</route>

Sie können feststellen, dass sich unter dem <route>Element ein <service>Element mit dem class="Magento\Quote\Api\GuestShipmentEstimationInterface"und befindet method="estimateByExtendedAddress". Offensichtlich kann die estimateByAddressIdMethode nicht über eine Schnittstelle instanziiert werden.

Hier kommt in Szene die Magento 2-Abhängigkeitsinjektion. Sehen Sie sich eine module-quote/etc/di.xmlDatei an, die eine interface ( Magento\Quote\Api\ShippingMethodManagementInterface) - Abhängigkeit einer bevorzugten Implementierungsklasse ( Magento\Quote\Model\ShippingMethodManagement) zuordnet.

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Magento\Quote\Api\ShippingMethodManagementInterface" type="Magento\Quote\Model\ShippingMethodManagement" />
    ...................
</config>

So wird die estimateByAddressIdMethode aufgerufen.

Nützliche Links:

Magento 2-Web-APIs:
http://devdocs.magento.com/guides/v2.0/get-started/bk-get-started-api.html
http://devdocs.magento.com/guides/v2.0/ extension-dev-guide / service-verträge / service-to-web-service.html

Magento 2-Abhängigkeitsinjektion:
http://devdocs.magento.com/guides/v2.0/extension-dev-guide/depend-inj.html
http://magento-quickies.alanstorm.com/post/68129858943/magento- 2-injizierende Schnittstellen

Alex Constantinescu
quelle