首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >订单以Magento2.2支付后自动发送发票电子邮件

订单以Magento2.2支付后自动发送发票电子邮件
EN

Stack Overflow用户
提问于 2019-02-20 20:17:52
回答 1查看 2.4K关注 0票数 2

我试图触发客户发票邮件后,已付款的订单和发票已经创建。支付网关是PayPal +和Amazon。如果我正确理解,这些网关会在订单成功处理后立即自动创建发票。

这是我编写的模块,但是在激活它和清除缓存之后什么都不会发生:

app/code/Vendor/AutoSendInvoice/etc/events.xml

代码语言:javascript
复制
    <?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_invoice_register">
            <observer name="VendorAutoSendInvoice" instance="Vendor\AutoSendInvoice\Observer\AutoSendInvoice" />
        </event>
    </config>

这是观察者app/code/Vendor/AutoSendInvoice/Observer/AutoSendInvoice.php

代码语言:javascript
复制
<?php
namespace Vendor\AutoSendInvoice\Observer;

use Magento\Framework\Event\ObserverInterface;
use Magento\Sales\Model\Order;
use Magento\Sales\Model\Order\Email\Sender\InvoiceSender;
use \Magento\Framework\Exception\LocalizedException;
use \Psr\Log\LoggerInterface;

class AutoSendInvoice implements ObserverInterface
{
    /**
     * @var \Magento\Sales\Model\OrderFactory
     */
    protected $orderModel;

    /**
     * @var \Magento\Sales\Model\Order\Email\Sender\InvoiceSender
     */
    protected $invoiceSender;

    /**
     * Logger
     * @var LoggerInterface
     */
    protected $logger;


    /**
     * @param \Magento\Sales\Model\OrderFactory $orderModel
     * @param InvoiceSender $invoiceSender
     * @param LoggerInterface $logger
     */
    public function __construct(
        \Magento\Sales\Model\OrderFactory $orderModel,
        \Magento\Sales\Model\Order\Email\Sender\InvoiceSender $invoiceSender,
        LoggerInterface $logger
    )
    {
        $this->orderModel = $orderModel;
        $this->invoiceSender = $invoiceSender;
        $this->logger = $logger;
    }

    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        // get the corresponding order & invoice
        $order = $observer->getEvent()->getOrder();
        $invoice = $observer->getEvent()->getInvoice();


        if (!$order->getId()) {
            throw new LocalizedException(__('The order no longer exists.'));
        }

        // send invoice email only for PayPal Plus and Amazon Pay AND if order status is "new" or "processing"
        if ( $this->checkPaymentMethod($order ) && $this->checkStateOrder($order )
            ) {
                try {
                    // check if order is allowed to create invoice
                    $this->checkOrder($order);

                    // send invoice email
                    try {
                        $this->invoiceSender->send($invoice);
                    } catch (\Exception $e) {
                        $this->logger->error($e->getMessage());
                    }

                    // add order comment
                    $order->addStatusHistoryComment(
                        'Automatically Invoiced by Vendor',
                        true
                    )->save();


                } catch (\Exception $e) {
                    $this->logger->error($e->getMessage());
                }
            }
        }


    /**
     * @param $order
     * @throws LocalizedException
     */
    protected function checkOrder($order)
    {
        if (!$order->canInvoice()
        ) {
            throw new LocalizedException(
                __('The order does not allow an invoice to be created.')
            );
        }
    }

    protected function checkPaymentMethod($order) {
        // get the payment method for corresponding order
        $payment = $order->getPayment()->getMethodInstance()->getCode();

        if ( $payment == 'iways_paypalplus_payment' || $payment == 'amazon_payment' ) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * Check State Order
     *
     * @param $order
     * @return bool
     */
    protected function checkStateOrder($order)
    {
        if ($order->getState() == Order::STATE_NEW || $order->getState() == Order::STATE_PROCESSING) {
            return true;
        } else {
            return false;
        }
    }
}

我没有任何错误。我在这里错过了什么?

EN

回答 1

Stack Overflow用户

发布于 2020-10-28 06:27:14

可能会有错误:

  1. 检查是否在Admin -> Store -> Config ->销售电子邮件->发票电子邮件中启用发票电子邮件。
  2. 检查是否所有的crons都在工作
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54794596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档