Magento 2: Come funziona la funzione API di resto della spedizione chiamata Al momento del pagamento?


9

Quando fai clic su "Spedisci qui" nella pagina di pagamento che chiama

/ V1 / carrelli / miniera / preventivo-trasporto-metodi-di-indirizzo-id Magento / riposo / default

Quindi passa ai file JS seguenti

Magento \ vendor \ Magento \ module-out \ vista \ frontend \ web \ js \ modello \ il trasporto-rate-processore \ cliente-address.js

Magento \ vendor \ Magento \ module-out \ Visualizza \ frontend \ web \ js \ modello \ 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-citazione \ modello \ ShippingMethodManagement.php

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

Come estimateByAddressIdviene chiamata la funzione sopra ?

Risposte:


6

Come hai sottolineato, quando fai clic su "Spedisci qui" una richiesta HTTP POST viene inviata "/V1/carts/mine/estimate-shipping-methods-by-address-id"all'API REST (dal modulo preventivo). Se dai un'occhiata module-quote/etc/webapi.xmltroverai l'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>

Si può notare che sotto l' <route>elemento è presente l' <service>elemento con class="Magento\Quote\Api\GuestShipmentEstimationInterface"e method="estimateByExtendedAddress". Ora ovviamente, il estimateByAddressIdmetodo non può essere istanziato da un'interfaccia.

Ecco che arriva l'iniezione di dipendenza magento 2. Guarda il module-quote/etc/di.xmlfile che mappa una Magento\Quote\Api\ShippingMethodManagementInterfacedipendenza interfaccia ( ) su una classe di implementazione preferita ( Magento\Quote\Model\ShippingMethodManagement).

<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>

Ecco come estimateByAddressIdviene chiamato il metodo.

Link utili:

API Web Magento 2:
http://devdocs.magento.com/guides/v2.0/get-started/bk-get-started-api.html
http://devdocs.magento.com/guides/v2.0/ estensione-dev-guida / service-contratti / service-to-web-service.html

Iniezione di dipendenza Magento 2:
http://devdocs.magento.com/guides/v2.0/extension-dev-guide/depend-inj.html
http://magento-quickies.alanstorm.com/post/68129858943/magento- 2 iniettano interfacce

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.