m2 控制前台payment method显示隐藏
m2 控制前台payment method显示隐藏
比如需求是:
B2B 的唯一支付方式为 checkmo 这个支付方式,在checkout 页面需要隐藏所有其他的。 同时,如果不是 b2b用户,那么隐藏checkmo,这个支付方式不能被普通用户选择。
如果重写每个payment method的代码就太麻烦了。
幸好magento给我们提供了一个event为payment_method_is_active。
在events.xml里定义
<event name="payment_method_is_active"> <observer name="yozen_payment_method_is_active" instance="Zou\Test\Observer\CheckPaymentMethod" /> </event>
然后写php逻辑
在Observer/CheckPaymentMethod.php里
<?php namespace Zou\Test\Observer; use Magento\Framework\Event\ObserverInterface; use Magento\Framework\Exception\LocalizedException; class CheckPaymentMethod implements ObserverInterface { protected $helper; public function __construct( \Zou\Test\Helper\Data $helper ){ $this->helper = $helper; } /** * @param EventObserver $observer * @return $this * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function execute(\Magento\Framework\Event\Observer $observer) { $result = $observer->getEvent()->getResult(); $methodInstance = $observer->getEvent()->getMethodInstance(); $code = $methodInstance->getCode(); //$quote = $observer->getEvent()->getQuote(); //echo $code; if ($this->helper->checkIsB2bCustomer()) { $result->setData('is_available', false); if($code == 'checkmo'){ $result->setData('is_available', true); } }else{ $result->setData('is_available', true); if($code == 'checkmo'){ $result->setData('is_available', false); } } return $this; } }
这样就行了
最后于 7月前 被admin编辑 ,原因:
admin 编辑问题