我试图触发客户发票邮件后,已付款的订单和发票已经创建。支付网关是PayPal +和Amazon。如果我正确理解,这些网关会在订单成功处理后立即自动创建发票。
这是我编写的模块,但是在激活它和清除缓存之后什么都不会发生:
app/code/Vendor/AutoSendInvoice/etc/events.xml
<?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
<?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;
}
}
}我没有任何错误。我在这里错过了什么?
发布于 2020-10-28 06:27:14
可能会有错误:
https://stackoverflow.com/questions/54794596
复制相似问题