完成付款后停止Magento发送自动发票

完成付款后停止Magento发送自动发票,magento,paypal,payment,invoice,Magento,Paypal,Payment,Invoice,问题是,我想通过API手动发送它们,因为在我的国家,发票是合法的绑定订单。 有办法吗 谢谢你的帮助 进入系统->配置->销售电子邮件并禁用“发票” 切雷斯 西蒙我不认为公认的答案是解决这个问题的最好办法。如果您完全从后端禁用自动事务性电子邮件,您也无法手动触发它们或在自定义模块中使用它们。这意味着,如果您需要在另一个时间点以magento standart的身份发送邮件,您必须从头开始创建您禁用的所有事务性电子邮件,这也是一项相当大的后续维护工作 我提出的解决方案是通过编程禁用在创建发票时发送电

问题是,我想通过API手动发送它们,因为在我的国家,发票是合法的绑定订单。 有办法吗


谢谢你的帮助

进入系统->配置->销售电子邮件并禁用“发票”

切雷斯
西蒙

我不认为公认的答案是解决这个问题的最好办法。如果您完全从后端禁用自动事务性电子邮件,您也无法手动触发它们或在自定义模块中使用它们。这意味着,如果您需要在另一个时间点以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>