Magento 2 注册回调 Url / webbook 例如添加到购物车而不更改 Magento 中的代码

Magento 2 register call back Url / webbook for e.g. add to cart without code changes in Magento

有没有办法从 magento2 注册 web hook 之类的函数,其中外部 API 在 magneto 网站上进行某些操作时被调用(将产品添加到购物车,添加发货等)

我需要从 API 执行此操作,Magento 站点托管在不同的终端(客户端),我几乎无法控制它。只是我想在 API 调用 magento 网站时做所有事情,

我知道可以通过 woocommerce 将我的外部 API 注册到 woocommerce 站点,然后我可以从那里将我的应用程序注册为回调。这一切都可以通过 API 调用 woocommerce 网站来完成,无需从 woocommerce 网站更改任何源代码。

有没有人对此有所了解,请给我一条参考路径。

对于这些情况,Magento 事件/观察者设计模式将是合适的,另请参阅 documentation

因此,例如,要将产品添加到购物车 webhook,您可以使用 checkout_cart_product_add_after 事件。

您的模块应如下所示:

app/code/Company/Module/registration.php:

<?php
declare(strict_types = 1);

use Magento\Framework\Component\ComponentRegistrar;

ComponentRegistrar::register(
    ComponentRegistrar::MODULE,
    'Company_Module',
    __DIR__
);

app/code/Company/Module/etc/module.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/code/Company/Module/etc/events.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/code/Company/Module/Observer/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();
    }
}

从命令行添加这些文件后 运行 php bin/magento setup:upgrade 以启用模块。

如果您将其设为开源作曲家包,那么他们只需安装该包并进行一些配置。那就是要走的路。

然而,从 Magento 外部观察这些事件是不可能的。因此,如果您真的无法在 Magento 中进行任何更改,您可以做的是轮询 Magento api 以获取新的 quotes/shipments.

例如使用 Magento Rest API 获取发货清单(建议使用发送日期 from/to 过滤器):https://magento.redoc.ly/2.4.3-admin/tag/shipments#operation/salesShipmentRepositoryV1GetListGet