为特定产品启用支付网关 - 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的主要内容,如果未能解决你的问题,请参考以下文章