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

Enable payment gateway for Particular products - Magento 2

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

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

请帮助解决以下问题。

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

请帮忙。

如果您想根据某些条件启用或禁用某些付款方式,您可以使用 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 如果应该启用支付方式 ("available") 或 false 如果它应该被禁用。

使用这 3 个对象,您可以

  • 根据某些条件确定付款方式是否是您要禁用的方式
  • 获取报价中的产品及其属性
  • 说明是否应启用付款方式的结果。
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);
    }
}

如您所见,我没有填写所有的空白,我希望这个例子能指导您朝着正确的方向前进。