¿Hay alguna forma de magento2 para registrar una función similar a un enlace web donde se solicita una API externa para alguna operación en el sitio de magneto (agregar producto al carrito, agregar envío ... etc.)
Necesito hacer esto desde la API, donde el sitio de Magento está alojado en un extremo (cliente) diferente. Tengo muy poco control sobre él. Solo quería hacer todo en la llamada API al sitio de magento,
Sé que es posible con woocommerce donde podemos registrar mi API externa en el sitio de woocommerce y desde allí puedo registrar mi aplicación como devolución de llamada. Todo esto se puede hacer con solo llamadas API al sitio de woocommerce sin cambios en el código fuente del sitio de woocommerce.
¿Alguien tiene alguna idea sobre esto? Por favor, dame un camino a las referencias.
Para estos casos, el patrón de diseño de evento/observador de Magento sería adecuado; consulte también la documentación .
Entonces, por ejemplo, para agregar un producto al carrito webhook, puede usar el evento checkout_cart_product_add_after.
Su módulo debería verse así:
app/código/Empresa/Módulo/registro.php:
<?php declare(strict_types = 1); use Magento\Framework\Component\ComponentRegistrar; ComponentRegistrar::register( ComponentRegistrar::MODULE, 'Company_Module', __DIR__ );app/código/Empresa/Módulo/etc/módulo.xml:
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <module name="Company_Module"/> </config>app/código/Empresa/Módulo/etc/eventos.xml:
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="checkout_cart_product_add_after"> <observer name="company_module_checkout_cart_product_add_after" instance="Company\Module\Observer\CheckoutCartProductAddAfter" /> </event> </config>app/código/Empresa/Módulo/Observador/CheckoutCartProductAddAfter.php:
<?php declare(strict_types = 1); namespace Company\Module\Observer; use Magento\Framework\Event\Observer; use Magento\Framework\Event\ObserverInterface; class CheckoutCartProductAddAfter implements ObserverInterface { /** * Execute observer * * @param Observer $observer * @return void */ public function execute( Observer $observer ): void { // Your code logic here, like: $item = $observer->getEvent()->getQuoteItem(); $product = $item->getProduct(); $data = $this->_request->getParams(); } } Después de agregar estos archivos, ejecute php bin/magento setup:upgrade desde la línea de comandos para habilitar el módulo.
Si hace de este un paquete de compositor de código abierto, solo tienen que instalar el paquete y hacer una pequeña configuración. Ese sería el camino a seguir.
Sin embargo, no es posible observar estos eventos desde fuera de Magento. Entonces, si realmente no puede realizar ningún cambio en Magento, lo que puede hacer es sondear la API de Magento para obtener nuevas cotizaciones/envíos.
Por ejemplo, obtener una lista de envíos con Magento Rest API (se recomienda filtrar la fecha de envío desde/hasta): https://magento.redoc.ly/2.4.3-admin/tag/shipments#operation/salesShipmentRepositoryV1GetListGet