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

Posted

技术标签:

【中文标题】完成付款后停止 Magento 发送自动发票【英文标题】:Stop Magento sending auto invoice after completed payment 【发布时间】:2013-01-09 21:56:00 【问题描述】:

问题是,我想通过 API 手动发送它们,因为在我的国家,发票是受法律约束的订单。 有没有办法做到这一点?

感谢您的帮助!

【问题讨论】:

【参考方案1】:

转到系统->配置->销售电子邮件并禁用“发票”。

欢呼 西蒙

【讨论】:

抱歉不是这样。它只是不再发送电子邮件,但仍会创建它们并将状态设置为“已完成”,这是错误的。 好的,但那是你的问题 :) 问一个新的,然后【参考方案2】:

我不认为接受的答案是解决问题的最佳方法。如果您从后端完全禁用自动交易电子邮件,您也无法手动触发它们或在您的自定义模块中使用它们。这意味着,如果您需要在另一个时间点将其作为 magento 标准发送,则必须创建从头开始禁用的每封交易电子邮件,这也是事后需要进行的大量维护工作。

我想出的解决方案是以编程方式禁用在创建发票时发送电子邮件,并在自定义观察者事件中利用默认发件人类。在我们的例子中,我们希望在创建货件时发送发票电子邮件。

您可以通过覆盖 \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);
                       


    

观察者被事件sales_order_shipment_save_after触发

<?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>

您可以对每封交易电子邮件执行此操作。

【讨论】:

...但是您意识到这个问题是针对 Magento 1 提出的,对吧? ;) 您的解决方案很好,但仅适用于 Magento 2。 此解决方案还可以阻止订单电子邮件 @DushyantJoshi 由于仅更改了发票模型,因此所有其他交易邮件都应该可以正常工作。您是否仔细检查了配置? @Tobi 通过评论$this-&gt;notifierInterface-&gt;notify($order, $invoice, $comment); 它甚至还发送发票电子邮件。

以上是关于完成付款后停止 Magento 发送自动发票的主要内容,如果未能解决你的问题,请参考以下文章

Magento 中的 Paypal 状态

如何在 Magento 的观察者中获取付款方式?

如何在 Magento 中关闭 PayPal IPN?

在magento中完成付款后的“涉嫌欺诈”状态?

Magento 1.9.1.0 订单确认未发送

Magento:如何为部分付款创建模块?