Magento 2: Como a API de descanso de remessa funciona chamada No check-out?

9

Quando você clica em "Enviar aqui" na página de checkout, ele chama

magento / rest / default / V1 / carts / mine / estimativa-métodos-de-envio-por-endereço-id

Então ele vai para os arquivos JS abaixo

magento \ fornecedor \ magento \ verificação de módulo \ visualização \ frontend \ web \ js \ modelo \ processador de taxa de remessa \ endereço de cliente.js

magento \ fornecedor \ magento \ verificação de módulo \ visualização \ 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 \ fornecedor \ magento \ cotação do módulo \ Model \ ShippingMethodManagement.php

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

Como a função acima estimateByAddressIdé chamada?

Ankit Shah
fonte

Respostas:

6

Como você apontou, quando você clica em "Enviar aqui", uma solicitação HTTP POST é despachada para a "/V1/carts/mine/estimate-shipping-methods-by-address-id"API REST (da cotação do módulo). Se você der uma olhada module-quote/etc/webapi.xml, encontrará o 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>

Você pode perceber que, sob o <route>elemento, há um <service>elemento com class="Magento\Quote\Api\GuestShipmentEstimationInterface"e method="estimateByExtendedAddress". Agora, obviamente, o estimateByAddressIdmétodo não pode ser instanciado a partir de uma interface.

Aqui entra em cena a injeção de dependência do magento 2. Veja o module-quote/etc/di.xmlarquivo que mapeia uma Magento\Quote\Api\ShippingMethodManagementInterfacedependência de interface ( ) para uma classe de implementação preferida ( 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>

É assim que o estimateByAddressIdmétodo é chamado.

Links Úteis:

APIs da Web Magento 2:
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-contract / service-to-web-service.html

Injeção de dependência do Magento 2:
http://devdocs.magento.com/guides/v2.0/extension-dev-guide/depend-inj.html
http://magento-quickies.alanstorm.com/post/68129858943/magento- 2 interfaces de injeção

Alex Constantinescu
fonte