Magento 2: Comment l'expédition de la fonction api reste appelée On Checkout?

9

Lorsque vous cliquez sur "Expédier ici" sur la page de paiement, il appelle

magento / reste / par défaut / V1 / chariots / mien / estimation-expédition-méthodes-par-adresse-id

Ensuite, il passe aux fichiers JS ci-dessous

magento \ vendor \ magento \ module-checkout \ view \ frontend \ web \ js \ model \ shipping-rate-processor \ customer-address.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;
    }

Comment la fonction ci-dessus estimateByAddressIdest-elle appelée?

Ankit Shah
la source

Réponses:

6

Comme vous l'avez souligné, lorsque vous cliquez sur "Expédier ici", une demande HTTP POST est envoyée à l' "/V1/carts/mine/estimate-shipping-methods-by-address-id"API REST (à partir de module-quote). Si vous regardez, module-quote/etc/webapi.xmlvous trouverez 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>

Vous pouvez remarquer que sous l' <route>élément il y a un <service>élément avec le class="Magento\Quote\Api\GuestShipmentEstimationInterface"et method="estimateByExtendedAddress". Maintenant, évidemment, la estimateByAddressIdméthode ne peut pas être instanciée à partir d'une interface.

Voici en scène l'injection de dépendances magento 2. Regardez le module-quote/etc/di.xmlfichier qui mappe une Magento\Quote\Api\ShippingMethodManagementInterfacedépendance d' interface ( ) à une classe d'implémentation préférée ( 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>

C'est ainsi que la estimateByAddressIdméthode est appelée.

Liens utiles:

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/ extension-dev-guide / service-contrats / service-to-web-service.html

Injection de dépendance 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 d'injection

Alex Constantinescu
la source