У меня возникла проблема с переопределением модели OrderSender в Magento 2 в результате создания пользовательского платежного модуля.
Прежде всего, я не смог предотвратить отправку электронной почты после того, как заказ сделан (успешный или неуспешный), что было проблемой, поэтому я решил создать поток, который переопределяет OrderSender с использованием рекомендованного процесса. указав файл настроек в модуле, т.е.
class OrderSender extends \Magento\Sales\Model\Order\Email\Sender\OrderSender{
/**
* Sends order email to the customer.
*
* Email will be sent immediately in two cases:
*
* - if asynchronous email sending is disabled in global settings
* - if $forceSyncMode parameter is set to TRUE
*
* Otherwise, email will be sent later during running of
* corresponding cron job.
*
* @param Order $order
* @param bool $forceSyncMode
* @return bool
*/
public function send(Order $order, $forceSyncMode = false)
{
$payment = $order->getPayment()->getMethodInstance()->getCode();
//allow other module or payment to proceed should in case it is not my payment module is calling for order sender.
if($payment == 'afronijapay' && !$forceSyncMode){
return false;
}
$order->setSendEmail(true);
if (!$this->globalConfig->getValue('sales_email/general/async_sending') || $forceSyncMode) {
if ($this->checkAndSend($order)) {
$order->setEmailSent(true);
$this->orderResource->saveAttribute($order, ['send_email', 'email_sent']);
return true;
}
}
$this->orderResource->saveAttribute($order, 'send_email');
return false;
}}
, как показано выше, поэтому все работало нормально, и я должен был отправить электронное письмо после завершения процесса, а затем, после успешного платежа, позвонил следующим.
//send new order email
$this->_checkout_session->setForceOrderMailSentOnSuccess(true);
$this->_orderSender->send($order, true);
Опять же, я нашел это как некое предлагаемое решение из нескольких источников, включая stackoverflow / stackexchange и все.
Однако, насколько это работает, возникает другая проблема, а именно: что, если кто-то уже переопределяет этот класс из другого модуля, а Magento 2 использует этот переопределяемый класс без моего, тогда проблема может возникнуть снова.
Я построил еще один платежный модуль (просто копию оригинала), используя другое пространство имен и имя поставщика, и у меня возник страх, когда Magento 2 игнорирует один из классов, переопределяющих класс OrderSender, и использует другой, тем самым создавая проблему для начать заново.
Буду признателен за любые предложения по решению этой проблемы. Спасибо.