由于创建自定义支付模块,我在覆盖 Magento 2 中的 OrderSender 模型时遇到了一段时间的问题。
首先,一旦下订单(无论成功与否),我无法阻止发送电子邮件,这是一个问题,所以我决定创建一个流程,通过指定使用建议的流程覆盖 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 类并使用另一个类从而使问题重新开始发生。
我将不胜感激有关如何解决此问题的任何建议。谢谢。