为特定产品启用支付网关 - Magento 2

Posted

技术标签:

【中文标题】为特定产品启用支付网关 - Magento 2【英文标题】:Enable payment gateway for Particular products - Magento 2 【发布时间】:2019-12-09 05:49:19 【问题描述】:

我只想为某些产品启用支付网关。在我的网站上,我有货到付款和其他支付网关。应为每种产品启用货到付款。

为此,我在产品部分创建了一个名为支付网关的属性。它是带有 yes 和 No 作为值的下拉属性。所以这个属性现在在产品端可见。当我们添加或编辑产品时,我们可以看到这个属性。

请在以下方面提供帮助。

现在在结帐页面中,我必须在结帐时检查产品是否已启用支付网关。如果是,那么我只需要显示支付网关,否则应该是货到付款。我怎样才能做到这一点 ?

请帮忙。

【问题讨论】:

您需要自定义创建此功能,也可以购买市场上可用的扩展程序。像这样,store.webkul.com/… 【参考方案1】:

如果您想根据某些条件启用或禁用某些付款方式,您可以使用payment_method_is_active 事件。

payment_method_is_active 事件中,您可以访问 3 个参数:

$observer->getEvent()->getData('method_instance),付款方式 $observer->getEvent()->getData('quote'),报价正在处理中 $observer->getEvent()->getData('result'),包含结果的数据对象

在结果中定义了is_available,如果应启用(“可用”)付款方式,则为true,如果应禁用付款方式,则为false

有了这三个对象,你可以

根据某些标准确定付款方式是否是您要禁用的方式 获取报价中的产品及其属性 结果表明是否应启用付款方式。
class DisablePaymentMethodBasedOnSomething implements ObserverInterface 
    public function execute($observer) 
        $event = $observer->getEvent();
        $method = $event->getData('method_instance');
        $quote = $event->getData('quote');
        $result = $event->getData('result');

        if (payment method is not cash on delivery) 
            return;
        

        if (quote does not contain products with gateway attribute) 
            return;
        

        $result->setData('...', false);
    

如您所见,我没有填写所有空白,我希望该示例将引导您朝着正确的方向前进。

【讨论】:

嗨 Julian,你能告诉我把这段代码放在哪里吗? 您能否帮我在循环中获取购物车产品的自定义属性值 我建议多学习一点关于 Magento 中的事件和观察者的知识,否则你肯定会在尝试实现它时遇到很多问题。在“获取我的购物车产品的自定义属性值”的情况下,这可以通过事件中可用的$quote 对象来完成。使用此报价对象,您可以获得报价(购物车)中的产品以及它们的属性。

以上是关于为特定产品启用支付网关 - Magento 2的主要内容,如果未能解决你的问题,请参考以下文章

什么是“网关”? (在 Magento 支付的情况下)

Magento 自定义支付网关

Magento 自定义支付网关未触发“授权”或“捕获”方法

使用 Magento 中的 EBS 支付网关进行定期支付(EMI)

Magento - 自动重定向到配置的支付网关之一

是否可以从另一个网站将产品添加到 Magento 购物车,而产品不在 magento 商店中