完成付款后停止Magento发送自动发票
问题是,我想通过API手动发送它们,因为在我的国家,发票是合法的绑定订单。 有办法吗完成付款后停止Magento发送自动发票,magento,paypal,payment,invoice,Magento,Paypal,Payment,Invoice,问题是,我想通过API手动发送它们,因为在我的国家,发票是合法的绑定订单。 有办法吗 谢谢你的帮助 进入系统->配置->销售电子邮件并禁用“发票” 切雷斯 西蒙我不认为公认的答案是解决这个问题的最好办法。如果您完全从后端禁用自动事务性电子邮件,您也无法手动触发它们或在自定义模块中使用它们。这意味着,如果您需要在另一个时间点以magento standart的身份发送邮件,您必须从头开始创建您禁用的所有事务性电子邮件,这也是一项相当大的后续维护工作 我提出的解决方案是通过编程禁用在创建发票时发送电
谢谢你的帮助 进入系统->配置->销售电子邮件并禁用“发票” 切雷斯
西蒙我不认为公认的答案是解决这个问题的最好办法。如果您完全从后端禁用自动事务性电子邮件,您也无法手动触发它们或在自定义模块中使用它们。这意味着,如果您需要在另一个时间点以magento standart的身份发送邮件,您必须从头开始创建您禁用的所有事务性电子邮件,这也是一项相当大的后续维护工作 我提出的解决方案是通过编程禁用在创建发票时发送电子邮件,并在自定义观察者事件中利用默认发件人类。在我们的情况下,我们希望在创建装运时发送发票电子邮件 您可以通过覆盖\Magento\Sales\Model\InvoiceOrder来实现这一点。找到线路
$this->notifierInterface->notify($order, $invoice, $comment);
并将其移除。
如果您想触发电子邮件,您仍然可以使用InvoiceSender的标准“发送”功能在任何地方触发。在我们的例子中,我们触发来自观察者的电子邮件,如下所示:
<?php
namespace Vendor\Module\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Sales\Model\Order;
use Magento\Sales\Model\Order\Email\Sender\InvoiceSender;
class SendInvoiceWithShipment implements ObserverInterface
{
protected $_invoiceSender;
public function __construct(
InvoiceSender $invoiceSender
) {
$this->_invoiceSender = $invoiceSender;
}
public function execute(\Magento\Framework\Event\Observer $observer)
{
$order = $observer->getShipment()->getOrder();
$invoices = $order->getInvoiceCollection();
foreach ($invoices as $invoice) {
// this is where the magic happens
$this->_invoiceSender->send($invoice);
}
}
}
您可以对每封事务性电子邮件执行此操作。抱歉,不是这样。它只是不再发送电子邮件,但仍然创建它们,并且仍然将状态设置为“已完成”,这是错误的。好吧,但这是你的问题:)问一个新的,然后……但你知道这个问题是针对Magento 1提出的,对吗?;)您的解决方案很好,但仅适用于Magento 2。
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name='sales_order_shipment_save_after'>
<observer name='SendInvoiceWithShipment' instance='Vendor\Module\Observer\SendInvoiceWithShipment'
/>
</event>
</config>